我看过很多文档都提到通过重叠窗口计算频谱图,但没有找到关于为什么这样做以及如何计算需要重叠的点数的明确文档?如果我不重叠连续的窗口会发生什么?
微控制器具有很小的 RAM 和低处理速度(在我的应用程序中为 84 Mhz)。所以减少频谱图中的元素数量会带来很大的优势。
我看过很多文档都提到通过重叠窗口计算频谱图,但没有找到关于为什么这样做以及如何计算需要重叠的点数的明确文档?如果我不重叠连续的窗口会发生什么?
微控制器具有很小的 RAM 和低处理速度(在我的应用程序中为 84 Mhz)。所以减少频谱图中的元素数量会带来很大的优势。
如何计算需要重叠的点数?
对于许多“正常”窗口(汉宁、汉明等),50% 的重叠适用于大多数应用程序。
如果我不重叠连续的窗口会发生什么?
这在很大程度上取决于信号,但这里有一个例子。假设您有长度为 128 的非重叠汉宁窗,以 n = 64、192、320 等为中心。
如果您的输入是 n = 64 处的单位脉冲,则您位于第一个窗口的中间,权重为 1,您将获得 0 dB 的平坦频谱。如果您的输入是 n = 128 处的单位脉冲,那么您位于第一个窗口的最后一个样本,这里的权重很小(0.00059297),因此您的频谱下降超过 -64 dB,这显然是错误的。由于不重叠,您“错过”了信号中的主要事件,因为它落在“窗口之间”。
50% 的重叠解决了这个问题,因为 n=128 正好在下一个重叠窗口的中心。
如果没有重叠,那么可逆性就会丢失,信息也会丢失。
如果有重叠,但很少,那么分析信息就会丢失(但不是综合,这是更基本的)。即从 0 到 0.5 倍的采样频率,如果“跳长”为 2,则 0.25 和 0.5 之间的频率的分析信息是混叠的。如果跃点长度为 4,则 0.125 到 0.5 是别名,依此类推。
“分析信息”首先是转换数据的目标(如果我们只关心保留输入,那么就不要进行转换)。对于 STFT,它指的是时频调制信息:一行捕获(在窗口的分辨率内)信号随时间变化的瞬时频率和幅度。重叠越少(跳跃长度越大),捕获的动态就越少。
好消息是,如果您所寻求的只是频谱图,即 STFT(幅度)的绝对值,那么此信息的丢失是相当小的:采用绝对值全局将每行的频率移向低频,通常是非常低的频率,这允许较大的跳数。这在小波变换中得到了证明,但是对于大多数 STFT 窗口来说,这些参数将大致成立。
值得注意的是,对于除 1 以外的任何跃点长度的频谱图,同样会失去严格的可逆性;损失的程度可以通过 Griffin-Lim 等反演算法来估计。但是,如果我们不能反转原始 STFT,这实际上意味着我们完全丢弃了数据段;与模数不同,这是 100% 不可恢复的。
如果处理能力受到限制,选项有: 1) 使用更宽的窗口,这会以时间分辨率为代价提高频率分辨率,但也允许更大的跳数;2)重叠相加。