要了解窗口函数及其使用,让我们首先看看对有限长度样本进行 DFT 时会发生什么。离散傅里叶变换的定义中隐含的假设是您正在考虑的信号的有限长度是周期性的。
考虑一个正弦波,采样使得捕获一个完整的周期。当信号被复制时,您可以看到它作为不间断信号周期性地继续。得到的 DFT 只有一个非零分量,即正弦波频率。
现在考虑一个具有不同周期的余弦波,采样后仅捕获部分周期。现在,如果您复制信号,您会看到信号中的不连续性,用红色标记。不再有平滑过渡,因此您将在其他频率出现泄漏,如下所示
这种频谱泄漏通过旁瓣发生。要了解更多信息,您还应该阅读sinc 函数及其傅里叶变换,矩形函数。有限采样序列可以看作是一个无限序列乘以矩形函数。发生的泄漏与 sinc 函数的旁瓣有关(sinc 和 rectangle 属于自对偶空间,互为 F.Ts)。这在我上面链接的频谱泄漏文章中有更详细的解释。
窗口函数
在信号处理中使用窗函数来最小化频谱泄漏的影响。基本上,窗函数的作用是它在末端逐渐减小有限长度序列,因此当平铺时,它具有没有不连续性的周期性结构,因此光谱泄漏更少。
一些常见的窗口是 Hanning、Hamming、Blackman、Blackman-Harris、Kaiser-Bessel 等。您可以从 wiki 链接了解更多关于它们的信息,相应的 MATLAB 命令是hann
、hamming
、和。这是不同窗口的一个小示例:blackman
blackmanharris
kaiser
您可能想知道为什么有这么多不同的窗口函数。原因是因为它们中的每一个都具有非常不同的频谱特性,并且具有不同的主瓣宽度和旁瓣幅度。天下没有免费的午餐:如果你想要好的频率分辨率(主瓣很薄),你的旁瓣会变大,反之亦然。你不能两者兼得。通常,窗口函数的选择取决于特定需求,并且总是归结为做出妥协。这是一篇关于使用窗口函数的非常好的文章,您绝对应该阅读它。
现在,当您使用窗口函数时,锥形末端的信息较少。因此,解决此问题的一种方法是使用具有重叠的滑动窗口,如下所示。这个想法是,当它们放在一起时,它们会尽可能地接近原始序列(即,底行应该尽可能接近平坦值 1)。典型值在 33% 到 50% 之间变化,具体取决于应用。
使用 MATLAB 的频谱图
语法是spectrogram(x,window,overlap,NFFT,fs)
在哪里
x
是你的整个数据向量
window
是你的窗口函数。如果您只输入一个数字,比如说W
(必须是整数),那么 MATLAB 会将您的数据分成多个W
样本块,并从中形成频谱图。这等效于使用长度W
样本的矩形窗口。如果您想使用不同的窗口,请提供hann(W)
或您选择的任何窗口。
overlap
是您需要重叠的样本数。所以,如果你需要 50% 的重叠,这个值应该是W/2
. 使用floor(W/2)
or ceil(W/2)
ifW
可以取奇数。这只是一个整数。
NFFT
是 FFT 长度
fs
是数据向量的采样频率。您可以将其留空,MATLAB 会根据归一化频率和时间轴将图形绘制为简单的数据块索引。如果您输入它,MATLAB 会相应地缩放轴。
您还可以获得可选的输出,例如时间向量和频率向量以及计算的功率谱,以用于其他计算,或者如果您需要以不同的方式设置绘图样式。有关更多信息,请参阅文档。
这是一个示例,其中 1 秒的线性啁啾信号从 20 Hz 到 400 Hz,以 1000 Hz 采样。使用了两个窗口函数,Hanning
和Blackman-Harris
,有和没有重叠。使用时,窗口长度为 50 个样本,重叠率为 50%。在每个图中,这些图都被缩放到相同的 80dB 范围。
由于重叠,您可以注意到数字(上下)的差异。如果你使用重叠,你会得到一个更清晰的估计。您还可以观察到我之前提到的主瓣宽度和旁瓣幅度之间的权衡。Hanning 的主瓣更薄(沿倾斜对角线的突出线),导致更好的频率分辨率,但有泄漏的旁瓣,从外面的明亮色彩可以看出。另一方面,Blackwell-Harris 的主瓣较厚(对角线较粗),但光谱泄漏较少,这可以从均匀的低(蓝色)外部区域证明。