AnsweredAssumed Answered

FFT normalization

Question asked by giomini on Feb 26, 2014
Latest reply on Mar 4, 2014 by algoss
I'm using the FFT function on a DSO-x 3014A oscilloscope. The application is the noise measurement on a device. To do this the noise is amplified by a factor of 1000 to be greater than the input channel's noise and is low pass filtered around 20kHz. I'm using a 1:1 probe, High resolution mode, DC coupling, 1MOhm and BW limiting. For FFT i am using rectangular windowing.
Of course changing the time/div setting results in a different center-span resolution in the FFT.
For example setting time/div=200ms I have: span=3.91kHz and center=1.96kHz (auto setup).
When I read the data on the computer I use exactly this python code:

scope.write(":SINGle")
wait(scope) #Waits using *OPC? request
scope.write(":WAVeform:FORMat ASCii;SOURce MATH")
fft_preamble=scope.ask(":WAVeform:PREamble?") 
a,a,fft_points,a,fft_step,a,a,a,a,a=scope.ask_for_values(":WAVeform:PREamble?")

I asked twice the preamble to easily have it both in form of a string  in the fft_preamble variable and to extract the number of points and the step between two points. (i am using visa module)

PROBLEM 1:
The two preambles don't match!!!
preamble 1
+4,+3,+8192,+1,+4.76837158E-001,+0.0E+000,+0,+2.44140600E-003,-8.00000000E+001,+32768
preamble 2
+4,+3,+16384,+1,+2.38418579E-001,+0.0E+000,+0,+2.44140600E-003,-8.00000000E+001,+32768

(problem 1b, shortly: the second number should refer to the highres mode, but there's nothing about this on the 3000x series programmer's guide, but doesn't matter now)

I can be sure that the second preamble is correct because in the measurements i can see the 50Hz peak from the AC and 0.2384Hz*16384pts=Frequency span showed on the screen.

PROBLEM 2:
I have to compare FFT curves taken at different frequencies with simulated curves of noise.
To do this I have to normalize everything to 1Hz. I have the FFT in dbV, so i do this:
FFT(in dbV, normalized) = FFT(in dbV, as the oscilloscope gives it to me) -10*log10(frequency_step)

In this way the curves taken at different time/div match. But they are shifted of +3dB with respect of what was expected.

I would not have this normalization problem if the correct preamble was the first one, because if instead of 0.238Hz i would have 0.476Hz and the curves were already shifted by 3dB.

I hope that i explained everything with enough details.
Thank you for the assistance  

Outcomes