首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Matlab中FFT的补零问题

关于Matlab中FFT的补零问题
EN

Stack Overflow用户
提问于 2021-02-25 02:43:29
回答 1查看 313关注 0票数 0

我有一个关于零填充的问题fft。我跑了fft有零填充&没有零填充和比较。

代码语言:javascript
复制
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在没有补零的情况下,振幅显示清晰,相位也清晰(我认为其他频率的相位是由于幅值非常小而不是零)。但是当我使用零填充时,我可以看到我输入的附近频率(4 4Hz)的振幅显示出不同的方面,相位的结果在我看来是奇怪的。当我使用零填充时,我的代码中有什么问题吗?

*关于Cris Luengo评论的补充问题

我尝试通过扩展长度向数据填充零。

代码语言:javascript
复制
nfft = 2^nextpow2(length(t)); %expansion of the data length for fft
data(length(t)+1:nfft) = 0;

当我绘制数据时,我得到了

如您所见,大于10的值是零。

我得到了这个结果。

我想知道我的结果是好还是不好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-27 04:00:32

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66356992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档