From dab9d1e84bbb07b0f8c2771fb5a4ec7b3096f2d8 Mon Sep 17 00:00:00 2001
From: Tobias Hangleiter <tobias.hangleiter@rwth-aachen.de>
Date: Wed, 12 Mar 2025 07:12:15 +0100
Subject: [PATCH] Add MonochromaticNoise

Useful for comparing window functions
---
 src/python_spectrometer/daq/simulator.py | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/python_spectrometer/daq/simulator.py b/src/python_spectrometer/daq/simulator.py
index 57b7ca3..4beb678 100644
--- a/src/python_spectrometer/daq/simulator.py
+++ b/src/python_spectrometer/daq/simulator.py
@@ -47,6 +47,24 @@ except ImportError as e:
                       "'pip install qopt.'") from e
 
 
+class MonochromaticNoise(DAQ):
+    def acquire(self, *, n_avg: int, fs: float, n_pts: int, delay: bool | float = False,
+                A: float = 1, f_0: float = 50, **settings) -> AcquisitionGenerator[DAQ.DTYPE]:
+
+        if delay is True:
+            delay = 1 / settings['df']
+
+        t = np.arange(0, n_pts / fs, 1 / fs)
+        rng = np.random.default_rng()
+
+        for _ in range(n_avg):
+            tic = time.perf_counter()
+            data = np.sin(2 * np.pi * (t * f_0 + rng.random()))
+            if delay:
+                time.sleep(delay - (time.perf_counter() - tic))
+            yield data
+
+
 @dataclasses.dataclass
 class QoptColoredNoise(DAQ):
     """Simulates noise using :mod:`qopt:qopt`.
-- 
GitLab