关于DTFT、DFT和FFT的理解

首先,时域信号可以看做是一个离散时间序列 x [ n ] x[n] x[n],其中 n n n 是时间点。在进行傅里叶变换时,我们将 x [ n ] x[n] x[n] 看做一个周期为 N N N 的信号,周期长度为 N N N,但实际上DFT和FFT计算时并不满足周期性,输出序列是 X [ k ] X[k] X[k],其中 k k k 是离散频率点,由于DFT和FFT的输出长度是固定的,因此在 N N N 内对 X [ k ] X[k] X[k] 进行周期采样,采样周期为 2 π / N 2\pi / N 2π/N

具体来说,DTFT 的定义为:

X ( e j ω ) = ∑ n = − ∞ ∞ x [ n ] e − j ω n X(e^{j\omega}) = \sum_{n=-\infty}^{\infty} x[n] e^{-j\omega n} X(e)=n=x[n]ejωn

其中, X ( e j ω ) X(e^{j\omega}) X(e) 是信号的频谱。DTFT 中, ω \omega ω 是一个连续变量, X ( e j ω ) X(e^{j\omega}) X(e) 是频域信号在 ω \omega ω 处的幅值和相位。但在DFT中, k k k 是一个离散变量,DFT 的表达式为:

X [ k ] = ∑ n = 0 N − 1 x [ n ] e − j 2 π n k / N X[k] = \sum_{n=0}^{N-1} x[n] e^{-j2\pi nk/N} X[k]=n=0N1x[n]ej2πnk/N

DFT 中的 k k k 代表了离散频率,与DTFT中的 ω \omega ω 相对应。注意,DFT中 n n n 的范围是 0 ≤ n ≤ N − 1 0 \leq n \leq N - 1 0nN1,而非 − ∞ ≤ n ≤ ∞ -\infty \leq n \leq \infty n,并且, DFT 中的 ω \omega ω 只有在 0 0 0 2 π 2\pi 2π 之间才有物理意义,故 k k k 的取值范围是 0 ≤ k ≤ N − 1 0 \leq k \leq N - 1 0kN1,所以DFT 离散化了 DTFT 中的频域信息。

DFT 系数表示了离散时间信号在离散频域下的表现,其中 k k k代表频率下标,表示 k Δ f = k N f s k\Delta f = \frac{k}{N}f_s kΔf=Nkfs 的频率成分。 Δ f = f s N \Delta f = \frac{f_s}{N} Δf=Nfs 表示频率分辨率, f s f_s fs是采样率。

FFT与DFT是等价的,只是计算次数不同,由于计算次数更少,FFT运行更快。对于一个长度为 N N N 的复合序列 x ( n ) x(n) x(n) 应用DFT 或FFT时,输出的序列也是长度为 N N N 的,具体表示式可以写为:

X [ k ] = ∑ n = 0 N − 1 x [ n ] e − j 2 π n k / N X[k] = \sum_{n = 0}^{N-1} x[n] e^{-j2\pi nk/N} X[k]=n=0N1x[n]ej2πnk/N

其中 k k k 表示输出序列中的下标, X [ k ] X[k] X[k] 是DFT或FFT输出的第 k k k 个复数点。

总结一下,DTFT、DFT和FFT都是进行时域与频域变换的方法,它们的区别在于计算时的性质和复杂度。DTFT输出一个连续的频域信号,DFT抽样后输出一个离散的频域信号;FFT在DFT的基础上进行优化,运算速度更快。需要注意的是,输出的频域序列长度是固定的,在DFT和FFT中,输出序列的长度通常为 N N N,但输入序列的长度可以任意。

你可能感兴趣的:(算法)