关于DTFT、DFT和FFT的理解
首先,时域信号可以看做是一个离散时间序列 x[n]x[n]x[n],其中 nnn 是时间点。在进行傅里叶变换时,我们将 x[n]x[n]x[n] 看做一个周期为 NNN 的信号,周期长度为 NNN,但实际上DFT和FFT计算时并不满足周期性,输出序列是 X[k]X[k]X[k],其中 kkk 是离散频率点,由于DFT和FFT的输出长度是固定的,因此在 NNN 内对 X[k]X[k]X[k] 进行周期采样,采样周期为 2π/N2\\pi / N2π/N。
具体来说,DTFT 的定义为:
X(ejω)=∑n=−∞∞x[n]e−jωnX(e^{j\\omega}) = \\sum_{n=-\\infty}^{\\infty} x[n] e^{-j\\omega n}X(ejω)=n=−∞∑∞x[n]e−jωn
其中,X(ejω)X(e^{j\\omega})X(ejω) 是信号的频谱。DTFT 中,ω\\omegaω 是一个连续变量, X(ejω)X(e^{j\\omega})X(ejω) 是频域信号在 ω\\omegaω 处的幅值和相位。但在DFT中,kkk 是一个离散变量,DFT 的表达式为:
X[k]=∑n=0N−1x[n]e−j2πnk/NX[k] = \\sum_{n=0}^{N-1} x[n] e^{-j2\\pi nk/N}X[k]=n=0∑N−1x[n]e−j2πnk/N
DFT 中的 kkk 代表了离散频率,与DTFT中的 ω\\omegaω 相对应。注意,DFT中nnn 的范围是 0≤n≤N−10 \\leq n \\leq N - 10≤n≤N−1,而非 −∞≤n≤∞-\\infty \\leq n \\leq \\infty−∞≤n≤∞,并且, DFT 中的 ω\\omegaω 只有在 000 和 2π2\\pi2π 之间才有物理意义,故 kkk 的取值范围是 0≤k≤N−10 \\leq k \\leq N - 10≤k≤N−1,所以DFT 离散化了 DTFT 中的频域信息。
DFT 系数表示了离散时间信号在离散频域下的表现,其中 kkk代表频率下标,表示 kΔf=kNfsk\\Delta f = \\frac{k}{N}f_skΔf=Nkfs 的频率成分。 Δf=fsN\\Delta f = \\frac{f_s}{N}Δf=Nfs 表示频率分辨率,fsf_sfs是采样率。
FFT与DFT是等价的,只是计算次数不同,由于计算次数更少,FFT运行更快。对于一个长度为 NNN 的复合序列 x(n)x(n)x(n) 应用DFT 或FFT时,输出的序列也是长度为 NNN 的,具体表示式可以写为:
X[k]=∑n=0N−1x[n]e−j2πnk/NX[k] = \\sum_{n = 0}^{N-1} x[n] e^{-j2\\pi nk/N}X[k]=n=0∑N−1x[n]e−j2πnk/N
其中 kkk 表示输出序列中的下标,X[k]X[k]X[k] 是DFT或FFT输出的第 kkk 个复数点。
总结一下,DTFT、DFT和FFT都是进行时域与频域变换的方法,它们的区别在于计算时的性质和复杂度。DTFT输出一个连续的频域信号,DFT抽样后输出一个离散的频域信号;FFT在DFT的基础上进行优化,运算速度更快。需要注意的是,输出的频域序列长度是固定的,在DFT和FFT中,输出序列的长度通常为 NNN,但输入序列的长度可以任意。