From f2e4a613af05ff3206a54e4c7b6c3931e2e6469d Mon Sep 17 00:00:00 2001
From: Jean-Baptiste Bayle <j2b.bayle@gmail.com>
Date: Wed, 10 Mar 2021 19:07:06 +0100
Subject: [PATCH] Implement OMS noises

---
 lisainstrument/noises.py | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/lisainstrument/noises.py b/lisainstrument/noises.py
index 417a511..fb53f66 100644
--- a/lisainstrument/noises.py
+++ b/lisainstrument/noises.py
@@ -204,3 +204,29 @@ def testmass(fs, size, asd=2.4E-15, fknee=0.4E-3):
         fs, size, asd, fknee)
     return red(fs, size, asd / (2 * pi * c)) \
         + infrared(fs, size, asd * fknee / (2 * pi * c))
+
+def oms(fs, size, asd, fknee):
+    """Generate optical metrology system (OMS) noise allocation [ffs].
+
+    The power spectral density in displacement is given by
+
+        S_bl(f) [m] = asd^2 [ 1 + (fknee / f)^4 ].
+
+    Multiplying by (2Ï€ f / c)^2 to express it as fractional frequency deviations,
+
+        S_bl(f) [ffd] = (2Ï€ asd / c)^2 [ f^2 + (fknee^4 / f^2) ]
+                      = (2Ï€ asd / c)^2 f^2 + (2Ï€ asd fknee^2 / c)^2 f^(-2)
+
+    Note that the level of this noise depends on the interferometer and the type of beatnote.
+
+    Warning: this corresponds to the overall allocation for the OMS noise from the Performance
+    Model. It is a collection of different noises, some of which are duplicates of standalone
+    noises we already implement in the simulation (e.g., backlink noise).
+
+    Because this is a optical pathlength noise expressed as fractional frequency deviation, it should
+    be multiplied by the beam frequency to obtain the beam frequency fluctuations.
+    """
+    logger.debug("Generating OMS noise (fs=%s Hz, size=%s, asd=%s m/sqrt(Hz), fknee=%s Hz)",
+        fs, size, asd, fknee)
+    return violet(fs, size, 2 * pi * asd / c) \
+        + red(fs, size, 2 * pi * asd * fknee**2 / c)
-- 
GitLab