我在使用零填充时遇到了麻烦。据我了解,理论上,时域中的零填充应该“sinc-interpolate”频域中信号的 FFT。
这意味着,1)原始信号的值都没有改变。2) FFT 的整体轮廓没有改变——也就是峰值保持在同一点附近。
但是,在模拟中这不起作用。
例如,我对以下序列进行 FFT
x=[0 1 0 1 0 1 0 1]
在一个假想的相同频率下,Fs=1Hz。没有零填充(FFT-8),
|X(f=.3125)|=4。
使用 2x 零填充 (FFT-14),
|X(f=.3125)|=2.6。
作为 ,。此外,FFT 的峰值从 0.3125 移动到 0.25 作为。
这是我的代码。相关参数为ZP,控制补零量(N=8*ZP):
ZP=0; % of times of original length of signal to ZP with
x=[0 1 0 1 0 1 0 1];
x=[x,zeros(1,length(x)*2^ZP-length(x))];
X=fft(x);
Fs=1;
L=length(x);
df=.5*Fs/L;
t=(1:L)*(1/Fs);
f=(1:L)*df;
figure(12),
subplot(211), stem(x);
subplot(212), stem(f,abs(X)); xlim([-.02,.52])
test_pnt=.3125;
I=find(f==test_pnt);
title(['abs[X(' mat2str(test_pnt) ')]=' mat2str(abs(X(I)))]);