现实中的信号(比如语音、心电、振动、地震波)通常不是单一频率,而是由多个不同频段的成分叠加而成。想要把信号拆开,传统方法要么用固定的滤波器(比如小波变换),要么让算法自动找分界点(比如经验小波变换)。前者太死板,后者有时会把有物理意义的频段拆乱。
这个算法(基于固定边界点的经验小波变换)的聪明之处在于:它让你自己说了算。你如果事先知道信号里有哪些频段是重要的(比如心电的QRS波在某个频率范围,电力谐波在基频的整数倍),就可以直接在频谱图上把这些频段的边界定下来。然后算法会为每个频段量身定制一个边界光滑的Meyer小波滤波器,再用这些滤波器把信号精确地分解成你想要的频带分量。这样一来,既保留了小波变换的时频局部化能力,又能把先验知识融入分解过程,让结果更有物理意义。
算法步骤
把信号变成频谱图 先对原始信号做傅里叶变换,看看它的频率成分长什么样。
在频谱上标出你想切割的频带边界 根据你的需要,在频谱上挑几个点作为分界线(比如5 Hz、10 Hz、20 Hz)。这些边界把频谱分成几个区间:最左边是低频段,中间是若干个中频段,最右边是高频段。
为每个频段造一个“光滑过渡”的滤波器 从最低频段开始,先用一个低通滤波器(尺度函数)把低频部分滤出来;接着对每个内部频段,造一个带通滤波器(小波函数),只让该频段的频率通过;最后对最高频段造一个高通滤波器。这些滤波器的边缘都是平滑的,不会在切割时产生“毛刺”。
用滤波器组把信号拆解 把原始信号的频谱分别与每个滤波器的共轭相乘,再变回时间域,就得到对应频段的时域波形。所有波形合在一起,正好还原成原始信号。
根据拆解结果做你想做的事 拿到这些分量后,你可以扔掉噪声频段、提取特征频段、或者分析每个分量的细节。