为什么 DTFT 和 FFT 在特定频率下给出完全不同的幅度结果?

信息处理 fft 自由度 文件 震级 基频
2022-02-14 10:44:01

我正在尝试编写一个程序来计算特定的非整数频率分量的幅度和相位(即给定长度为的采样有限信号,我想知道频率为 40.678 Hz 的频谱的幅度和相位)。N

我尝试使用离散时间傅里叶变换的方程:

X(ω)=n=x[n]ejωn=n=0N1x[n]ejωn

这样

X(2π40.678)=n=0N1x[n]ej2π40.678n

我这样做如下:

t = np.linspace(0,1,100)
x = np.sin(2*np.pi*40.678*t)

Xf = 0
for n in range(len(x)):       
    Xf += (x[n]*np.exp((-np.complex(0,1))*2*np.pi*40.678*n))
print(abs(Xf))

其中打印0.6149015687259044

我知道这是错误的,因为如果我按如下方式进行 FFT:

X = np.fft.fft(x)
plt.figure();
plt.plot(abs(X))

级的峰值(我在校正轴后假设是)。50

在此处输入图像描述

造成这种差异的原因是什么?我还尝试了 DFT 的方程,就像我这次对上面的 DTFT 代码所做的那样来测量频率为 50 Hz 的正弦曲线在 50 Hz 处的幅度,与 FFT 的图相比,我再次得到一个完全错误的值。 .

是什么导致了这种差异?

谢谢你。

1个回答

暗示:

尝试引入采样频率那么等式是相对于采样频率的 其中单位如下:Fsf(1)

(1)ω=2πfwheref=FFs

  • ω in [弧度/样本]
  • f in [循环/样本]
  • Fs in [样本/秒]
  • F in [周期/秒] 或 [Hz]

您的信号的离散时间向量应如等式 您似乎使用[Hz] 中(2)

(2)t=nTswhereTs=1Fsandn=0,,N1
Ff