matlab中使用VMD(变分模态分解)

拨号音信号的变模分解,首先创建一个以4 kHz采样的信号

由Kaizong Ye,Coin Ge撰写

类似于拨打数字电话的所有键。将信号另存为MATLAB®时间数据。

创建一个以4 kHz采样的信号,类似于拨打数字电话的所有键。将信号另存为MATLAB®时间数据。

×

变分模态分解

VMD算法通过搜索约束变分模型最优解来实现信号的自适应分解  ,迭代求解变分模型,最终可以根据被分解信号的频域特性完成信号频带的自适应分解。对于原始信号f,其对应的约束变分模型表达式如公式(1)所示。

{min{μk},{ωk}{Kk=1t[(δ(t)+jπt)uk(t)]ejωkt22}s.t.Kk=1uk=f(1)

式中: {uk} 为分解得到的K个模态分量, {ωk} 为各模态分量的中心频率。

引入增广Lagrange函数求解上述约束变分问题的最优解,如公式(2)所示。

L({uk},{ωk},{λ})=αKk=1t[(δ(t)+jπt)uk(t)]ejωkt22+f(t)Kk=1uk(t)22+λ(t),f(t)Kk=1uk(t)(2)

式中:α为二次惩罚因子,可在高斯噪声存在的情况下保证信号的重构准确度;λ为Lagrange算子,用来保持约束条件的严格性。

利用交替方向乘子法求取上述增广Lagrange函数的鞍点,即通过交替更新 {un+1k} , {ωn+1k} 和 {λn+1} 寻求式(2)的最优解,其中 un+1k 由式(3)求得。

un+1k=argminukX{αt[(δ(t)+jπt)uk(t)]ejωkt22+f(t)ikui(t)+λ(t)222}(3)

利用Parseval/Plancherel傅里叶等距变换将式(1)变换到频域,求得二次优化问题的解见式(4)。

ˆun+1k(ω)=ˆf(ω)i<kˆun+1i(ω)i>kˆuni(ω)+ˆλ(ω)/21+2α(ωωk)2(4)

同理为求解 ωn+1k 的最小值问题,将中心频率更新问题转换到频域,如公式(5)所示。

ωn+1k=argminωk{t[(δ(t)+jπt)uk(t)]ejωkt22}(5)

中心频率的计算结果如式(6)所示。

ωn+1k=0ω|ˆun+1k(ω)|2dω0|ˆun+1k(ω)|2dω(6)

式中: ˆun+1ka 为当前剩余量 ˆf(ω)ikˆui(ω) 的维纳滤波; ωn+1k 为当前模态函数功率谱的中心频率。

对 |ˆuk(ω)| 进行傅里叶逆变换,取实部即可得到时域模态分量 {uk(t)} 。Lagrange算子 λ 按式(7)更新。

ˆλn+1(ω)=ˆλn(ω)+τ(ˆf(ω)kˆun+1k(ω))(7)

VMD算法的交替迭代过程如图所示。


fs = 4e3;
t = 0:1/fs:0.5-1/fs;

绘制时间表的变分模态分解。

多分量信号的VMD

生成由频率为2 Hz,10 Hz和30 Hz的三个正弦波组成的多分量信号。正弦波以1 kHz采样2秒。将信号嵌入方差为0.01²的高斯白噪声中。

计算噪声信号的IMF,并在3-D图中可视化它们。

plot3(p,q,imf)
grid on
xlabel('Time Values')
ylabel('Mode Number')
zlabel('Mode Amplitude')

使用计算出的IMF绘制多分量信号的希尔伯特频谱。将频率范围限制为[0,40] Hz。


matlab使用经验模式分解emd 对信号进行去噪

阅读文章


分段信号的VMD

生成一个由二次趋势,线性调频信号和余弦组成的分段复合信号,在t  = 0.5时,两个恒定频率之间会发生急剧过渡  。

x(t)= 6t2 + cos(4πt+10πt2)+ {cos(60πt),cos(100πt-10π),t≤0.5,t> 0.5。

信号以1 kHz采样1秒。绘制每个单独的分量和复合信号。


plot(t,6*t.^2)
xlabel('Time (s)')
ylabel('Quadratic trend')

nexttile(5,[1 2])
plot(t,x)
xlabel('Time (s)')
ylabel('Signal')


随时关注您喜欢的主题


执行变分模态分解以计算四个本征模式函数。信号的四个不同分量得以恢复。

通过添加模式函数和残差来重构信号。绘制并比较原始信号和重构信号。

plot(t,x,':','LineWidth',2)
xlabel('Time (s)')
ylabel('Signal')
hold off
legend('Reconstructed signal','Original signal', ...
       'Location','northwest')

计算原始信号与重构信号之间的差异的范数。

使用VMD从ECG信号中去除噪声

在此示例中标记的信号来自MIT-BIH心律失常数据库  (信号处理工具箱)。数据库中的信号以360 Hz采样。

加载与记录200相对应的MIT数据库信号并绘制该信号。

plot(tm,ecgsig)
ylabel('Time (s)')
xlabel('Signal')

ECG信号包含由心跳的节奏和振荡的低频模式驱动的尖峰。

ECG的不同辐条会产生重要的高次谐波。

计算开窗信号的九种固有模态函数,可视化IMF。

第一种模态包含最多的噪声,第二种模态以心跳的频率振荡。通过将除第一个和最后一个VMD模态之外的所有模态相加,构造一个干净的ECG信号,从而丢弃低频基线振荡和大部分高频噪声。


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds