【发布时间】:2018-07-18 07:21:10
【问题描述】:
我想在 matlab 上使用 FFT 计算信号的傅里叶级数。我遇到了以下意想不到的问题。举个例子
如果我定义一个网格,然后将 fft 计算为:
M=59;
x= deal(1*(0:M-1)/M);
y=3*cos(2*pi*x);
Yk=fftshift(fft2(y)/(M));
这给了我预期的准确分析值:Yk(29)=1.5; Yk(31)=1.5;零其他任何东西
但如果我将网格定义为,并重复 fft 计算:
x=0:1/(M-1):1;
y=3*cos(2*pi*x);
Yk=fftshift(fft2(y)/(M));
这是一个烦人的问题,因为我必须分析在第二种方法中采样的许多信号数据,因此 Yk 的值将是错误的。有没有办法解决这个问题?告诉 fft 函数有关信号采样方式的选项。无法以正确的方式重新采样数据。
避免频谱泄漏的主要原因是我对这些傅里叶项分别进行了实数和图像部分的进一步操作。光谱泄漏会影响最终结果。
【问题讨论】:
-
对我来说两者都不错。在第二种情况下,fft 值会发生变化,因为那里的 y 值完全不同。如果你看一下光谱,它们都是一样的。
-
虽然它们看起来很相似,abs 值也几乎相同,但我需要对它们做一些进一步的矩阵运算,光谱泄漏会弄乱我的结果。