关于Matlab中FFT的补零

pkln4tw6  于 2023-11-21  发布在  Matlab
关注(0)|答案(2)|浏览(283)

我有一个关于fft的零填充的问题。我运行了有零填充的fft &没有零填充的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评论的补充问题

我试着用扩展长度在数据中补零。

nfft = 2^nextpow2(length(t)); %expansion of the data length for fft
data(length(t)+1:nfft) = 0;


当我把这些数据画出来的时候,我得到

正如你所看到的,大于10的值是0.
我得到了这个结果。

我想知道我的成绩是否还可以。

643ylb08

643ylb081#

如果FFT幅度结果接近于零,它可能只是数字噪声(随机量化和舍入误差)。这个数字噪声的相位是无意义的。我通常将相位设置为零,除非对应的幅度高于实际非零频谱的某个阈值。

koaltpgm

koaltpgm2#

相位产生奇异结果的原因是频率泄漏(频率泄漏不仅影响幅度,也极大地影响相位估计)
您可以通过FFT检查以估计sin(10Hz)的相位

Fs = 100;
T = 1/Fs;             % Sampling period       
N = 100;              % Length of signal
t = (0:N-1)*T;        % Time vector

Fs = 100;
T = 1/Fs;             % Sampling period       
N = 70;               % Length of signal
t = (0:N-1)*T;        % Time vector

字符串

相关问题