]> git.example.dev Git - research-obsidian.git/commitdiff
updated: initial e-war research done, now we have to see how that pans out
author2weiEmu <zweiemu@gmail.com>
Tue, 3 Feb 2026 11:01:49 +0000 (12:01 +0100)
committer2weiEmu <zweiemu@gmail.com>
Tue, 3 Feb 2026 11:01:49 +0000 (12:01 +0100)
.obsidian/workspace.json
Nebulous Command/Notes on Mechanics.md
Nebulous Command/calc.py

index 48ce2f270d6a0eaf11f699b77257b95ed875f9bd..f82e2f3ee6cfbb3c935eafd9d997f14839b90f93 100644 (file)
   "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",
index db021b1b4725a4ee931f8cd2092202cee419ce31..bea2ef377ce252b0d8753728a6e932dd014b904e 100644 (file)
@@ -100,3 +100,37 @@ you can lock multiple missiles if you have multiple fcrs. locks function mostlyl
 
 
 
+## 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         |
+|                               |            |                     |           |
index 2a1d0718b46a073dddc70fc7947af77b1c53d28a..1a9f9967516c29fe2afea74727b5d66cb3dd28b7 100644 (file)
@@ -6,6 +6,21 @@ import math
 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
@@ -24,7 +39,13 @@ ships = [
     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),
 ]
 
 
@@ -70,6 +91,14 @@ def select_radar() -> Radar:
     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
@@ -100,13 +129,16 @@ def calc_rpd():
         )).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
 
@@ -117,21 +149,32 @@ def calculate_distance_signal_loss_floor_radar(radiated_power, gain, rcs, apertu
     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}")
@@ -151,7 +194,7 @@ def print_options():
 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],
 ]