函数 > 信号处理 > 联合时频分析 > 示例:短时傅立叶变换
  
示例:短时傅立叶变换
使用 stft 函数可计算频谱特征随时间变化的信号的短时傅立叶变换 (STFT)。
该函数返回一个矩阵,此矩阵中的各个列包含在由 s 样本所分隔的时间处,输入信号的傅立叶变换。对于信号 x(t),在连续时间中的 STFT 定义如下:
单击复制此表达式
其中 w(t) 是一个实数值滑动窗口锥度,用于将变换在特定时间前后的影响局部化。
双螺距信号
以下信号由两条在不同时间出现的不同频率的正弦曲线组成。
1. 定义信号分量。
单击复制此表达式
单击复制此表达式
单击复制此表达式
单击复制此表达式
单击复制此表达式
单击复制此表达式
单击复制此表达式
单击复制此表达式
单击复制此表达式
单击复制此表达式
单击复制此表达式
单击复制此表达式
2. 绘制复合信号的图像。
单击复制此表达式
STFT 包含有关信号频率含量以及频率出现时间的信息。
3. 使用 100 个频率样本、时间步长 30 和一个汉宁窗计算 STFT。
单击复制此表达式
单击复制此表达式
这是一个 100 x 56 矩阵 (在长度为 L 的信号中有 56 个时间步长 30)
4. 计算平方模。
单击复制此表达式
单击复制此表达式
5. 将结果轮廓保存为 BMP 图像。
单击复制此表达式
(v_spec_rotated.bmp)
该图像不仅显示了两个频率,还显示了频率发生的时间。然而,频谱会遭受局部化折衷。要实现时间局部化 (即,STFT 精确确定正弦曲线活动的时间),在时域中需要一个短窗。相反,良好的频率局部化需要一个长时间窗。此折衷还进一步取决于所用窗的类型、所考虑的信号、时间以及频率。
6. 为进行说明,按如上所述计算同一信号的 STFT 和频谱,但使用长度为 300 的频率窗,而不是 100。
单击复制此表达式
单击复制此表达式
单击复制此表达式
7. 将结果轮廓保存为 BMP 图像。
单击复制此表达式
(v_nbspec_rotated.bmp)
使用长窗计算出的 STFT 有更好的频率分辨率,但其时间分辨率却不太好。可以通过使用其他时间-频率函数 (如 timefreq 和 timecorr) 来避免这种时间-频率折衷。
自定义窗口化
本例中的频率窗口将进行补零,直至到达傅里叶变换的长度。
1. 定义窗长度以及递增余弦的百分比。
单击复制此表达式
单击复制此表达式
单击复制此表达式
窗长度不能大于傅里叶变换的长度。
2. 重新调整窗系数,以使窗具有单位能量。
单击复制此表达式
单击复制此表达式
3. 计算 STFT 和频谱。
单击复制此表达式
单击复制此表达式
单击复制此表达式
4. 将结果轮廓保存为 BMP 图像。
单击复制此表达式
(v_spec2_rotated.bmp)
尝试更改 stft 函数的参数,或输入信号中正弦曲线的频率,并观察绘图的变化情况。