Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
LISA Instrument
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
LISA Simulation
LISA Instrument
Commits
605bc4dd
Commit
605bc4dd
authored
4 years ago
by
Jean-Baptiste Bayle
Browse files
Options
Downloads
Plain Diff
Merge branch '20-add-a-first-model-for-measurement-readout-noise' into 'master'
Resolve "Add a first model for measurement/readout noise" Closes
#20
See merge request
!31
parents
08c0998c
21a8b456
No related branches found
No related tags found
1 merge request
!31
Resolve "Add a first model for measurement/readout noise"
Pipeline
#109711
passed
4 years ago
Stage: test
Changes
3
Pipelines
1
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
lisainstrument/instrument.py
+65
-8
65 additions, 8 deletions
lisainstrument/instrument.py
lisainstrument/noises.py
+24
-0
24 additions, 0 deletions
lisainstrument/noises.py
tests/noises.ipynb
+100
-2
100 additions, 2 deletions
tests/noises.ipynb
with
189 additions
and
10 deletions
lisainstrument/instrument.py
+
65
−
8
View file @
605bc4dd
...
@@ -45,6 +45,7 @@ class Instrument:
...
@@ -45,6 +45,7 @@ class Instrument:
clock_freqquaddrifts
=
None
,
clockinv_tolerance
=
1E-10
,
clockinv_maxiter
=
5
,
clock_freqquaddrifts
=
None
,
clockinv_tolerance
=
1E-10
,
clockinv_maxiter
=
5
,
# Optical pathlength noises
# Optical pathlength noises
backlink_asds
=
3E-12
,
backlink_fknees
=
2E-3
,
testmass_asds
=
2.4E-15
,
testmass_fknees
=
0.4E-3
,
backlink_asds
=
3E-12
,
backlink_fknees
=
2E-3
,
testmass_asds
=
2.4E-15
,
testmass_fknees
=
0.4E-3
,
oms_asds
=
(
6.35E-12
,
1.25E-11
,
1.42E-12
,
3.38E-12
,
3.32E-12
,
7.90E-12
),
oms_fknees
=
2E-3
,
# Pseudo-ranging
# Pseudo-ranging
ranging_biases
=
0
,
ranging_asds
=
3E-9
,
ranging_biases
=
0
,
ranging_asds
=
3E-9
,
# Physics simulation sampling and filtering
# Physics simulation sampling and filtering
...
@@ -80,7 +81,10 @@ class Instrument:
...
@@ -80,7 +81,10 @@ class Instrument:
backlink_asds: dictionary of amplitude spectral densities for backlink noise [m/sqrt(Hz)]
backlink_asds: dictionary of amplitude spectral densities for backlink noise [m/sqrt(Hz)]
backlink_fknees: dictionary of cutoff frequencied for backlink noise [Hz]
backlink_fknees: dictionary of cutoff frequencied for backlink noise [Hz]
testmass_asds: dictionary of amplitude spectral densities for test-mass noise [ms^(-2)/sqrt(Hz)]
testmass_asds: dictionary of amplitude spectral densities for test-mass noise [ms^(-2)/sqrt(Hz)]
testmass_fknees: dictionary of cutoff frequencied for test-mass noise [Hz]
testmass_fknees: dictionary of cutoff frequencies for test-mass noise [Hz]
oms_asds: tuple of dictionaries of amplitude spectral densities for OMS noise [m/sqrt(Hz)],
ordered as (isc_carrier, isc_usb, tm_carrier, tm_usb, ref_carrier, ref_usb)
oms_fknees: dictionary of cutoff frequencies for OMS noise
ranging_biases: dictionary of ranging noise bias [s]
ranging_biases: dictionary of ranging noise bias [s]
ranging_asds: dictionary of ranging noise amplitude spectral densities [s/sqrt(Hz)]
ranging_asds: dictionary of ranging noise amplitude spectral densities [s/sqrt(Hz)]
physics_upsampling: ratio of sampling frequencies for physics vs. measurement simulation
physics_upsampling: ratio of sampling frequencies for physics vs. measurement simulation
...
@@ -163,11 +167,18 @@ class Instrument:
...
@@ -163,11 +167,18 @@ class Instrument:
self
.
ranging_biases
=
ForEachMOSA
(
ranging_biases
)
self
.
ranging_biases
=
ForEachMOSA
(
ranging_biases
)
self
.
ranging_asds
=
ForEachMOSA
(
ranging_asds
)
self
.
ranging_asds
=
ForEachMOSA
(
ranging_asds
)
# Backlink and test-mass acceleration noise
# Backlink
, OMS
and test-mass acceleration noise
self
.
backlink_asds
=
ForEachMOSA
(
backlink_asds
)
self
.
backlink_asds
=
ForEachMOSA
(
backlink_asds
)
self
.
backlink_fknees
=
ForEachMOSA
(
backlink_fknees
)
self
.
backlink_fknees
=
ForEachMOSA
(
backlink_fknees
)
self
.
testmass_asds
=
ForEachMOSA
(
testmass_asds
)
self
.
testmass_asds
=
ForEachMOSA
(
testmass_asds
)
self
.
testmass_fknees
=
ForEachMOSA
(
testmass_fknees
)
self
.
testmass_fknees
=
ForEachMOSA
(
testmass_fknees
)
self
.
oms_isc_carrier_asds
=
ForEachMOSA
(
oms_asds
[
0
])
self
.
oms_isc_usb_asds
=
ForEachMOSA
(
oms_asds
[
1
])
self
.
oms_tm_carrier_asds
=
ForEachMOSA
(
oms_asds
[
2
])
self
.
oms_tm_usb_asds
=
ForEachMOSA
(
oms_asds
[
3
])
self
.
oms_ref_carrier_asds
=
ForEachMOSA
(
oms_asds
[
4
])
self
.
oms_ref_usb_asds
=
ForEachMOSA
(
oms_asds
[
5
])
self
.
oms_fknees
=
ForEachMOSA
(
oms_fknees
)
# Frequency plan
# Frequency plan
if
offsets_freqs
is
not
None
:
if
offsets_freqs
is
not
None
:
...
@@ -391,6 +402,12 @@ class Instrument:
...
@@ -391,6 +402,12 @@ class Instrument:
"""
Turn off all optical pathlength noises.
"""
"""
Turn off all optical pathlength noises.
"""
self
.
backlink_asds
=
ForEachMOSA
(
0
)
self
.
backlink_asds
=
ForEachMOSA
(
0
)
self
.
testmass_asds
=
ForEachMOSA
(
0
)
self
.
testmass_asds
=
ForEachMOSA
(
0
)
self
.
oms_isc_carrier_asds
=
ForEachMOSA
(
0
)
self
.
oms_isc_usb_asds
=
ForEachMOSA
(
0
)
self
.
oms_tm_carrier_asds
=
ForEachMOSA
(
0
)
self
.
oms_tm_usb_asds
=
ForEachMOSA
(
0
)
self
.
oms_ref_carrier_asds
=
ForEachMOSA
(
0
)
self
.
oms_ref_usb_asds
=
ForEachMOSA
(
0
)
def
disable_ranging_noises
(
self
):
def
disable_ranging_noises
(
self
):
"""
Turn off all pseudo-ranging noises.
"""
"""
Turn off all pseudo-ranging noises.
"""
...
@@ -541,7 +558,8 @@ class Instrument:
...
@@ -541,7 +558,8 @@ class Instrument:
logger
.
debug
(
"
Computing inter-spacecraft carrier beatnote fluctuations on TPS
"
)
logger
.
debug
(
"
Computing inter-spacecraft carrier beatnote fluctuations on TPS
"
)
self
.
tps_isc_carrier_fluctuations
=
\
self
.
tps_isc_carrier_fluctuations
=
\
self
.
distant_isc_carrier_fluctuations
-
self
.
local_isc_carrier_fluctuations
self
.
distant_isc_carrier_fluctuations
-
self
.
local_isc_carrier_fluctuations
\
+
self
.
central_freq
*
self
.
oms_isc_carrier_noises
logger
.
debug
(
"
Computing inter-spacecraft upper sideband beatnote offsets on TPS
"
)
logger
.
debug
(
"
Computing inter-spacecraft upper sideband beatnote offsets on TPS
"
)
self
.
tps_isc_usb_offsets
=
\
self
.
tps_isc_usb_offsets
=
\
...
@@ -549,7 +567,8 @@ class Instrument:
...
@@ -549,7 +567,8 @@ class Instrument:
logger
.
debug
(
"
Computing inter-spacecraft upper sideband beatnote fluctuations on TPS
"
)
logger
.
debug
(
"
Computing inter-spacecraft upper sideband beatnote fluctuations on TPS
"
)
self
.
tps_isc_usb_fluctuations
=
\
self
.
tps_isc_usb_fluctuations
=
\
self
.
distant_isc_usb_fluctuations
-
self
.
local_isc_usb_fluctuations
self
.
distant_isc_usb_fluctuations
-
self
.
local_isc_usb_fluctuations
\
+
self
.
central_freq
*
self
.
oms_isc_usb_noises
## Measured pseudo-ranging on TPS grid (high-frequency)
## Measured pseudo-ranging on TPS grid (high-frequency)
...
@@ -604,7 +623,8 @@ class Instrument:
...
@@ -604,7 +623,8 @@ class Instrument:
logger
.
debug
(
"
Computing test-mass carrier beatnote fluctuations on TPS
"
)
logger
.
debug
(
"
Computing test-mass carrier beatnote fluctuations on TPS
"
)
self
.
tps_tm_carrier_fluctuations
=
\
self
.
tps_tm_carrier_fluctuations
=
\
self
.
adjacent_tm_carrier_fluctuations
-
self
.
local_tm_carrier_fluctuations
self
.
adjacent_tm_carrier_fluctuations
-
self
.
local_tm_carrier_fluctuations
\
+
self
.
central_freq
*
self
.
oms_tm_carrier_noises
logger
.
debug
(
"
Computing test-mass upper sideband beatnote offsets on TPS
"
)
logger
.
debug
(
"
Computing test-mass upper sideband beatnote offsets on TPS
"
)
self
.
tps_tm_usb_offsets
=
\
self
.
tps_tm_usb_offsets
=
\
...
@@ -612,7 +632,8 @@ class Instrument:
...
@@ -612,7 +632,8 @@ class Instrument:
logger
.
debug
(
"
Computing test-mass upper sideband beatnote fluctuations on TPS
"
)
logger
.
debug
(
"
Computing test-mass upper sideband beatnote fluctuations on TPS
"
)
self
.
tps_tm_usb_fluctuations
=
\
self
.
tps_tm_usb_fluctuations
=
\
self
.
adjacent_tm_usb_fluctuations
-
self
.
local_tm_usb_fluctuations
self
.
adjacent_tm_usb_fluctuations
-
self
.
local_tm_usb_fluctuations
\
+
self
.
central_freq
*
self
.
oms_tm_usb_noises
## Reference interferometer local beams
## Reference interferometer local beams
...
@@ -656,7 +677,8 @@ class Instrument:
...
@@ -656,7 +677,8 @@ class Instrument:
logger
.
debug
(
"
Computing reference carrier beatnote fluctuations on TPS
"
)
logger
.
debug
(
"
Computing reference carrier beatnote fluctuations on TPS
"
)
self
.
tps_ref_carrier_fluctuations
=
\
self
.
tps_ref_carrier_fluctuations
=
\
self
.
adjacent_ref_carrier_fluctuations
-
self
.
local_ref_carrier_fluctuations
self
.
adjacent_ref_carrier_fluctuations
-
self
.
local_ref_carrier_fluctuations
\
+
self
.
central_freq
*
self
.
oms_ref_carrier_noises
logger
.
debug
(
"
Computing reference upper sideband beatnote offsets on TPS
"
)
logger
.
debug
(
"
Computing reference upper sideband beatnote offsets on TPS
"
)
self
.
tps_ref_usb_offsets
=
\
self
.
tps_ref_usb_offsets
=
\
...
@@ -664,7 +686,8 @@ class Instrument:
...
@@ -664,7 +686,8 @@ class Instrument:
logger
.
debug
(
"
Computing reference upper sideband beatnote fluctuations on TPS
"
)
logger
.
debug
(
"
Computing reference upper sideband beatnote fluctuations on TPS
"
)
self
.
tps_ref_usb_fluctuations
=
\
self
.
tps_ref_usb_fluctuations
=
\
self
.
adjacent_ref_usb_fluctuations
-
self
.
local_ref_usb_fluctuations
self
.
adjacent_ref_usb_fluctuations
-
self
.
local_ref_usb_fluctuations
\
+
self
.
central_freq
*
self
.
oms_ref_usb_noises
## Sampling beatnotes and measured pseudo-ranges to THE grid
## Sampling beatnotes and measured pseudo-ranges to THE grid
...
@@ -922,6 +945,40 @@ class Instrument:
...
@@ -922,6 +945,40 @@ class Instrument:
self
.
physics_size
,
self
.
ranging_asds
[
mosa
])
self
.
physics_size
,
self
.
ranging_asds
[
mosa
])
)
)
## OMS noise
logger
.
info
(
"
Generating OMS noise
"
)
self
.
oms_isc_carrier_noises
=
ForEachMOSA
(
lambda
mosa
:
noises
.
oms
(
self
.
physics_fs
,
self
.
physics_size
,
self
.
oms_isc_carrier_asds
[
mosa
],
self
.
oms_fknees
[
mosa
])
)
self
.
oms_isc_usb_noises
=
ForEachMOSA
(
lambda
mosa
:
noises
.
oms
(
self
.
physics_fs
,
self
.
physics_size
,
self
.
oms_isc_usb_asds
[
mosa
],
self
.
oms_fknees
[
mosa
])
)
self
.
oms_tm_carrier_noises
=
ForEachMOSA
(
lambda
mosa
:
noises
.
oms
(
self
.
physics_fs
,
self
.
physics_size
,
self
.
oms_tm_carrier_asds
[
mosa
],
self
.
oms_fknees
[
mosa
])
)
self
.
oms_tm_usb_noises
=
ForEachMOSA
(
lambda
mosa
:
noises
.
oms
(
self
.
physics_fs
,
self
.
physics_size
,
self
.
oms_tm_usb_asds
[
mosa
],
self
.
oms_fknees
[
mosa
])
)
self
.
oms_ref_carrier_noises
=
ForEachMOSA
(
lambda
mosa
:
noises
.
oms
(
self
.
physics_fs
,
self
.
physics_size
,
self
.
oms_ref_carrier_asds
[
mosa
],
self
.
oms_fknees
[
mosa
])
)
self
.
oms_ref_usb_noises
=
ForEachMOSA
(
lambda
mosa
:
noises
.
oms
(
self
.
physics_fs
,
self
.
physics_size
,
self
.
oms_ref_usb_asds
[
mosa
],
self
.
oms_fknees
[
mosa
])
)
def
invert_timer_deviations
(
self
,
timer_deviations
,
sc
):
def
invert_timer_deviations
(
self
,
timer_deviations
,
sc
):
"""
Invert timer deviations of a given spacecraft.
"""
Invert timer deviations of a given spacecraft.
...
...
This diff is collapsed.
Click to expand it.
lisainstrument/noises.py
+
24
−
0
View file @
605bc4dd
...
@@ -204,3 +204,27 @@ def testmass(fs, size, asd=2.4E-15, fknee=0.4E-3):
...
@@ -204,3 +204,27 @@ def testmass(fs, size, asd=2.4E-15, fknee=0.4E-3):
fs
,
size
,
asd
,
fknee
)
fs
,
size
,
asd
,
fknee
)
return
red
(
fs
,
size
,
asd
/
(
2
*
pi
*
c
))
\
return
red
(
fs
,
size
,
asd
/
(
2
*
pi
*
c
))
\
+
infrared
(
fs
,
size
,
asd
*
fknee
/
(
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_oms(f) [m] = asd^2 [ 1 + (fknee / f)^4 ].
Multiplying by (2π f / c)^2 to express it as fractional frequency deviations,
S_oms(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).
"""
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
)
This diff is collapsed.
Click to expand it.
tests/noises.ipynb
+
100
−
2
View file @
605bc4dd
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment