理解F F TFFT的x ( t ) : = cos( 2 πF0t )x(t):=cos⁡(2πf0t)

信息处理 matlab fft 频谱 自由度
2022-02-23 08:21:00

关于这个问题我已经讨论了一个多小时。我的任务是使用 MATLAB 为信号执行一个简单的 DTFT 任务x(t):=cos(2πf0t). 假设我们以200Hz0.5sec即,我们要求N=100采样点。此外,让f0:=55Hz.

指定的时间间隔是5×103t0.5马上。使用 MATLAB 我首先定义t作为大小向量100×1. 因此,让t=linspace(5e-3,0.5,100)除了x=cos(2*pi*55*t)频率向量f=linspace(-fs/2,fs/2,100)where之外fs=200,最后执行命令X=fftshift(fft(x/100))

使用 MATLAB 在 MATLAB 上绘制幅度谱stem(f,abs(X))产生以下结果: 在此处输入图像描述

虽然这只是完成了这项任务,但如果不了解以下内容,我对结果并不满意:

  1. 为什么在两者之间和之外有低量化频率f=±55Hz? 我们从理论上知道x[n]=cos(2πf0n)F0.5[δ(ff0)+δ(f+f0)],这也引出了第二个问题。
  1. 我将 DFT 定义为
    (1)X[k]:=1Nn=0Nx[n]exp(j2πknN)
    理论上,幅度应该正好位于0.5Hz,这与振幅约为0.33. 为什么会出现这种情况?我定义 DFT 的方式应该将输出的幅度缩放到0.5
  1. 为什么要用两点来表示δ(f55)和两点代表δ(f+55)? 我们应该期待一个急剧的三角洲。我正在采样偶数个点,这可能是问题吗?

请注意,对于第一个问题,我在网上做了一些研究,并收到了一些关于频谱泄漏的结果,这似乎暗示了与采样点数量相关的振荡数量的某些方面。

另一个注意事项:回答这三个问题将使我能够更多地了解频谱如何受到采样点数量的影响,如果这是我第一次遇到的情况,它还可以让我了解频谱泄漏等新概念问题,它还将帮助我更多地操纵 DTFT,同时了解变化等变化f0N并观察频域的反应。

2个回答

您的所有三个问题都集中在频谱泄漏的主题上,当周期性信号在测量窗口中没有整数个周期时会发生这种情况。窗函数可用于减轻频谱泄漏的影响,但并非没有权衡。这个网站上有很多关于这个话题的答案。

另外,您的频率向量不正确。对于双面 DFT,它应该f=((-N/2):(N/2-1))*fs/N在 fftshift 之后。奈奎斯特分量仅包含在频谱的一侧,而不是两者。

FFT 的长度将余弦波形与 FFT 长度的矩形进行卷积。该矩形的变换是一个 Sinc 函数,它具有非零裙边(或阻带)。

如果在两个最高峰之间使用 Sinc 插值,您最终会找到预期的幅度。

要获得单个峰值,请使用长度为余弦波形周期数的精确整数的 FFT。然后,Sinc 函数卷积将产生除一个(低于 Nyquist)bin 之外的所有零。