【发布时间】:2016-02-17 19:11:52
【问题描述】:
我尝试用 Matlab 找到最强的频率分量。它可以工作,但如果数据点和周期没有很好地对齐,我需要对我的数据进行零填充以提高 FFT 分辨率。到目前为止一切顺利。
问题在于,当我过多地进行零填充时,具有最大功率的频率会发生变化,即使一切都很好地对齐并且我希望得到明确的结果。
这是我的 MWE:
Tmax = 1024;
resolution = 1024;
period = 512;
X = linspace(0,Tmax,resolution);
Y = sin(2*pi*X/period);
% N_fft = 2^12; % still fine, max_period is 512
N_fft = 2^13; % now max_period is 546.1333
F = fft(Y,N_fft);
power = abs(F(1:N_fft/2)).^2;
dt = Tmax/resolution;
freq = (0:N_fft/2-1)/N_fft/dt;
[~, ind] = max(power);
max_period = 1/freq(ind)
零填充到2^12 一切正常,但是当我零填充到2^13 时,我得到了错误的结果。似乎太多的零填充会改变频谱,但我对此表示怀疑。我宁愿期待我的代码中有一个错误,但我找不到它。我做错了什么?
编辑: 频谱似乎偏向低频。零填充只是使它可见:
为什么我的频谱偏斜?不应该是对称的吗?
【问题讨论】:
-
我为指数 11、12、13、14 运行了您的代码,并得到了
max(power)的以下索引:inds = p11: 5 p12: 9 p13: 16 p14: 32这非常强烈地表明您正在丢失一个索引值。这应该是关于fft为您做什么的有力线索。