40m QIL Cryo_Lab CTN SUS_Lab TCS_Lab OMC_Lab CRIME_Lab FEA ENG_Labs OptContFac Mariner WBEEShop | ||||||||||

| ||||||||||

| ||||||||||

| ||||||||||

The script estimates digital noise produces by online filters. First version of Matlab files and complied c files are in scripts/digital_noise directory. Algorithm for 1 filter bank (max number of filters = 10): - extract sos - representation from Foton file for each filter (Matlab)
- download data from corresponding DQ channel using NDS (Matlab)
- find filters that are switched on (Matlab)
- filter signal using Df2 and BQF with single and double precision (C)
- estimate digital filter noise (Matlab)
- calculate power spectral density and plot the result (Matlab)
More details on (2) Often DQ channels have reduced sampling rate. In this case the script will upsample data adding zeros. AI filter is not applied. But in the end only the frequency range (0, DQ RATE / 2) is analyzed. More details on (3): This is done by reading C1:MODEL-BANK_NAME_SW1R and C1:MODEL-BANK_NAME_SW2R channels.
_SW1R channel value is the sum of the following numbers:
- input switch ON / OFF => 4 / 0
- filters 1 - 6 ON /OFF
- 1 => 48 / 0
- 2 => 192 / 0
- 3 => 768 / 0
- 4 => 3072 / 0
- 5 => 12288 / 0
- 6 => 49152 / 0
- If a switch is ON but there is no corresponding filter (one green and one red line under the switch) then the switch value is divided by 3
_SW2R channel value is the sum of the following numbers: - decimation switch ON / OFF => 512 / 0
- output switch ON / OFF => 1024 / 0
- filters 7 - 10 ON /OFF
- 7 => 3 / 0
- 8 => 12 / 0
- 9 => 48 / 0
- 10 => 192 / 0
- If a switch is ON but there is no corresponding filter (one green and one red line under the switch) then the switch value is divided by 3
More details on (5) Digital noise using double precision is estimated by extrapolation of digital noise with single precision. The last is calculated by subtracting outputs of the filters with single and double precision. Then this noise is multiplied by 3 * 10 This extrapolation number was achieved by printf tests of the number 0.123456789012345678 with single and double precision on C. Using type 'float' variables 10 significant numbers show up, using type 'double' - 17. I also did 'calibration tests' to achieve extrapolation number - signal was filters with an aggresive low-pass filter. At high frequencies filter output spectrum is flat => digital noise amplitude must be the same. The plot shows GUR1_X channel filtered with low-pass chebyshev type 1 filter. However, extrapolation number is not the same for all cases. In the following example of analyzing BS_SUSPOS filter bank using extrapolation 3 * 10 To avoid extrapolation problem we can use long double precision (~19 digits). I was able to do this with gcc compiler. However, in mex compiler using long double in filter calculations, I do not get any better precision then using double precision. I'll think more about it. |