浏览代码

Add Voyager 1 example

David Peter 1 年之前
父节点
当前提交
e3aa7b7230
共有 6 个文件被更改,包括 99 次插入2 次删除
  1. 1 0
      book/build.sh
  2. 1 0
      book/src/SUMMARY.md
  3. 50 0
      book/src/example-voyager.md
  4. 1 1
      book/src/list-units.md
  5. 44 0
      examples/voyager.nbt
  6. 2 1
      numbat/modules/units/bit.nbt

+ 1 - 0
book/build.sh

@@ -37,6 +37,7 @@ generate_example paper_size "Paper sizes" false
 generate_example pipe_flow_rate "Flow rate in a pipe" true
 generate_example population_growth "Population growth" true
 generate_example recipe "Recipe" true
+generate_example voyager "Voyager" true
 generate_example xkcd_687 "XKCD 687" true
 generate_example xkcd_2585 "XKCD 2585" true
 generate_example xkcd_2812 "XKCD 2812" true

+ 1 - 0
book/src/SUMMARY.md

@@ -16,6 +16,7 @@
     - [Paper sizes](./example-paper_size.md)
     - [Population growth](./example-population_growth.md)
     - [Recipe](./example-recipe.md)
+    - [Voyager](./example-voyager.md)
     - [XKCD 687](./example-xkcd_687.md)
     - [XKCD 2585](./example-xkcd_2585.md)
     - [XKCD 2812](./example-xkcd_2812.md)

+ 50 - 0
book/src/example-voyager.md

@@ -0,0 +1,50 @@
+<!-- This file is autogenerated! Do not modify it -->
+
+# Voyager
+
+``` numbat
+# How many photons are received per bit transmitted from Voyager 1?
+#
+# This calculation is adapted from a Physics Stack Exchange answer [1].
+#
+# [1] https://physics.stackexchange.com/a/816710
+
+# Voyager radio transmission:
+let datarate = 160 bps
+let f = 8.3 GHz
+let P_transmit = 23 W
+
+let ω = 2π f
+let λ = c / f
+
+@aliases(photon)
+unit photons
+
+let energy_per_photon = ℏ ω / photon
+
+let photon_rate = P_transmit / energy_per_photon -> photons/s
+
+print("Voyager sends data at a rate of {datarate} with {P_transmit}.")
+print("At a frequency of {f}, this amounts to {photon_rate:.0e}.")
+
+# Voyager dish antenna:
+let d_voyager = 3.7 m
+
+# Voyagers distance to Earth:
+let R = 23.5 billion kilometers  # as of 2024
+
+# Diameter of receiver dish:
+let d_receiver = 70 m
+
+let irradiance = P_transmit / (4π R²)
+let P_received: Power = irradiance × (π d_voyager / λ)² × (π d_receiver² / 4)
+
+print("A {d_receiver} dish on Earth will receive {P_received -> aW:.1f} of power.")
+
+let photon_rate_receiver = P_received / energy_per_photon -> photons/s
+let photons_per_bit = photon_rate_receiver / datarate -> photons/bit
+
+print()
+print("This corresponds to {photon_rate_receiver}.")
+print("Which means {photons_per_bit:.0}.")
+```

+ 1 - 1
book/src/list-units.md

@@ -28,9 +28,9 @@ and — where sensible — units allow for [binary prefixes](https://en.wikipedi
 | `Capacitance` | [Farad](https://en.wikipedia.org/wiki/Farad) | `F`, `farad`, `farads` |
 | `CatalyticActivity` | [Katal](https://en.wikipedia.org/wiki/Katal) | `kat`, `katal`, `katals` |
 | `Current` | [Ampere](https://en.wikipedia.org/wiki/Ampere) | `A`, `ampere`, `amperes` |
+| `DataRate` | [Bits per second](https://en.wikipedia.org/wiki/Bit_per_second) | `bps` |
 | `DigitalInformation` | [Bit](https://en.wikipedia.org/wiki/Bit) | `bit`, `bits` |
 | `DigitalInformation` | [Byte](https://en.wikipedia.org/wiki/Byte) | `B`, `byte`, `Byte`, `bytes`, `Bytes`, `octet`, `Octet`, `octets`, `Octets` |
-| `DigitalInformation / Time` | [Bits per second](https://en.wikipedia.org/wiki/Bit_per_second) | `bps` |
 | `Dot` | [Dot](https://en.wikipedia.org/wiki/Dots_per_inch) | `dot`, `dots` |
 | `Dot / Length` | [Dots per inch](https://en.wikipedia.org/wiki/Dots_per_inch) | `dpi` |
 | `DynamicViscosity` | [Poise](https://en.wikipedia.org/wiki/Poise_(unit)) | `poise` |

+ 44 - 0
examples/voyager.nbt

@@ -0,0 +1,44 @@
+# How many photons are received per bit transmitted from Voyager 1?
+#
+# This calculation is adapted from a Physics Stack Exchange answer [1].
+#
+# [1] https://physics.stackexchange.com/a/816710
+
+# Voyager radio transmission:
+let datarate = 160 bps
+let f = 8.3 GHz
+let P_transmit = 23 W
+
+let ω = 2π f
+let λ = c / f
+
+@aliases(photon)
+unit photons
+
+let energy_per_photon = ℏ ω / photon
+
+let photon_rate = P_transmit / energy_per_photon -> photons/s
+
+print("Voyager sends data at a rate of {datarate} with {P_transmit}.")
+print("At a frequency of {f}, this amounts to {photon_rate:.0e}.")
+
+# Voyager dish antenna:
+let d_voyager = 3.7 m
+
+# Voyagers distance to Earth:
+let R = 23.5 billion kilometers  # as of 2024
+
+# Diameter of receiver dish:
+let d_receiver = 70 m
+
+let irradiance = P_transmit / (4π R²)
+let P_received: Power = irradiance × (π d_voyager / λ)² × (π d_receiver² / 4)
+
+print("A {d_receiver} dish on Earth will receive {P_received -> aW:.1f} of power.")
+
+let photon_rate_receiver = P_received / energy_per_photon -> photons/s
+let photons_per_bit = photon_rate_receiver / datarate -> photons/bit
+
+print()
+print("This corresponds to {photon_rate_receiver}.")
+print("Which means {photons_per_bit:.0}.")

+ 2 - 1
numbat/modules/units/bit.nbt

@@ -1,6 +1,7 @@
 use units::si
 
 dimension DigitalInformation
+dimension DataRate = DigitalInformation / Time
 
 @name("Bit")
 @url("https://en.wikipedia.org/wiki/Bit")
@@ -20,4 +21,4 @@ unit byte: DigitalInformation = 8 bit
 @url("https://en.wikipedia.org/wiki/Bit_per_second")
 @metric_prefixes
 @aliases(bps: short)
-unit bps: DigitalInformation / Time = bit / second
+unit bps: DataRate = bit / second