三、信号分解 —> VMD(变分模态分解)学习笔记

                                           VMD学习笔记

简述:变分模态分解由Konstantin Dragomiretskiy于2014年提出,可以很好抑制EMD方法的模态混叠现象(通过控制带宽来避免混叠现象)。与EMD原理不同,VMD分解方式是利用迭代搜索变分模型最优解来确定每个分解的分量中心频率及带宽,属于完全非递归模型,该模型寻找模态分量的集合及其各自的中心频率,而每个模态在解调成基带之后是平滑的,Konstantin Dragomiretskiy通过实验结果证明:对于采样和噪声方面,该方法更具有鲁棒性。

注:个人简单理解,就是把非周期信号进行频域分析,把复杂信号分解成为多个谐波信号     另一版本:

VMD(Variational mode decomposition)是一种自适应、完全非递归的模态变分和信号处理的方法。该技术具有可以确定模态分解个数的优点,其自适应性表现在根据实际情况确定所给序列的模态分解个数,随后的搜索和求解过程中可以自适应地匹配每种模态的最佳中心频率和有限带宽,并且可以实现固有模态分量(IMF)的有效分离、信号的频域划分、进而得到给定信号的有效分解成分,最终获得变分问题的最优解。它克服了EMD方法存在端点效应和模态分量混叠的问题,并且具有更坚实的数学理论基础,可以降低复杂度高和非线性强的时间序列非平稳性,分解获得包含多个不同频率尺度且相对平稳的子序列,适用于非平稳性的序列,VMD的核心思想是构建和求解变分问题。

 

 

 

 

 

 

 

 

 

 

一、首先构造变分问题

假设原始信号f被分解为k个分量,保证分解序列为具有中心频率的有限带宽的模态分量,同时各模态的估计带宽之和最小,约束条件为所有模态之和与原始信号 相等,VMD约束变分模型如下:

(2-17)

 

其中,为各模态函数,为各中心频率。

公式理解:

  1.  

重新定义了约束条件更严格的有限带宽的本征模态函数(BIMF

定义为:

(2-13)

其中,相位函数为非单调递减,即,幅值,且瞬时幅值和瞬时频率相对来说变化很缓慢,也就是说,在,的间隔范围内,可以看作是一个幅值为、频率为的谐波信号。

对照《信号与系统》周期信号表示方法                                         P64

  1.  

希尔伯特变换下的——解析信号

参考CSDN博客链接整理:https://blog.csdn.net/edogawachia/article/details/79366444

                     https://blog.csdn.net/zd0303/article/details/82996134

希尔伯特变换:

上面的Hilbert变换的表达式实际上就是将原始信号和一个信号做卷积的结果。这个用来卷积的信号就是:

 

因此,Hilbert变换可以看成是将原始信号通过一个滤波器,或者一个系统,这个系统的冲击响应为h(t)。

 

其傅里叶变换为 或 。为符号函数,。该式说明Hilbert变换可视为一个全通滤波器,且幅频特性为1。

卷积定理可知,

的频域表达式为,

进一步推导可得

。从频谱上来看,这个滤波器将我们的原始信号的正频率部分乘以-j,也就是说,保持幅度不变的条件下,将相位移动了-π/2,而对于负频率成分,移动了π/2。下面这个示意图很直观地表示了Hilbert变换,在这里我画出了对原始信号做1到4次Hilbert变换的频谱示意图,是为了说明Hilbert变换的几个性质:

 

 

首先,可以看到,两次希尔伯特变换后,原信号相位翻转了180°,所以,Hilbert逆变换的公式显而易见,就是将正变换加一个符号即可。另外,还可以看到,Hilbert变换四次后就变回本身了。还有其它的性质,比如:

  1. 如果一个信号是两个信号的卷积,即 y = conv(v,x) ,那么Hilbert(y) = conv(Hilbert(v),x) = conv(v,Hilbert(x))这个性质,只要意识到Hilbert变换本质上是卷积就可以明白。
  2. x(t) 和 Hilbert(x(t))的能量以及平均功率相等,相关函数和功率谱相同。

希尔伯特变换的意义:

信号通过Hilbert变换后,正频率部分乘以-j,也就是说,保持幅度不变的条件下,将相位移动了-π/2,而对于负频率成分,移动了π/2,因此Hilbert变换又称为90°相移滤波器或者垂直滤波器[]。

 

  解析信号(解析过程)

对于任何一个实信号

,利用构造解析函数的方法,可得到其在复空间的映射,映射方式是复数的实部与虚部互为Hilbert变换,因此,复值解析信号

定义为:

 

(2-7)

  1. 这个过程有如下特点,首先,实部和虚部功率谱相同,自相关函数相同;另外,实部和虚部的互相关函数是一个奇函数。其他的还有:

 

 

以及一个最重要的特点,就是解析信号的功率谱只有正频段,强度为原来的四倍。或者说是只有正频段且幅度值为原来的两倍:

 

 

  1. 其中指数项
  2. 描述复数信号在时域内旋转的矢量,实数包络
  3. 控制振幅,
  4. 表示相位,定义瞬时频率
  5. 。VMD算法将分解得到的固有模态函数(Intrinsic Mode Function,IMF)定义为调幅调频信号(AM-FM),表达式为
  6. ,其解析信号为:

 

(2-8)

推导过程利用欧拉公式:

 

这个公式说明,用复指数信号可以表示成一个实数信号和一个虚数信号的和的形式。而且,这个实部和虚部是有关系的,一个是cos,一个是sin,两者相差pi/2,看sin和cos的傅里叶变换。可以看出,在正频率上和负频率上两者的相位上的先后顺序刚好相反,但是都是保持90°的差值。看到这里,大概可以理解Hilbert变换的用意了吧。欧拉公式实际上是一种特殊的,或者说,最简单的Hilbert变换。复指数信号,就是等号左边的那个,频谱就是一个脉冲,而且是

只有正频率,且是两倍。虽然时域上是复数,但是在频域只有正分量,实际上是一种简化。

 

由于解析信号的单边谱只包含非负频率,只要根据上式解析信号的实部,即可恢复初始的实信号,即

 

(2-9)

希尔伯特变换下的解析信号意义:

首先,将实数信号变换成解析信号的结果就是,把一个一维的信号变成了二维复平面上的信号,复数的模和幅角代表了信号的幅度和相位,如图所示:

 

 

这样看来,似乎复数信号才是完整的,而实信号只是在复平面的实轴上的一个投影。我们知道,解析信号可以计算包络(瞬时振幅)和瞬时相位。在上图中可以看到,实际上我们计算的包络就是黑色的线围成的立体图形的边界在实部的投影,而计算这个边的投影也很简单,就是在复平面上的螺旋线中的每一个点的模值,也就是A(t) = sqrt(x^2(t) + Hilbert(x(t))^2),而瞬时相位就是虚部(Hilbert变换后的)和实部(原始信号)在某一时间点的比值的arctan,瞬时频率就是它的导数。

 

 

利用指数

修正,使每个模态函数的频谱调制到相应的基频带;

调制定理:

调制信号在时域成以一个等幅高频振荡,相当于在频域把调制信号的各频率分量均搬至高频振荡的频率上,调制信号的各频率分量幅度减半。

混频原理:

参考CSDN博客链接整理: www.blog.sina.com.cn/s/blog_ca1ec6aa0102vztg.html

而复信号则只有单边频率分量,正余弦和复信号的的傅里叶变换频率分量:

 

 

四种信号的频谱图如下:

 

 

 

 

 

由上式可知,一个信号在时域中与余弦、正弦或复信号相乘,等效于频域的频谱搬移

《更细致的请看博客》上有博客链接

 

混频是两个非线性信号合并的过程,进而获得交叉频项。最简单的乘法算子混合器通过混合

两个独立的实数信号,得到频率分别为

的混频输出,可用如下三角恒等式阐述:

 

(2-10)

两个独立解析信号的混合可表述如下:

 

(2-11)

由此可知,被混合的信号自动合成为只有一个频率的信号。在傅里叶变换中,以下的变换众所周知:

 

(2-12)

其中,

为狄拉克分布。

 

频谱调制意义:

将解析信号与纯指数相乘将产生简单频移,上式是向右频移W0频率,变成高频信号,借助于高频载波信号传输低频信号(次声波信号)

 

 

通过高斯平滑(即

范数梯度的平方根)对信号解调,得到各模态函数带宽。

高斯平滑滤波:https://blog.csdn.net/hhygcy/article/details/4329056

均值滤波:https://blog.csdn.net/hhygcy/article/details/4325304

范数规则化:

常用的L0、L1、L2和核范数规则化

https://blog.csdn.net/zouxy09/article/details/24971995

https://blog.csdn.net/zouxy09/article/details/24972869

L2规则化的目的:防止过拟合

什么是过拟合?

 

 

上面的图是线性回归,下面的图是Logistic回归,也可以说是分类的情况。从左到右分别是欠拟合(underfitting,也称High-bias)、合适的拟合和过拟合(overfitting,也称High variance)三种情况。可以看到,如果模型复杂(可以拟合任意的复杂函数),它可以让我们的模型拟合所有的数据点,也就是基本上没有误差。对于回归来说,就是我们的函数曲线通过了所有的数据点,如上图右。对分类来说,就是我们的函数曲线要把所有的数据点都分类正确。

 L2如何防止过拟合

 L2范数是指向量各元素的平方和然后求平方根。我们让L2范数的规则项||W||2最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0,这里是有很大的区别的哦。而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。为什么越小的参数说明模型越简单?我也不懂,我的理解是:限制了参数很小,实际上就限制了多项式某些分量的影响很小(看上面线性回归的模型的那个拟合的图),这样就相当于减少参数个数。其实我也不太懂,希望大家可以指点下。

楼主认为“L2 正则项的作用是让所有的 w 都变小,而 w 越小模型越简单”,大家普遍感到难以理解,我在这里讲讲我自己的不同看法,希望能够帮到大家。 我认为 L2 正则项的作用并不是让所有的 w 都变小,而是【有选择地让某些 w 变小】。正如题主举得医生预测疾病的例子,样本中的特征有很多,但大部分特征都是无关紧要的,只有一小部分关键的特征支撑起了整个预测模型。表现在系数 w 上就是,大部分的 w_i 都是不幸的,因为它们刚好与那些无关紧要的特征结对,它们的大小对整个模型的效果影响不大,于是在正则项的约束下它们都变小了,甚至趋近于0;而只有小部分的 w_i 比较幸运,它们刚好对应到了好的特征,于是它们肩负起了非常重大的责任,它们的微小变化会引起模型曲线在走势上的根本性变化,损失函数会急剧增大。如果正则项妄图约束这些关键的 w_i,使它们变小,那么由此造成的损失函数的扩大将远大于从正则项上获得的微小收益,所以这些关键的 w_i 可以几乎不受正则项的干涉。 但也不尽然,如果你把正则项之前的系数 λ 调到非常大,那么它就会敢于压迫那些关键的 w_i,最终造成的结果是,模型确实变简单了,但也严重偏离了预期方向,没什么卵用了。相反,如果你把 λ 调得非常小,那么正则项对每个 w_i 都惹不起,即使是那些无关紧要的 w_i 它也无力约束,最终就会导致模型过拟合(试想 λ 等于0的情况)。所以,损失函数与正则项就像是博弈的双方,它们之间的力量对比通过参数 λ 进行调和。只有把 λ 调合适了,才能得到既不过拟合,又相对简单的好模型。从这种意义上来说,L2正则项与L1正则项类似,也有“特征选择”的效果。 上面的描述比较感性,是我为了方便直观理解做的一些比喻,如果把模型的预测曲线做出来会更加严谨一些。即每个 w_i 都影响着曲线的形态,但是有主次之分。那些低阶的、关键的 w_i 控制着曲线的整体走势;而那些高阶的、次要的 w_i 则是在曲线整体走势的基础上稍微扭曲曲线的形态;当然,还会有更高阶的 w_i,它们负责在大的扭曲之上制造更小的扭曲,以此类推。 这样看来L2正则项的作用就很明显了,要改变预测曲线的整体走势肯地会造成损失函数的不满,但是把曲线的形态熨平似乎并没有什么不妥。而 λ 的大小则决定了正则项的视野,即多大的弯曲算作走势?多小的弯曲算作扭曲?

VMD中L2正则化补充理解:

因为我们在上一部进行了一部频率调制使W变大,使用L2正则化相当于使非关键的W变小,关键的W没怎么有变化,相当于解调了

 

 

复合信号的中心频率分别为2Hz、24Hz、288Hz,对应于图2.3中各模态频谱图的峰值:、、。

 

     

 

 

 

 

 

 

 

 

 

 

 

 

 

二、求解变分问题

VMD约束变分模型如下:

 

(2-17)

 

 

其中,

为各模态函数,

为各中心频率。

注:个人看法感觉就是一个多元函数求条件最值

       多元函数:关于u(t)和w(t)的

       约束条件:各模态分量和为原信号

解决上述的约束最优化问题,将约束变分问题转变为非约束变分问题,利用二次惩罚项和拉格朗日乘子法的优势,引入了增广Lagrangian函数,如式(2-18)所示:

 

(2-18)

其中,

为罚参数,

为Lagrange乘子。

 

步骤更新泛函:

对所有

,更新泛函

 

(2-19)

更新泛函

 

(2-20)

对所有

,进行双重提升:

 

(2-21)

其中,

表示噪声容限,当信号含有强噪声时,可设定

达到更好的去噪效果。

Step 5:重复步骤2-4,直至满足如下的迭代约束条件:

 

(2-22)

对所有

——>解析信号的单边谱只包含非负频率

迭代寻找最优解:

 

 

1、初始化uk、ωk、λ和n=0,k=0

2、n=n+1(迭代次数)

3、k=k+1,根据VMD算法公式更新uk、ωk

4、又根据相关的算法更新拉格朗日乘数λ

5、知直到满足一定条件,停止迭代,不然转到2步骤

以上只是求每一个模态的单步骤

 

 

我的理解总步骤:

1、初始化uk、ωk、λ和n=0,

2、n=n+1(迭代次数)

3、根据VMD算法公式更新uk、ωk

4、又根据相关的算法更新拉格朗日乘数λ

5、知直到满足一定条件根据(相似系数来判断),停止迭代,不然转到2步骤

6、k=k+1,将源信号减去分解出来的模态,并作为下次一循环的源信号,转到步骤1

主循环

% ----------- Main loop for iterative updates           

while ( uDiff > tol &&  n < N ) % not converged and below iterations limit   

k = 1;

 

 

    sum_uk = u_hat_plus(n,:,K) + sum_uk - u_hat_plus(n,:,1);

     u_hat_plus(n+1,:,k) = (f_hat_plus - sum_uk - lambda_hat(n,:)/2)./(1+Alpha(1,k)*(freqs - omega_plus(n,k)).^2);

    

      if ~DC

 

 

        omega_plus(n+1,k) = (freqs(T/2+1:T)*(abs(u_hat_plus(n+1, T/2+1:T, k)).^2)')/sum(abs(u_hat_plus(n+1,T/2+1:T,k)).^2);

    end

    

    % update of any other mode                       ¸üÐÂÆäËûģʽ2-Kģʽ

    for k=2:K

        

        % accumulator

        sum_uk = u_hat_plus(n+1,:,k-1) + sum_uk - u_hat_plus(n,:,k);

        

        % mode spectrum                              Ä£Ì¬ÆµÆ×

        u_hat_plus(n+1,:,k) = (f_hat_plus - sum_uk - lambda_hat(n,:)/2)./(1+Alpha(1,k)*(freqs - omega_plus(n,k)).^2);

        

        % center frequencies                         ÖÐÐÄƵÂÊ          

        omega_plus(n+1,k) = (freqs(T/2+1:T)*(abs(u_hat_plus(n+1, T/2+1:T, k)).^2)')/sum(abs(u_hat_plus(n+1,T/2+1:T,k)).^2);

        

    end

    

 

 

    lambda_hat(n+1,:) = lambda_hat(n,:) + tau*(sum(u_hat_plus(n+1,:,:),3) - f_hat_plus);

    

    % loop counter                  

    n = n+1;

    

% converged yet?                      

 

 

    uDiff = eps;

    for i=1:K

        uDiff = uDiff + 1/T*(u_hat_plus(n,:,i)-u_hat_plus(n-1,:,i))*conj((u_hat_plus(n,:,i)-u_hat_plus(n-1,:,i)))';

    end

    uDiff = abs(uDiff);

    

end

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(数字信号处理,信号处理)