Normalization of zero padded signals
11 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I have a simple question regarding zero padding and normalization. Consider an impulse resonse of a 4 point moving average filter. and its fft zero padded to 1024 points..
x=[1/4 1/4 1/4 1/4]
X=fft(x,1024 )
xpowrsum=dot(x,x)
Xpowrsum=dot(abs(X),abs(X))/1024
plot(fftshift(abs(X)))
![FFT of 4 PT moving average](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1164733/FFT%20of%204%20PT%20moving%20average.jpeg)
By Parsevals theorem the two energies are equal as expected. However, the fft without scaling shows the correct frequency response with a gain of 1 at 0 Hz. So why do I always read the FFT should be scaled by the number of samples before zero padding (in this case 4) if I am interested in the magnitude response of the filter?
0 Commenti
Risposte (2)
Matt J
il 21 Ott 2022
Modificato: Matt J
il 21 Ott 2022
So why do I always read the FFT should be scaled by the number of samples before zero padding (in this case 4) if I am interested in the magnitude response of the filter?
The FFT is a tool with many applications, each with its own appropriate scaling.
Scaling by 1/N is done when the FFT is being used to evaluate the Discrete Fourier Series.
When it is being used to approximate the continuous Fourier transform, it is scaled by the time sampling interval 1/Fs.
To achieve Parseval's equality, the fft should be scaled by 1/sqrt(N):
x=[1/4 1/4 1/4 1/4];
X=fft(x,1024 )/sqrt(1024);
xpowrsum=norm(x).^2
Xpowrsum=norm(X).^2
6 Commenti
Matt J
il 23 Ott 2022
Modificato: Matt J
il 23 Ott 2022
One example to motivate the 1/N factor is to consider a periodic signal like,
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1166613/image.png)
If the goal is to recover the coefficients of the sinusoidal terms (5 and 3), we can see in the following code that the 1/N is necessary.
N=10;
n=(0:9)';
x=5+3*exp(1j*2*pi*n/N);
c=fft(x)/N
Marc Fuller
il 23 Ott 2022
9 Commenti
Paul
il 24 Ott 2022
I thought that you probably meant that. I haven't looked at cyconv. Is it preferred over Matlab's cconv for some reason?
rng(100);
x=rand(1,5); h=rand(1,5);
fft(cconv(x,h,5))
fft(x).*fft(h)
Vedere anche
Categorie
Scopri di più su Fourier Analysis and Filtering in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!