matlab实现VMD去噪、SVD去噪,源代码详解

article/2025/7/28 10:46:39

为了更好的利用MATLAB自带的vmd、svd函数,本期作者将详细讲解一下MATLAB自带的这两个分解函数如何使用,以及如何画漂亮的模态分解图。

VMD函数用法详解

首先给出官方vmd函数的调用格式。

[imf,residual,info] = vmd(x)

函数的输入:

这里的x是待分解的信号,一行或者一列都可以!

函数的输出:

第一个参数位置--imf:vmd分解得到的IMF分量。

第二个参数位置--residual:残余分量,残差表示原始信号x中未被vmd分解的部分。

第三个参数位置--info,是一个结构体,包含以下信息:

ExitFlag——终止标志。值0表示算法在达到最大迭代次数时停止。值为1表示算法在满足绝对和相对公差时停止。

CentralFrequencies——IMF的中心频率。

NumIterations——迭代总数。

AbsoluteImprovement——在最后两次迭代之间,IMF收敛的均方绝对改进。

RelativeImprovement——在最后两次迭代之间,IMF收敛的平均相对改进。

LagrangeMultiplier ——上一次迭代时的频域拉格朗日乘数。

示例:

以西储大学轴承故障的105.mat为例,进行vmd分解展示。代码如下:

clcclearfs=12000;%采样频率Ts=1/fs;%采样周期L=2000;%采样点数t=(0:L-1)*Ts;%时间序列%----------------导入内圈故障的数据-----------------------------------------load 105.matX = X105_DE_time(1:L); %这里可以选取DE(驱动端加速度)、FE(风扇端加速度)、BA(基座加速度),直接更改变量名,挑选一种即可。[imf,residual,info] = vmd(X);figure(1);[p,q] = ndgrid(t,1:size(imf,2));plot3(p,q,imf)grid onxlabel('Time Values')ylabel('Mode Number')zlabel('Mode Amplitude')

选取105.mat的2000个采样点,进行分解,结果图如下所示:

还可以指定vmd的模态分解数和惩罚因子:

[imf,residual,info] = vmd(X,'NumIMF',6,'PenaltyFactor',2500,')

可以看到,模态分解数变成了6个。

当分解模态数较多的时候,还可以这样画图:

clcclearfs=12000;%采样频率Ts=1/fs;%采样周期L=2000;%采样点数t=(0:L-1)*Ts;%时间序列%----------------导入内圈故障的数据-----------------------------------------load 105.matX = X105_DE_time(1:L); %这里可以选取DE(驱动端加速度)、FE(风扇端加速度)、BA(基座加速度),直接更改变量名,挑选一种即可。[imf,residual] = vmd(X,'NumIMF',9);t1 = tiledlayout(3,3,TileSpacing="compact",Padding="compact");for n = 1:9    ax(n) = nexttile(t1);    plot(t,imf(:,n)')    xlim([t(1) t(end)])    txt = ["IMF",num2str(n)];    title(txt)    xlabel("Time (s)")endtitle(t1,"Variational Mode Decomposition")

结果如下:

VMD去噪

对分解的信号去除残余分量,然后进行重构,即为去噪,代码如下:

cleanX = sum(imf(:,2:8),2);figureplot(t,X,t,cleanX)legend("Original X","Clean X")xlabel("Time (s)")ylabel("Signal")

这里选用IMF2-IMF8进行相加,丢弃了IMF1和IMF9。为什么要这么做呢,以下MATLAB官方文档给出的解释:

第一种模式包含最多的噪声,第二种模式是以重要特征的频率振荡。通过对除第一个和最后一个VMD模式之外的所有模式求和来构建干净的X信号,从而丢弃低频基线振荡和大部分高频噪声。

结果如下:

105.mat下载地址:https://pan.baidu.com/s/1UX0dgLrW6SpjPFhML-OQeQ?pwd=puz2 


SVD去噪

SVD就是常见的奇异值分解,也算是一个古老的分解方法了。MATLAB官方关于svd的调用方法如下:

[U,S,V]=svd(A)

参数说明:A:要进行SVD分解的矩阵,且A不必为方阵。

U、S、V为返回的SVD分解的结果:

  • U:A的奇异向量组成的矩阵,AA’的正交单位特征向量组成U;

  • S:对角矩阵,对角元素是A的奇异值,非负且按降序排列;

  • V:A的奇异向量组成的矩阵,A’A的正交单位特征向量组成V。

SVD去噪:同样以105.mat为例:

clearclcload 105.matL=2000; %采样点数y = X105_DE_time(1:L); %这里可以选取DE(驱动端加速度)、FE(风扇端加速度)、BA(基座加速度),直接更改变量名,挑选一种即可。n=40;%=============================%==== 奇异值分解 ====for i=1:L/2+1t=i:i+L/2-1;for j=1:L/2A(j,i)=y(t(j)); %把一维信号重构为矩阵做奇异值分解endend[U,S,V] = svd(A);%=============================%==== 重构信号 =====X=zeros(size(A));for i=1:n  %选取前n个大奇异值X=X+U(:,i)*S(i,i)*V(:,i)';endJG=zeros(1,L);for i=1:La=0;m=0;for j1=1:L/2for j2=1:L/2+1if i+1==j1+j2a=a+X(j1,j2); %把矩阵重构回一维信号m=m+1;endendendJG(i)=a/m;end% JG(L/2+1:end)=X(:,end);figurefs=12000;%采样频率Ts=1/fs;%采样周期L=2000;%采样点数t=(0:L-1)*Ts;%时间序列plot(t,y,t,JG)legend("Original X","Clean X")xlabel("Time (s)")ylabel("Signal")title('奇异值降噪信号','FontSize',16)%set(gca,’linewidth’,1.5);set(gcf,'color','w')

105.mat下载地址:https://pan.baidu.com/s/1UX0dgLrW6SpjPFhML-OQeQ?pwd=puz2 


获取更多代码:

或者复制链接跳转:https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu

http://www.hkcw.cn/article/fbHtjASucn.shtml

相关文章

深入理解复数加法与乘法:MATLAB演示

在学习复数的过程中,复数加法与乘法是两个非常基础且重要的概念。复数的加法和乘法操作与我们常见的实数运算有所不同,它们不仅涉及到数值的大小,还有方向和相位的变化。在这篇博客中,我们将通过MATLAB演示来帮助大家更好地理解复…

html+css+js趣味小游戏~Treasure Arena多人竞技(附源码)

下面是一个简单的记忆卡片配对游戏的完整代码&#xff0c;使用HTML、CSS和JavaScript实现&#xff1a; html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wid…

Linux之文件进程间通信信号

Linux之文件&进程间通信&信号 文件文件描述符文件操作重定向缓冲区一切皆文件的理解文件系统磁盘物理结构&块文件系统结构 软硬链接 进程间通信匿名管道命名管道system V共享内存 信号 文件 首先&#xff0c;Linux下一切皆文件。对于大量的文件&#xff0c;自然要…

笔试强训:Day6

一、小红的口罩&#xff08;贪心优先级队列&#xff09; 登录—专业IT笔试面试备考平台_牛客网 #include<iostream> #include<queue> #include<vector> using namespace std; int n,k; int main(){//用一个小根堆 每次使用不舒适度最小的cin>>n>&…

国密SSL证书和国产SSL证书有什么区别

国密SSL证书和国产SSL证书在定义、算法标准、安全性能、兼容性、应用场景及自主可控性等方面存在显著区别&#xff0c;具体分析如下&#xff1a; 定义与背景 国密SSL证书 采用中国自主研发的密码算法&#xff08;如SM2、SM3、SM4&#xff09;&#xff0c;符合国家密码管理局发…

OramaCore 是您 AI 项目、答案引擎、副驾驶和搜索所需的 AI 运行时。它包括一个成熟的全文搜索引擎、矢量数据库、LLM界面和更多实用程序

一、软件介绍 文末提供程序和源码下载 OramaCore 是您的项目、答案引擎、副驾驶和搜索所需的 AI 运行时。 它包括一个成熟的全文搜索引擎、矢量数据库、LLM具有行动计划和推理功能的接口、用于根据数据编写和运行您自己的自定义代理的 JavaScript 运行时&#xff0c;以及更多…

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.14 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.14 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图。 dataframe<-data.frame( strengthc(9.60,9.…

Maven---配置本地仓库

目录 5. 5.1在Maven路径下新建文件夹用于本地仓库存储 5.2 复制本地仓库路径 5.3 找到配置文件路径&#xff0c;使用VSCode方式打开 5.4 新增一行代码 5.5 复制本地仓库路径&#xff0c;设置存储路径 5.1在Maven路径下新建文件夹用于本地仓库存储 5.2 复制本地仓库路径 5…

Docker环境构建:MySQL 双主四从集群

Java系列文章 文章目录 Java系列文章前言一、环境准备与Docker配置1.1 环境配置1.2 目录结构1.3 读写分离1.3.1 读写分离方案1.3.2 自定义Docker网络 二、双主四从节点配置2.1 创建MySQL_1节点2.1.1 Mysql_1容器2.1.2 Navicat创建连接2.1.3 创建配置账户 2.2 创建MySQL_2节点2.…

低频 500kHz vs 高频 1MHz,FP6291C与FP6291升压芯片应用在不同场景该怎么选择?

FP6291C 与 FP6291 均为电流模式升压型 DC-DC 转换器&#xff0c;内置功率 MOSFET 和内部补偿网络。这一特性极大简化了外部电路设计&#xff0c;不仅降低了 PCB 空间占用&#xff0c;还能有效控制成本。两者均支持软启动功能&#xff0c;可显著减少浪涌电流&#xff0c;提升系…

leetcode题解513:找树左下角的值(递归中的回溯处理)!

一、题目内容&#xff1a; 题目要求找到一个二叉树的最底层最左边节点的值。具体来说&#xff0c;我们需要从根节点开始遍历二叉 树&#xff0c;找到最深的那层中的最左边的节点&#xff0c;并返回该节点的值。因为要先找到最底层左侧的值&#xff0c;所以我们选择遍历顺序一定…

React项目在ios和安卓端要做一个渐变色背景,用css不支持,可使用react-native-linear-gradient

以上有个模块是灰色逐渐到白的背景色过渡 如果是css&#xff0c;以下代码就直接搞定 background: linear-gradient(180deg, #F6F6F6 0%, #FFF 100%);但是在RN中不支持这种写法&#xff0c;那应该写呢&#xff1f; 1.引入react-native-linear-gradient插件&#xff0c;我使用的是…

Nginx进阶篇(Nginx静态资源概述、Nginx静态资源配置指令、Nginx静态资源优化配置、Nginx静态资源压缩)

文章目录 1. Nginx静态资源概述2. Nginx静态资源配置指令2.1 listen指令2.2 server_name指令2.2.1 精确匹配2.2.2 补充知识&#xff1a;hosts文件2.2.3 通配符匹配2.2.4 正则表达式匹配2.2.5 匹配的执行顺序 2.3 location指令2.3.1 uri以指定模式开始&#xff08;/&#xff09;…

SAP 生产订单收货数量超额报错问题研究

工单收货接口报错有点奇怪&#xff0c;明明是生产订单收货&#xff0c;报错消息中却一直说采购订单收货。 其实之前有发现&#xff0c;只是知道原因&#xff08;收货数量超过工单总数量&#xff09;&#xff0c;没太关注描述问题&#xff0c;这次好好研究下。 首先检查消息号&…

【连接器专题】SD卡座规格书审查需要审哪些方面?

在审查SD卡座规格书时,我们需要考虑哪些方面? 首先在拿到一份SD卡座的详细规格书时,一般供应商给到的规格书中包括了一些基础信息、产品图纸信息、技术参数信息,同时有些供应商会给出产品可靠性测试报告。因此我们会从这几个要素去看规格书。 基础信息 基础信息一般会给变更…

sward V1.1.4版本发布,支持文档审批及文档导出

sward是一款国产开源企业级知识管理工具&#xff0c;包含知识库管理、文档管理、文档协作、文档分享等模块&#xff0c;支持普通文档、markdown等格式&#xff0c;产品简洁易用、开源免费。本周sward发布V1.1.4版本&#xff0c;增加了文档审批和文档导出为word的功能&#xff0…

谷云科技发布业内首份 Oracle OSB 迁移到 iPaaS 技术白皮书

随着企业数字化转型的加速推进&#xff0c;从传统企业服务总线ESB向现代化集成平台iPaaS迁移已成为行业发展的必然趋势。Oracle Service Bus&#xff08;OSB&#xff09;在ESB产品市场中长期以来一直占据着较高的市场份额。然而&#xff0c;许多用户由于担心技术迁移的复杂性和…

特伦斯 S75 电钢琴:重塑音乐感知,臻享艺术之境

在音乐文化蓬勃发展的当下&#xff0c;电钢琴已成为音乐爱好者探索旋律世界的热门之选。在这方充满无限可能的音乐领域&#xff0c;特伦斯 S75 电钢琴以其超凡的设计与卓越的性能&#xff0c;打破传统电钢琴的局限&#xff0c;为用户带来无与伦比的音乐体验&#xff0c;宛如一颗…

立控信息智能装备柜:科技赋能军队装备管理现代化

在军事装备管理领域&#xff0c;高效、安全、智能化的存储解决方案至关重要。传统的人工管理模式不仅效率低下&#xff0c;还容易因人为疏忽导致装备丢失或管理混乱。​LKONE智能装备柜凭借先进的物联网技术、生物识别安全系统和智能管理功能&#xff0c;为军队提供了一套高效、…

【freertos-kernel】queue(接收)

文章目录 xQueueReceivexQueueReceiveFromISRxQueuePeekxQueuePeekFromISR xQueueReceive 从队列中接收一个数据项。 和发送数据的过程有点类似&#xff0c;不逐行解释代码了。 vTaskPlaceOnEventList把当前任务放进队列的等待链表的同时也会把当前任务从就绪列表移除&#x…