@@ -123,25 +123,14 @@ <h4>Collected Peaks</h4>
123123 var xGrid = new Float64Array ( NPOINTS ) ;
124124 for ( var i = 0 ; i < NPOINTS ; i ++ ) xGrid [ i ] = FMIN + i * df ;
125125
126- // Generate noise once so the baseline doesn't jitter when temperature changes
127- var noiseY = new Float64Array ( NPOINTS ) ;
128- ( function ( ) {
129- var nnoise = 10 ;
130- var noises = [ ] ;
131- for ( var n = 0 ; n < nnoise ; n ++ ) {
132- noises . push ( {
133- freq : 10 + Math . random ( ) * 90 ,
134- phase : Math . random ( ) * 2 * Math . PI ,
135- amp : 0.0005 * Math . random ( ) / nnoise
136- } ) ;
137- }
138- for ( var i = 0 ; i < NPOINTS ; i ++ ) {
139- var y = 0 ;
140- for ( var n = 0 ; n < nnoise ; n ++ )
141- y += noises [ n ] . amp * 0.5 * ( 1 + Math . sin ( noises [ n ] . freq * xGrid [ i ] + noises [ n ] . phase ) ) ;
142- noiseY [ i ] = y ;
143- }
144- } ) ( ) ;
126+ function randGauss ( ) {
127+ var u = 0 , v = 0 ;
128+ while ( u === 0 ) u = Math . random ( ) ;
129+ while ( v === 0 ) v = Math . random ( ) ;
130+ return Math . sqrt ( - 2.0 * Math . log ( u ) ) * Math . cos ( 2.0 * Math . PI * v ) ;
131+ }
132+
133+ var NOISE_FRAC = 0.012 ;
145134
146135 function computeLines ( T ) {
147136 var B0 = Be - ae * 0.5 ;
@@ -182,7 +171,6 @@ <h4>Collected Peaks</h4>
182171
183172 function computeSpectrum ( lines ) {
184173 var y = new Float64Array ( NPOINTS ) ;
185- for ( var i = 0 ; i < NPOINTS ; i ++ ) y [ i ] = noiseY [ i ] ;
186174
187175 var cutoff = 3 * SIGMA ;
188176 var invSigSq = 1 / ( SIGMA * SIGMA ) ;
@@ -200,6 +188,18 @@ <h4>Collected Peaks</h4>
200188 y [ i ] += li * Math . exp ( - dv * dv * invSigSq ) ;
201189 }
202190 }
191+
192+ var yMax = 0 ;
193+ for ( var i = 0 ; i < NPOINTS ; i ++ ) {
194+ if ( y [ i ] > yMax ) yMax = y [ i ] ;
195+ }
196+ var noiseSigma = NOISE_FRAC * yMax ;
197+
198+ var floor = 1e-10 ;
199+ for ( var i = 0 ; i < NPOINTS ; i ++ ) {
200+ y [ i ] += noiseSigma * randGauss ( ) ;
201+ if ( y [ i ] < floor ) y [ i ] = floor ;
202+ }
203203 return y ;
204204 }
205205
0 commit comments