VMD-ICA滤波算法

最后更新于:2024-04-07 21:34:04

一、代码运行环境

理论上MATLAB2016以上可以使用,推荐使用MATLAB2020a及更新版本。

二、程序介绍

注:图标代表该m文件为脚本文件,可以直接运行;图标代表函数文件,在没有输入变量的情况下无法直接运行。更详细的解释可以看这里

1.FastICA_25文件夹

第三方FastICA的工具箱,在该代码中调用。工具箱中是FastICA的一些底层实现,该文件夹中的文件不需要修改。当移植代码时,该文件夹需要随其他文件一起移植。

2.demoFilEMDsICA.m文件

进行VMD-ICA滤波的脚本文件,函数filEMDsICA的测试文件,可以直接运行。该脚本中使用的是VMD算法进行分解,当然你可以根据需要换成其他分解程序。程序运行完成后,在MATLAB的工作区,双击reSig变量,可以查看滤波后的具体数值。

运行该文件,将绘制以下图片:

加入噪声前后信号

VMD分解结果

VMD分解三维展开图

FastICA分解结果

滤波效果对比图

另外在命令行窗口将会打印:

3.filEMDsICA.m文件

使用ICA对IMF分量进行处理,并根据信息熵筛选出有效分量进行信号重构。主算法流程全部封装其中。该函数中还包含了求功率谱熵的函数kPowerSpectrumEntropy和求信息熵函数kInformationEntopy。

需注意该函数文件不能直接运行,需参照demoFilEMDsICA的演示案例进行调用。此外需注意,该函数仅对一维数据进行滤波。

function reSig = filEMDsICA(imf)
% filEMDsICA - 使用ICA对IMF分量进行处理,并根据信息熵筛选出有效分量进行信号重构
%
% 输入参数:
%   imf - 经过EMD分解得到的IMF分量,每一行为一个IMF分量
%
% 输出参数:
%   reSig - 滤波后的信号

4.FilterEffectEvaluation.m文件

对滤波效果进行评估。目前包含的评估指标有:信噪比SNR,均方差MSE,波形相似系数NCC。

function [SNR,MSE,NCC] = FilterEffectEvaluation(ori,fil)

% 对滤波效果进行评估
% 目前包含的评估指标有:信噪比SNR,均方差MSE,波形相似系数NCC
% 输入:
% ori:无噪声的原始数据,一维序列
% fil:滤波后的数据,一维序列
% 输出:
% SNR:信噪比
% MSE:均方误差
% NCC:波形相似系数

5.pFastICA.m文件

使用FastICA算法分解混合信号并画图的代码。

function [icasig, A, W] = pFastICA(mixedsig, numOfIC, g)
% pFastICA 使用FastICA算法分解混合信号并画图的代码
% 输入:
% mixedsig - 混合信号矩阵,每行代表一个观测值,每列代表一个观测点
% numOfIC - 需要提取的独立成分数目,如果不指定数目,则输入0
% g - 使用的非线性函数类型,可选'pow3', 'tanh', 'gauss'
%                       Value of 'g':      Nonlinearity used:
%                       'pow3' (default)   g(u)=u^3
%                       'tanh'             g(u)=tanh(a1*u)
%                       'gauss             g(u)=u*exp(-a2*u^2/2)
%
% 输出:
% icasig - 分解后的独立成分信号矩阵
% A - 混合矩阵
% W - 解混矩阵
% icasig = W*mixedsig
% mixedsig = A*icasig

6.kVMD.m

整合版VMD函数,整合了第三方VMD和MATLAB自带工具箱的VMD分解方法,并且统一输出格式,配合后续进行希尔伯特-黄变换等无缝衔接。

函数参数说明:

function [imf,CenFs]  = kVMD(data,FsOrT, alpha, K, tol)
% 整合版VMD函数,整合了第三方VMD和MATLAB自带工具箱的VMD分解方法
% 默认设置下按照MATLAB自带库进行
% 并且统一输出格式,配合后续进行希尔伯特-黄变换等无缝衔接
% 输入:
% data:待分解的数据(一维)
% FsOrT:采样频率或采样时间向量,如果为采样频率,该变量输入单个值;如果为时间向量,该变量为与y相同长度的一维向量。如果未知采样频率,可设置为1
% alpha   - 惩罚因子
% K       - 指定分解模态数
% tol     - 收敛容差,是优化的停止准则之一,可以取 1e-6~5e-6

% 输出:
% imf:内涵模态分量,统一为n*m格式,其中n为模态数,m为数据点数。例如 imf(1,:)即IMF1,imf(end,:)即为残差
% 注意,为了与其他“类EMD”方法分解出来的imf分量保持一致,本程序内将imf排序进行了翻转
% 即保证imf排列是从高频向低频排列
% CenFs:即CentralFrequencies,各imf分量的中心频率

% 注意:使用两种库所得到的imf结果会存在差异,这是由两个库自身算法差异导致的,属于正常现象。

7.pVMD.m

封装好的VMD画图程序。

函数参数说明:

function [imf,CenFs] = pVMD(y,FsOrT, alpha, K, tol)
% 画信号VMD分解图
% 输入:
% data:待分解的数据(一维)
% FsOrT:采样频率或采样时间向量,如果为采样频率,该变量输入单个值;如果为时间向量,该变量为与y相同长度的一维向量。如果未知采样频率,可设置为1
% alpha   - 惩罚因子
% K       - 指定分解模态数
% tol     - 收敛容差,是优化的停止准则之一,可以取 1e-6~5e-6

% 输出:
% imf:内涵模态分量,统一为n*m格式,其中n为模态数,m为数据点数。例如 imf(1,:)即IMF1,imf(end,:)即为残差
% 注意,为了与其他“类EMD”方法分解出来的imf分量保持一致,本程序内将imf排序进行了翻转
% 即保证imf排列是从高频向低频排列
% CenFs:即CentralFrequencies,各imf分量的中心频率

% 注意:在使用该代码之前,请务必安装工具箱:http://103.118.41.220/docs/index.php/2020/04/09/1/

画图效果如下(参考):

可以同时画出下边这张VMD分解的三维展开图(完整版独有):

三、快速开始

1.运行测试脚本

先在MATLAB里打开下载好的文件夹,然后运行demoFilEMDsICA.m程序,程序运行完毕后如果没报错,且正常画出滤波对比图像,则说明运行环境正常,程序正确。

2.修改仿真数据/导入数据

复制一个demoFilEMDsICA.m的文件副本,在这个副本里做如下修改:

(1)第一种情况,你可能想要对你自己要研究的仿真数据进行滤波测试,此时你需要对 demoFilEMDsICA.m 脚本文件中的第1小节内容进行修改替换即可。需要注意的是,请最好保持变量名的一致,即将无噪声信号命名为ps,添加噪声后的信号命名为x,x和ps都应该是一维数据。此时数据替换完成。

(2)第二种情况,你可能是想对一段真实采集的数据进行滤波,此时需要根据你的文件类型的不同(excel,txt,csv等),将数据导入MATLAB的方法有所不同。同学们可以看博主针对常用文件的导入方法的这个教程,教程上未包含的数据类型,大家可以再参考这个文档导入完成后请讲这个待滤波信号命名为x。此时你可能没有纯净信号(在大多数实际应用中是没有纯净信号的),这不影响你是用小波阈值滤波进行信号去噪,但是你将无法计算滤波评价指标。

3.替换模态分解方法(可选)

参照 demoFilEMDsICA.m文件中第二步。你可以选择继续使用VMD算法,此时可以根据需要修改alpha、tol、K等参数;你也可以选择替换成其他的模态分解算法,店铺中有相关代码,大家可以在下边链接中找到:http://khsci.com/docs/。至于替换方法,我也录制了视频供大家参考(需完整版)。

4.运行程序

此时运行程序即可。

(需要注意,对于使用真实采集的数据进行滤波,且无纯净信号的情况下,需要删除代码中的第4节滤波评价指标计算,并将第5节滤波对比图像按照注释进行修改)

四、关于完整版与公开版代码

功能完整版公开版
数据导入、参数设置、实现特征提取
软件全部源码(函数m文件)×
特征提取数据长度无限制200个点以内
画图水印无水印有水印
如何替换其他模态分解方法的视频教程×

五、获取公开版程序(需使用电脑浏览器打开)

ICAfilter公开版代码

注:公开版代码需使用MATLAB2022a及以上版本。

六、获取完整版程序(使用电脑浏览器或者手机浏览器打开)

获取通道一(淘宝):点击此处获取完整版程序

获取通道二(本页面):点击下面“立即支付”按钮,付款后获取完整版代码下载链接和售后联系方式~本通道处于测试阶段,使用该通道可以额外优惠(仅需69元)。付款完成后刷新一下本页面即可看到下载链接。

(注意支付跳转失败的话,请使用浏览器打开本页面)

您需要先支付 69元 才能查看此处内容!立即支付

七、完整版代码重要更新

20240312 完成初版代码

八、常见问题

无。