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

摘要:
fs=4e3;t=0:1/fs:0.5-1/fs;绘制明细表的变分模态分解。多分量信号的VMD产生由频率为2Hz、10Hz和30Hz的三个正弦波组成的多分量信号。Plot3gridxlabelylabellabel使用计算的IMF绘制多分量信号的希尔伯特谱。文件Plot(t,x)x标签标签旁边的Plot x标签标签执行变分模式分解以计算四个本征模式函数。使用VMD从ECG信号中去除噪声本例中标记的信号来自MIT-BIH心律失常数据库。通过添加除第一个和最后一个VMD模式之外的所有模式,构建了干净的ECG信号,从而丢弃了低频基线振荡和大部分高频噪声。

原文链接:http://tecdat.cn/?p=12486


拨号音信号的变模分解

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

fs = 4e3;
t = 0:1/fs:0.5-1/fs;
matlab中使用VMD(变分模态分解)第1张

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

matlab中使用VMD(变分模态分解)第2张matlab中使用VMD(变分模态分解)第1张

多分量信号的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')
matlab中使用VMD(变分模态分解)第1张

matlab中使用VMD(变分模态分解)第5张matlab中使用VMD(变分模态分解)第1张

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

matlab中使用VMD(变分模态分解)第7张matlab中使用VMD(变分模态分解)第1张

分段信号的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')
matlab中使用VMD(变分模态分解)第1张

matlab中使用VMD(变分模态分解)第10张matlab中使用VMD(变分模态分解)第1张

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

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

plot(t,x,':','LineWidth',2)
xlabel('Time (s)')
ylabel('Signal')
hold off
legend('Reconstructed signal','Original signal', ...
       'Location','northwest')
matlab中使用VMD(变分模态分解)第1张

matlab中使用VMD(变分模态分解)第13张matlab中使用VMD(变分模态分解)第1张

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

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

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

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

plot(tm,ecgsig)
ylabel('Time (s)')
xlabel('Signal')
matlab中使用VMD(变分模态分解)第1张

matlab中使用VMD(变分模态分解)第16张matlab中使用VMD(变分模态分解)第1张

ECG信号包含由心跳的节奏和振荡的低频模式驱动的尖峰。ECG的不同辐条会产生重要的高次谐波。

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

matlab中使用VMD(变分模态分解)第18张matlab中使用VMD(变分模态分解)第1张

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

matlab中使用VMD(变分模态分解)第20张matlab中使用VMD(变分模态分解)第1张

免责声明:文章转载自《matlab中使用VMD(变分模态分解)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇adb命令——基础系统类命令linux系统常用运维命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用matplotlib画出log的图像

以下内容是学习笔记,若有侵权,立即删除! import math import matplotlib.pyplot as plt import numpy as np if __name__ == '__main__': #获得浮点类型numpy数组 x = np.arange(0.05,3,0.05) #获得函数结果 y1...

Matlab 曲线拟合

在matlab中经常需要对数据进行曲线拟合,如最常见的多项式拟合,一般可以通过cftool调用曲线拟合工具(curve fit tool),通过图形界面可以很方便的进行曲线拟合,但是有些时候也会遇到不方便用图形工具。因此这里简单的记下两种常用的拟合方法。 1 多项式拟合(polyfit和polyval) polyfit可以对数据进行拟合(自定义用几次多项式...

Plotly学习记录 1

0.古木阴中系短篷 一个星期加班加点的,下篇论文的准备工作基本做好了。但是错过了七月份的一个会议,八月的会是没有检索的,自然没有投的必要了。所以写论文的工作暂时放一下。 最近入手了一本4月出版的《Python数据分析:基于Plotly的动态可视化绘图》。在深度学习论文中实在需要大量好看的图表了,可视化展示可以说是论文第一眼看上去,能不能出彩的重中之重了。客...

VS2015调用matlab Plot函数

最近经常采用Matlab仿真,然后C语言实现,最后需要将计算结果使用Qt的qwt或者matlab中的plot函数绘图。 因此想借用matlab的plot函数接口,使用VS2015来编写信号处理代码,最后通过绘图来验证。 参考博客: https://blog.csdn.net/shouzang/article/details/80795945 https:/...

Beta分布

Beta分布 beta分布可以看做一个概率的概率分布。首先试验是伯努利试验,它符合二项式分布。而Beta分布是先有一些试验结果,比如说有100个试验结果,其中30次成功,70次失败,然后在这个基础上继续试验,把新的试验结果加到原有结果上,beta分布就是这一系列操作后是某一概率的可能性大小,分布曲线的x轴是概率。beta分布描述的就是我们不知道概率是多少,...

R in action读书笔记(15)第十一章 中级绘图 之二 折线图 相关图 马赛克图

第十一章 中级绘图 本节用到的函数有: plot legend corrgram mosaic 11.2折线图 如果将散点图上的点从左往右连接起来,那么就会得到一个折线图。 创建散点图和折线图: > opar<-par(no.readonly=TRUE) > par(mfrow=c(1,2)) > t1<-su...