短时傅里叶变换
短时傅里叶变换(Short-Time Fourier Transform, STFT)是一种广泛应用在信号处理中的分析工具,尤其在音频、语音和图像领域。它通过将长的信号分割成一系列较短的重叠段,对每个短段进行傅里叶变换,从而在时间局部性和频率分辨率之间取得平衡,提供了一种分析信号随时间变化的频率内容的方法。 传统的傅里叶变换能够给出信号的整体频谱信息,但无法展示信号在时间上的变化。短时傅里叶变换则解决了这个问题,它通过滑动一个叫做“窗口函数”(在这里是汉明窗)的短时间片段来覆盖整个信号。这样,每次变换只处理信号的一部分,因此可以观察到信号在不同时间点的频谱特征。 在上述代码中,首先通过`wavread`函数读取了名为'jiasiqi.wav'的音频文件,并将其存储在变量a中。然后,代码创建了一个大小为N(在这里是256)的汉明窗函数`h`。汉明窗是一种平滑的窗口函数,可以有效地减小由于信号截断带来的栅栏效应,提高变换的精度。 接下来,对于信号a的每个样本,它乘以汉明窗函数h的相应值,生成一个新的截断信号b。这样,我们得到了一系列带有汉明窗的信号段,每个段都代表了原始信号的一个小部分。然后,对每个截断的信号b进行快速傅里叶变换(FFT),得到对应的频谱表示。这里使用了`abs(fft(b))`来计算幅度谱,并通过`20*log()`转换为分贝(dB)单位,使得结果更容易观察和比较。 将这个短时谱绘制出来,用以展示音频信号在不同时间点的频率成分。在MATLAB中,`subplot`函数被用来在同一个图形窗口内创建多个子图,这里创建了两行一列的布局,第一幅图展示了原始信号,第二幅图则展示了短时谱。 短时傅里叶变换的结果通常是一个二维数组,其中每一行对应一个时间窗口的频谱,每一列代表一个频率。这样的结果可以用于识别信号中的瞬态特征、检测频率成分的变化,以及进行语音识别、音频压缩等多种应用。此外,STFT还可以与逆短时傅里叶变换(ISTFT)结合,用于重构原始信号,实现信号的频域处理后再转换回时域。