我有一个周期信号的总和,我试图使用时频分析来解开这些信号。根据窗口的长度和形状,我似乎得到了截然不同的结果。这是一个问题,因为我想开发一种自动化的、有希望的顺序算法来完成这项工作。
STFT 中窗口函数的选择有多重要?
窗函数在它们的两个频域属性之间存在固有的折衷:
主瓣宽度:任何锥形窗函数都会在频域中造成一些“拖尾”。这可以通过窗函数的频率响应中的中心瓣宽度来可视化。主瓣越宽,分辨频率接近的两个音调就越困难(如果它们彼此之间的距离比主瓣宽度更近,它们将趋于拖尾在一起)。因此,理想情况下,您希望拥有一个主瓣非常窄的窗函数。
最大旁瓣高度:许多窗口函数的频率响应由一个主瓣组成,该主瓣被重复的旁瓣围绕,这些旁瓣以特定窗口的速率衰减。这些旁瓣的高度可能会导致难以分辨频率上分开但幅度差异很大的两个音调。因此,理想情况下,您希望拥有一个旁瓣非常低的窗函数。
问题:如果你减小窗函数的主瓣宽度,旁瓣会变大,反之亦然。因此,在选择窗口时,您需要根据您期望的感兴趣信号之间的频率和幅度距离来实现特定于应用的平衡。给定系统的特定参数,可以选择(希望)满足您要求的窗口。
至于选择窗口的长度(相当于选择 DFT 的长度),最好在应用程序可能施加的限制(例如延迟要求、多长时间)内尽可能长时间地观察感兴趣的信号可以被认为是静止的、计算资源等)。您解析频率的能力与观察长度成正比(按时间测量,不一定基于 FFT 长度,可以零填充而不会提高频率分辨率)。
窗口长度应取决于信号频率的变化。您应该调整一个足够短的窗口,以便在该窗口中大致捕获信号的恒定光谱。
如果您想知道信号与形状的相似程度,您应该使用小波变换 ( CWT )。
对于它的价值,从实际的角度来看,我发现 Kaiser windows 非常有用。有一个参数可以让您调整主瓣宽度与旁瓣衰减的关系,就大多数指标而言,经过适当调整的 Kaiser 窗口与它的任何表亲一样好或更好。
作为(非常不科学的)经验法则,您可以将“beta”参数确定为所需旁瓣衰减的 0.133 倍(以 dB 为单位)。这可以用来获得一个快速的起点并从那里进行调整。