前两篇讨论了信号分析的基本思想,基本工具——基展开,以及在压缩和降噪方面的应用。到目前为止,我们谈到的信号虽然有性质随时间变化的,但都是线性的。而这篇日志讨论的是非线性、不平稳的信号。有同学可能会说,线性是系统的性质,用在信号上是概念性错误。线性确实不能直接用于描述信号,但当我们想要描述非线性系统输出的信号时,总要给这种特殊的信号一个名字。尤其是这种非线性信号,确实有着普通线性信号所没有的一些特性,比如波内调频(intra-wave frequency modulation)。所谓波内调频就是在一个基波周期内都存在频率成分剧烈变化的现象,如下图所示:
这个波内线性调频信号的基频已经几乎看不出来了。对这种波内调频的信号,任何基于傅里叶变换理论的分析方法都无能为力,因为基波信号和调制在基波上的调频信号不是线性叠加关系。之前提到的小波变换实际上是一组频域上的线性滤波器,对非线性的信号也没有办法。看起来传统的频谱分析已经失效了。
仔细想一想非线性信号的波内调频性质,实际上它是信号不平稳性的一种“最高境界”:在一个基波周期内信号的频率成分都剧烈变化,分辨率再高的线性方法都不能把谐波和基波完全分开,造成所谓“谐波失真”。既然如此,为何不把频率的定义再向前推进一步?频率,顾名思义,是某种物理量的变化率。那么它应该是什么的变化率?如果搞清楚这一点,就可以通过对那种物理量求导来得到某一时刻的瞬时频率了。
不要和我争上面这个是钟还是表。它是否给了你一点灵感?没错,频率是相位的变化率。所以瞬时频率可以定义如下:
现在瞬时频率的定义问题解决了,又出现了新的问题:瞬时相位怎么求得?回想一下信号与系统中几乎没讲的希尔伯特变换。学得好一点的同学可能还记得希尔伯特变换相当于一个90度宽带相移网络,可以用于单边带调幅。而这里我们把它的90度相移性质用于瞬时相位估计,因为90度相移相当于把信号的虚部转到实部来了。设原信号是x(t),信号对应的虚部即其希尔伯特变换是y(t),那么就可以求得瞬时相位θ(t)
建立了瞬时频率的方法体系,从本质上来说非线性信号的时频分析方法也就确立了。这套方法被称为希尔伯特谱分析(Hilbert Spectrum Analysis),与傅里叶谱分析相对应。按理来说,希尔伯特谱分析比傅里叶谱分析更为强大,为什么我们平时不用前者而用后者?很简单,因为信号在同一时刻只能有一个相位,由此导出的瞬时频率也只能有一个,从而只能反映一个频率成分随时间的变化情况。而基于傅里叶谱分析的小波变换等方法可以显示同一段时间内的不同频率成分,自然比希尔伯特谱分析更为优越。
虽然希尔伯特谱分析存在问题,但它的瞬时频率思想是非常先进的。如果就此抛弃这种方法,不免有点可惜。一种最简单的想法,就是用一组滤波器把信号分解成很多窄带信号,逐一做希尔伯特变换然后叠加。这种想法的大方向是对的,但你如果这么想,就说明对非线性信号的认识还不够。非线性信号的基本特点就是各频率成分之间不是简单的线性叠加关系,用线性的滤波器去分解信号必定造成和傅里叶谱分析相同的谐波失真问题。于是这个问题就困扰了学界数十年,直到上世纪末一种新的分解方法横空出世才得以化解。
这种新的分解方法称为经验模式分解(Empirical Mode Decomposition),有着典型的人工智能时代的印记:既然构造一种信号分解的方法太难了,就干脆不要想办法,直接让算法去自动适应信号的特征,对不同的信号做不同的处理。这种方法可以描述如下:
- 用样条(spline)方法取信号的上下包络线。
- 取上下包络线的均值,作为一个本征模式(Intrinsic Mode Function)。本征模式要满足两个条件,其一是上下包络线的均值为零,这个条件自动满足;其二是零点数和极值数之差不得大于1,这个可以计算过零率来保证。用信号减去这个本征模式,得到残差。
- 重复前两步,直到残差中不能再提取出本征模式。
- 对所有的本征模式做希尔伯特谱分析,并叠加起来得到最终的时频谱。
这种先做经验模式分解后做希尔伯特谱分析的方法,称为希尔伯特-黄变换,简称HHT。HHT的高明之处,就在对非线性信号先做了非线性变换,使变换后的信号可以线性叠加。而这个非线性变换又不是随便指定的,而是用样条方法自适应地得到的。这和机器学习中的人工神经网络方法有异曲同工之妙。
当然,HHT也有它的缺点。HHT中使用的本征模式实际上是样条基,而所有的样条基都存在边界处振荡发散,外推困难的问题。在HHT中这一问题被放大,先被提取出来的本征模式边界误差会逐渐影响后续的本征模式,最终造成中间的部分也出现误差。这就是机器学习中常说的“过学习”现象,多项式函数的阶次太高,会使拟合出的函数过于复杂。解决这个问题的方法通常是限制边界线性或者对信号做延拓后抛弃延拓部分。前者就是所谓的自然样条,后者则需要做很多额外的计算。总之,边界误差是使用HHT时的一个棘手问题。然而它最大的问题还不在于此。经验模式分解的时间复杂度继承了样条方法的O(N^3),与快速傅里叶变换和小波变换的O(nlogn)相比简直是天壤之别。
虽然HHT很慢,但由于它在非线性信号分析中不可动摇的优势,还是很快在各种信号检测和分析领域受到了广泛的欢迎。由于HHT的本质是样条而不是可分块的矩阵运算,寻找它的快速算法非常困难,现在HHT的实时应用通常是基于并行计算的。即使如此有时还不够,还需对采样得到的信号做若干倍降采样,让人不禁想到快速傅里叶变换发明前的数字信号处理。这告诉我们,不管一个算法在理论上有多么优雅,如果没有低的空间和时间复杂度,也很难有用武之地。