Normalize FFT Amplitude to correct voltage
Show older comments
I have a measured time domain signal from an injected signal generated at integer frequencies in my range of interest (on the order of 1 mV every 250Hz). My recorded signal is measured in volts, but I want to perform an FFT to see the amplitude value at specific frequencies.
Assume I have 1 minute of data sampled at 1kHz.
T = 60
Fs = 1000
N = T*Fs = 60e3
dt = 1/Fs = .001
df = Fs/N = 1/T = 1/60
Generate some random data to illustrate this example
data = randn(N,1)
Now I want to perform an FFT, but I want to zero-pad by approximately 10 times the number of data samples.
NFFT = 10*N
dataf = fft(data,NFFT)
The question remains, how do I accurately normalize the data to get the physical voltage value in the frequency domain? I have seen a number of ways to do this, none have fully convinced me yet.
1. Normalize by length of recorded data
dataf/N
2. Normalize by length of FFT
dataf/NFFT
3. Normalize by the sampling frequnecy (or effectively dt)
dataf/Fs
What do I need to do to get units of Volts when zero-padding my FFT?
Answers (1)
Star Strider
on 3 Aug 2016
0 votes
The correct procedure is in the R2015a version of the fft documentation. It’s necessary to divide it by the length of the signal to normalise for the power of the signal. The plot multiplies it by 2 to account for the fact that only half the amplitude is present in the half of the signal you’re plotting. That then gives an accurate depiction of the amplitude of the frequencies in the signal.
Categories
Find more on Fourier Analysis and Filtering in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!