zoukankan      html  css  js  c++  java
  • matlab中使用VMD(变分模态分解)

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


    拨号音信号的变模分解

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

    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。

    分段信号的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信号,从而丢弃低频基线振荡和大部分高频噪声。

  • 相关阅读:
    Python中读取文件中的json串,并将其写入到Excel表格中
    Python中替换敏感字
    Python写一个批量生成账号的函数
    解决MySQL不允许远程连接的问题
    Jenkins安装与配置
    Jmeter监听tomcat
    onlyoffice document docker版安装使用总结
    onlyoffice-DocumentServer 的权限验证
    docker 部署es
    docker部署graylog使用教程
  • 原文地址:https://www.cnblogs.com/tecdat/p/12837338.html
Copyright © 2011-2022 走看看