FFT 与 STFT

比较 FFT 和 STFT:每种方法适用的信号分析场景

概述

快速傅里叶变换 (FFT) 和短时傅里叶变换 (STFT) 是在频域中分析信号的基础工具。FFT 是一种用于计算离散傅里叶变换 (DFT) 的高效算法,它将振幅与时间数据的关系转换为振幅与频率数据的关系。FFT 显示信号中存在哪些频率分量及其相对幅值。

STFT 扩展了这一思路,即通过将 FFT 应用于信号的短片段,可以查看频率成分如何随时间变化。这会生成一种时频表示,通常可视化为频谱图。

当频率成分在分析区间内保持相对恒定时,使用 FFT。当频率成分随时间变化且您需要知道特定频率何时出现时,使用 STFT。

比较 FFT 和 STFT

类型 FFT(快速傅里叶变换) STFT(短时傅里叶变换)
最佳适用场景 平稳信号,其中频率成分保持恒定 非平稳信号,其中频率随时间变化
输出数据 频率幅值的一维数组 频率幅值与时间关系的二维数组(通常可视化为频谱图)
分辨率 基于总信号长度的最大频率分辨率;无时间分辨率 $$ \Delta f = \frac{f_s}{N} $$ 由窗大小 \(N\) 决定的时间与频率分辨率权衡(海森堡不确定性原理)$$\Delta f = \frac{f_s}{N} \qquad \Delta t = \frac{N}{f_s} $$
计算 时间复杂度为 \(O(n \log n)\) 的高效计算 多次 FFT 计算;所需的 FFT 总次数取决于窗长度和重叠

时频分辨率

FFT 描述整个分析窗上的频率成分。它将显示哪些频率分量存在以及以何种幅值存在,但不显示何时存在。FFT 将提供两种方法中最高的频率分辨率,但不提供任何时间信息。

STFT 以牺牲频率分辨率为代价引入时间信息。它能描述频率出现的时间,但会模糊这些频率的具体信息。海森堡不确定性原理描述了这种无法同时定位时间和频率的基本性质。

计算复杂度和每种方法的适用场景

FFT 将 \(N\) 值较大情形下的 DFT 时间复杂度从 \(O(n^2)\) 改进为 \(O(n \log n)\),其中 \\(n\\) 是 DFT 点数。STFT 需要多次 FFT 计算。FFT 计算的次数取决于为 STFT 计算选择的帧速率和窗重叠。因此,计算给定信号的 STFT 比计算同一信号的 FFT 需要更多计算。FFT 最适用于平稳信号;例如,具有稳定频率的振动分析或占据特定频带的通信信号。STFT 最适用于非平稳信号;例如,音频和生物医学信号。

MATLAB 中的 FFT 和 STFT

\( Y = \operatorname{fft}(X) \) 是在 MATLAB 中计算 FFT 的最常用语法。如果 \(X\) 是时域信号,则 \(Y\) 以频域表示形式返回。可以绘制 \(Y\) 的每个元素的振幅对频率的图,以可视化每个频率分量的振幅。

频谱分析的一种常见可视化方法是周期图。周期图可视化信号的功率谱密度 (PSD),从而显示每频率单位的功率大小。

周期图功率谱图:显示频率峰值和内嵌数据表

经过功率放大器的正弦波的周期图。周期图显示放大器中的非线性产生谐波失真。谐波是基频的倍数。

\( S = \operatorname{stft}(X) \) 是在 MATLAB 中计算 STFT 的基本语法。如果 \(X\) 是时域信号,则 \(S\) 以矩阵形式返回,其中时间沿 \(S\) 的列递增,频率按行从上到下递增。STFT 的默认参数包括汉宁窗长度为 128、FFT 长度为 128 以及窗重叠长度为 75%。STFT 可视化为频谱图以显示时频信息。

蓝色频谱图显示四个叫声:一个垂直脉冲模式,后接三个堆叠的水平谐波频段。

频谱图显示鲸鱼低鸣的音频音频随时间变化,显示鲸鱼如何改变它正在吟唱的音调。

在 FFT 和 STFT 之间选择

FFT 和 STFT 是互补的信号分析方法。当需要最高频率分辨率且信号的频谱成分保持相对恒定时,使用 FFT。当频率成分随时间变化且了解事件何时发生与识别其频率同样重要时,使用 STFT。



FFT 与 STFT 常见问题解答

FFT 将信号从时域转换为频域:显示整个信号中存在哪些频率分量。STFT 将 FFT 应用于信号的短片段,从而揭示频率成分如何随时间变化。

当信号的频率成分在分析区间内保持相对恒定且您需要尽可能高的频率分辨率时,使用 FFT。常见示例包括具有稳定频率的振动分析和占据特定频带的通信信号。

当频率成分随时间变化且知道特定频率何时发生很重要时,使用 STFT。它最适合非平稳信号,如音频和生物医学信号。

频谱图以振幅网格的形式呈现 STFT 输出,一个轴表示时间,另一个轴表示频率,从而展现信号的频率成分如何随时间变化。例如,MATLAB 的 spectrogram 函数可以显示音频信号的时频成分。

窗长度会在时间分辨率与频率分辨率之间形成权衡,这一权衡由海森堡不确定性原理决定。窗越长,频率分辨率越高;窗越短,则捕获频率成分随时间快速变化的效果越好。

基本语法是 S = stft(X),其中 X 是时域信号,S 以矩阵形式返回,时间沿列递增,频率按行从上到下递增。默认参数包括汉宁窗长度为 128、FFT 长度为 128 以及窗重叠为 75%。

最常用的语法是 Y = fft(X),其中 X 是时域信号,Y 以其频域表示形式返回。可以绘制 Y 的每个元素的振幅对频率的图,以可视化每个频率分量的振幅。

是的,因为 STFT 需要对重叠的信号片段进行多次 FFT 计算,而 FFT 只需一次计算。FFT 计算的总次数取决于为 STFT 选择的帧速率和窗重叠。

FFT 生成频率幅值的一维数组,不带时间信息。STFT 生成频率幅值与时间关系的二维数组,通常可视化为频谱图。