【发布时间】:2021-05-27 03:11:07
【问题描述】:
我对@987654329@ 的零填充有疑问。我运行了fft,使用零填充和不使用零填充并进行了比较。
sf = 100; %sampling frequency
dt=1/sf; %time sampling interval
L = 10; %Length of signal
t = linspace(0,L,L/dt+1);
%zero-padding
nfft = 2^nextpow2(length(t)); %expansion of the data length for fft
t(length(t)+1:nfft) = 0; L = dt*nfft; t = linspace(0,L,L/dt+1);
t(end)=[];
fr = 4; %frequency
data = cos(2*pi*fr1*t);
df = sf/length(data); %frequency increment
f = (0:length(data)/2)*df;
fft_result =fft(data)/length(data);
spec_fft = 2*abs(fft_result); %spectrum
pha_fft = angle(fft_result); %phase
pha_fft = rad2deg(pha_fft);
subplot(2,1,1);
stem(f,spec_fft(1:length(f)));
subplot(2,1,2);
stem(f,pha_fft(1:length(f)));
当我在没有零填充的情况下执行fft 时,幅度显示清晰,相位也清晰(我认为其他频率的相位是由于幅度值非常小而不是零)。但是当我使用零填充时,我可以看到我输入的附近频率(4Hz)的幅度显示出不同的方面,并且相位的结果在我看来很奇怪。当我使用零填充时,我的代码有问题吗?
*Cris Luengo 的 cmets 的附加问题
我尝试将零填充到扩展长度的数据中。
nfft = 2^nextpow2(length(t)); %expansion of the data length for fft
data(length(t)+1:nfft) = 0;
我想知道我的结果是否还可以。
【问题讨论】:
-
你零填充
t,然后创建一个全新的t。然后生成相同长度的信号,而不是对其进行零填充。 -
另外,请注意在填充的情况下频率的幅度几乎为零,对于 epsilon 幅度频率的频谱相位没有意义。
-
@Cris Luengo 感谢您的回答。但实际上,我已经尝试在数据中填充零,它显示了一个更奇怪的结果。我将编辑我的问题,请检查我的其他结果。
标签: matlab fft zero-padding