diff --git a/recording_generation.py b/recording_generation.py index ed686d3..cb4b329 100644 --- a/recording_generation.py +++ b/recording_generation.py @@ -61,7 +61,7 @@ class RecordingGenerator: def generate_wb(self, num: int = 2, length: int = 8192): for i in range(num): recording = create_noise_recording( - length=length, rms_power=0.2, counter=random.choice([2, 4, 8, 16, 32]) + length=length, rms_power=0.2, seed=num ) recording.to_npy(filename=f"wb{i + 1}", overwrite=True) print(f"wb{i + 1} file saved.") diff --git a/signal_generation.py b/signal_generation.py index deada3c..2fbf120 100644 --- a/signal_generation.py +++ b/signal_generation.py @@ -99,24 +99,23 @@ def create_lfm_recording( def create_noise_recording( rms_power: float, length: int, - counter: int, + seed: int | None = None ) -> Recording: """Generate a Recording of Additive White Gaussian Noise (AWGN).""" # 1. Create a repeating pseudo-random envelope - np.random.seed(256 + counter) - chunk = np.random.rand(length // 4) - tiled = np.tile(chunk, 4) - amplitude_envelope = np.sqrt(tiled) + if seed is not None: + np.random.seed(seed) + + # 2. Sigma for complex AWGN: + sigma = np.sqrt(rms_power / 2) - # 2. Generate complex Gaussian noise with unit power - real = np.random.normal(0, 1, length) - imag = np.random.normal(0, 1, length) + # 3. Generate complex Gaussian noise with correct power + real = np.random.normal(0, sigma, length) + imag = np.random.normal(0, sigma, length) complex_noise = real + 1j * imag - # 3. Scale noise by desired power and envelope - scaled_noise = complex_noise * amplitude_envelope * np.sqrt(rms_power) - metadata = {"interference": "wb", "signal_type": "noise"} - return Recording(data=scaled_noise, metadata=metadata) + metadata = {"interference": "wb", "signal_type": "noise", "rms_power": rms_power} + return Recording(data=complex_noise, metadata=metadata) def create_ctnb_recording(length: int) -> Recording: