示例:短时傅立叶变换
使用
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 函数的参数,或输入信号中正弦曲线的频率,并观察绘图的变化情况。