"active": "04094233c3d02ad2",
"lastOpenFiles": [
"Nebulous Command/calc.py~",
+ "Nebulous Command/4913",
+ "List of things to do.md",
"Nebulous Command/calc.py",
"Nebulous Command/Notes on Mechanics.md~",
- "List of things to do.md",
"Nebulous Command/Notes on Mechanics.md",
"Nebulous Command/ANS/My Fleets/ANS Dedicated/Battle Report 1.md",
"Nebulous Command/ANS/My Fleets/ANS Dedicated/Battle Report 2.md",
"Pasted image 20251207164533.png",
"Daily/16-01-2025.md",
"Bundesverfassungsgericht/Urteil_des_Ersten_Senats_vom_5_November_2019.pdf",
- "Poems that I like",
"Pasted image 20251106230015.png",
"Pasted image 20251106225651.png",
"Pasted image 20251106225645.png",
+## turns out missiles have radar-cross-sections as well
+
+| Missile | RCS (m^2) (Front / Side) |
+| ----------------- | ------------------------ |
+| SGM-100 Balestra | 156 / 400 |
+| SGM-200 Tempest | 625 / 950 |
+| SGT-300 Pilum | 900 / 2400 |
+| SGM-H-200 Cyclone | 625 / 950 |
+| SGM-H-300 Atlatl | 1600 / 3600 |
+| CM-400 Container | 1600 / 4000 |
+## jamming / jamming power
+Jammer radiated power $P_j$
+Gain $G_j$
+Distance $d$
+$$j=\frac{P_jG_j}{4\pi d^2}$$
+|Jammer power[[1]](https://wiki.hoodedhorse.com/NEBULOUS_Fleet_Command/Electronic_Warfare#cite_note-1)|Multiplier per Jammer|Total[[2]](https://wiki.hoodedhorse.com/NEBULOUS_Fleet_Command/Electronic_Warfare#cite_note-2)|
+|---|---|---|
+|Strongest Jammer|1.000|1.000|
+|2nd Strongest|0.876|1.876|
+|3rd Strongest|0.589|2.465|
+|4th|0.304|2.770|
+|5th|0.121|2.890|
+|6th|0.037|2.927|
+|7th|0.009|2.935|
+|8th|0.002|2.937|
+|9th|<0.001|2.937|
+
+Stats for the Self-Screening Jammer and Boosted Version:
+
+| Jammer | Range (km) | Radiated Power (kW) | Gain (dB) |
+| ----------------------------- | ---------- | ------------------- | --------- |
+| Self Screening Jammer | 2.5 | 5 | 2 |
+| Boosted Self Screening Jammer | 5 | 5 | 4 |
+| | | | |
padding = 16
+@dataclass
+class Jammer:
+ name: str
+ range_km: float
+ radiated_power_kw: int
+ gain_db: int
+
+
+jammers = [
+ Jammer("No Jammer", 0, 0, 0),
+ Jammer("Self Screening Jammer", 2.5, 5, 2),
+ Jammer("Boosted Self Screening Jammer", 5, 5, 4)
+]
+
+
@dataclass
class Ship:
name: str
Ship("Flathead", 9869),
Ship("Ocello", 15745),
Ship("Marauder", 15745),
- Ship("Moorline", 15745)
+ Ship("Moorline", 15745),
+ Ship("SGM-100 Balestra", 156),
+ Ship("SGM-200 Tempest", 625),
+ Ship("SGT-300 Pilum", 900),
+ Ship("SGM-H-200 Cyclone", 625),
+ Ship("SGM-H-300 Atlatl", 1600),
+ Ship("CM300 Container", 1600),
]
return radars[i - 1]
+def select_jammer() -> Jammer:
+ print("Select the index of the radar you want")
+ for i, jammer in enumerate(jammers):
+ print(f"{i+1}: {jammer.name}")
+ i = int(input(":"))
+ return jammers[i - 1]
+
+
def calculate_raw_return_power(
radiated_power, gain, rcs, aperture_size, distance):
top_half = radiated_power * (gain ** 2) * (rcs / 10) * aperture_size
)).ljust(padding)} | {d}""")
-def calculate_distance_noise_floor_radar(radiated_power, gain, rcs, aperture_size):
+def calculate_distance_noise_floor_radar(
+ radiated_power, gain, rcs, aperture_size,
+ noise_floor=1*(10**-7)):
top_half = radiated_power * (gain ** 2) * (rcs / 10) * aperture_size
- bottom_half = (1 * (10 ** -7) * 16 * (math.pi ** 2))
+ bottom_half = (noise_floor * 16 * (math.pi ** 2))
return ((top_half / bottom_half) ** 0.25)
-def calculate_distance_signal_loss_floor_radar(radiated_power, gain, rcs, aperture_size, sensitivity):
+def calculate_distance_signal_loss_floor_radar(
+ radiated_power, gain, rcs, aperture_size, sensitivity):
if sensitivity == 0:
return 0
return (top_half / bottom_half) ** 0.25
+def calculate_jammer_raw_radiated_power(radiated_power, gain, distance):
+ return (radiated_power * gain) / (math.pi * 4 * (distance ** 2))
+
+
def calculate_distance_hidden():
# we want to calculate the distance at which
# we will be hidden from an enemy ships
# that is using a certain radar. Assuming no jamming and no burn throughs.
s = select_ship()
r = select_radar()
+ j = select_jammer()
+
+ rcs_modifiers = [1, 0.9, 0.75, 0.65, 0.6, 0.4475, 0.2]
- rcs_modifiers = [1, 0.9, 0.75, 0.65]
+ # jamming power will simply be done at and half range
+ if j.name != "No Jammer":
+ noise_floorhalf = ((10 ** -7) + calculate_jammer_raw_radiated_power(j.radiated_power_kw, j.gain_db, (j.range_km) * 1000) * r.gain_db) * (10 ** (r.noise_filtering_dB / 10))
+ else:
+ noise_floorhalf = (10 ** -7)
- print(f"The noise floor distance for {s.name} using {r.name}")
+ print(f"The noise floor distance for {s.name} using {r.name} at half jammer range")
for m in rcs_modifiers:
print(f"""{
calculate_distance_noise_floor_radar(
r.radiated_power_kw, r.gain_db, s.rcs_m2 * m,
- r.aperture_size_m2
+ r.aperture_size_m2, noise_floorhalf
):.2f}m with rcs modifier: {m}""")
print(f"The sensitivity distance floor for {s.name} using {r.name}")
options = [
["Calculate Return Power Density for Ship and Radar", calc_rpd],
["Calculate the distance at which the ship should be hidden",
- calculate_distance_hidden]
+ calculate_distance_hidden],
]