一、什么是STFT
短时傅里叶变换(Short-Time Fourier Transform,STFT)是一种在频谱分析中常用的算法,它的基本思想是将长时序信号通过窗函数分成多个较短的时间段,对每个时间段内的信号进行傅里叶变换得到频谱图,可以观察信号在不同时间段内频率成分的变化。STFT最早在语音信号的处理中被广泛使用,现在已经在音乐信号分析、图像处理、语音识别等多个领域得到了应用。
二、Matlab STFT函数
Matlab中提供了多个STFT相关函数,如stft、spectrogram等,其中stft是最基本的函数,可以对信号进行STFT分析并绘制谱图。以下代码是一个基本的stft调用示例。
fs=1000;
t=0:1/fs:5;
x=cos(2*pi*100*t)+0.5*cos(2*pi*200*t)+0.2*cos(2*pi*300*t);
w=hamming(128);
noverlap=numel(w)-1;
nfft=256;
[S,F,T]=stft(x,fs,'Window',w,'OverlapLength',noverlap,'FFTLength',nfft);
surf(T,F,abs(S))
其中,fs为采样频率,t为时域数组,x为信号数组,w为窗函数,noverlap为重叠长度,nfft为傅里叶变换长度,S、F、T是分别代表STFT谱、频率、时间的输出。
三、stft函数的参数
stft函数已经被广泛使用,它提供了大量的参数供用户选择和设置,这些参数将直接影响到函数的执行效果和分析结果。以下列举了一部分stft函数的常用参数。
1、窗函数
窗函数(Window)是一个用于把原始信号分割成多个片段的函数,窗函数之间的选择能够影响到整个STFT分析的结果和性能。在Matlab中,STFT函数提供了多种窗函数可供选择,如矩形窗(rectwin)、汉明窗(hamming)、黑曼窗(blackman)等。
% 使用矩形窗
w=rectwin(128);
% 使用汉明窗
w=hamming(128);
% 使用黑曼窗
w=blackman(128);
2、重叠长度
重叠长度(OverlapLength)是指相邻两个窗函数之间交叠的长度,相当于窗函数的移动距离。在实际应用中,通常采取50%的重叠长度,能够较好地平滑分段信号,在Matlab中可以这样设置。
w=hamming(128);
noverlap=numel(w)/2;
3、FFT长度
FFT长度(FFTLength)是指FFT计算中所采用的数据点数目,也称为零填充长度,零填充是为了避免频谱图中出现泄漏(leakage)现象。一般情况下,FFT长度应该尽量选取小的值以节省计算时间,但是有时候由于分析需求,需要选取较大的值对于细节进行分析。
四、STFT谱图分析
STFT谱图是一种可以显示信号随时间变化的频谱图,直观地表现信号在不同时间段内的频率成分。在Matlab中,可以使用surf函数将STFT谱图绘制成三维图形,同时也可以使用imagesc、pcolor等函数绘制二维图形。
下面的代码展示了绘制谱图的基本方法,其中S、F、T是分别代表STFT谱、频率、时间的输出,surf函数将谱图绘制成3D形式展示。
fs=1000;
t=0:1/fs:5;
x=cos(2*pi*100*t)+0.5*cos(2*pi*200*t)+0.2*cos(2*pi*300*t);
w=hamming(128);
noverlap=numel(w)-1;
nfft=256;
[S,F,T]=stft(x,fs,'Window',w,'OverlapLength',noverlap,'FFTLength',nfft);
surf(T,F,abs(S))
绘制出来的STFT谱图如下图所示。
五、STFT谱图应用
由于STFT谱图可以反映信号在不同时刻的频域信息,因此在多个领域得到了广泛的应用。
1、音频信号处理
在音频信号处理领域,STFT谱图被广泛应用于音乐分析、语音识别、声音合成等方面。例如,通过对音乐信号进行STFT分析,可以提取出某个时间段内的主旋律、和声、节奏等音乐元素,可以做到自动和弦识别、乐器分类、音符对齐等。
2、图像处理
在图像处理领域,STFT谱图被广泛应用于纹理分析、边缘检测、特征提取等方面。由于图像在空间和频率两个维度上具有不同的特性,因此采用STFT谱图可以通过频域信息反映出图像的纹理、条纹等信息。
3、语音识别
在语音识别领域,STFT谱图可以用于提取音频信号的特征,进而用于语音识别。例如,通过对语音STFT分析,可以提取出某个时间段内的共振峰、形状等信息,进而提取出语音信号的语音特征。
六、总结
本文对STFT的概念、Matlab的STFT函数以及谱图绘制和应用进行了较为详细的阐述,希望可以对读者有所启示。在实际应用中,需要根据问题的需求采用合适的参数和窗函数,根据STFT谱图的特点进行分析和处理。