【滤波专题-第8篇】ICA降噪方法——类EMD联合ICA降噪及MATLAB代码实现(以VMD-ICA为例)

今天来介绍一种效果颇为不错的降噪方法。(针对高频白噪声)

上一篇文章我们讲到了FastICA方法。在现实世界的许多情况下,噪声往往接近高斯分布,而有用的信号(如语音、图像特征等)往往表现出非高斯的特性。FastICA通过最大化输出信号的非高斯性来恢复这些有用的信号,从而有效地从噪声中分离出信号。

将类经验模态分解(EMD)方法与FastICA结合使用,可以创建一种巧妙的信号处理策略,这种结合利用了两种方法的互补优势:通过EMD分解得到的IMFs可以简化信号的结构,但单独使用EMD可能不足以有效分离信号中的噪声和有用信息,自适应得到的imf数量也可能存在冗余;FastICA则能够从imf信号中进一步提取独立成分,更有效地识别噪声成分。

下面将详细解释这种结合的算法流程、优势以及MATLAB代码实现。

一、算法流程

我们直接开门见山,通过案例来讲解算法流程。

首先生成一段待降噪信号。

rng(123456)
t = (0:0.001:(1-0.001))';
x1 = 0.6*sin(15*pi*t+pi/5);
x2 = cos(60*pi*t+sin(10*pi*t));
x3 = (1+0.3*cos(10*pi*t)).*sin(200*pi*t);
x4 = wgn(1000,1,-10);fs = 1000; %采样频率
ps = x1+x2+x3;  %未加噪声的纯净信号
s = ps+x4;
figure('color','w')
subplot(2,1,1);plot(t,ps,'k');title('无噪声的仿真信号')
subplot(2,1,2);plot(t,s,'k');title('加入噪声的仿真信号')

这段信号加入噪声前后的图像如下,我们的任务就是将下边的含噪信号尽可能回复成上图中的无噪声信号。

1.类EMD分解

关注我的专栏的老读者们都知道,我将EMD、EEMD、CEEMD、CEEMDAN、ICEEMDAN、VMD等一系列模态方法统称为“类EMD”方法,在本篇文章中,该步骤也可以是上述分解方法中的任意一种,毕竟这一步的目的是将复杂信号分解为一定数量的模态分量。

此案例中我们使用VMD分解算法。

alpha=1000;  % alpha   - 惩罚因子
tol=1e-6;    % tol     - 收敛容差,是优化的停止准则之一,可以取 1e-6~5e-6
K=5;         % K       - 指定分解模态数
imf = pVMD(s,fs, alpha, K, tol);

上边代码中使用了pVMD函数,这是笔者封装的一个易用的VMD画图函数,其介绍可以看之前的文章。分解结果如下:

也可以在调用pVMDandFFT函数绘制imf分量与频谱对比图。

imf = pVMDandFFT(s,fs, alpha, K, tol); %函数见此处:https://zhuanlan.zhihu.com/p/396775790

当然使用MATLAB内置的vmd函数也是可以的,但是要注意输入FastICA的imf分量的行列方向,需要保证imf是每一行为一个分量。

2.FastICA盲源分离

以类EMD分解得到的imf分量作为输入,进行ICA混解。

在这里一定要算出混合矩阵A(忘记概念的同学可以看上一篇)。

%% 3.ICA混解并绘制混解后的图像
numOfIC = 0;  % 需要提取的独立成分数目,如果不指定数目,则输入0
g = 'pow3';   % 使用的非线性函数类型,可选'pow3', 'tanh', 'gauss'
[icasig, A, W] = pFastICA(imf, numOfIC, g);

此时,我们将会得到如下分解结果:

从FastICA盲源分离结果可以推断独立成分5是噪声分量,但是在自动化实现降噪的代码中,我们自然希望对噪声分量的判断是不需要人为介入的。此时我们引入一个功率谱熵阈值判断方法来实现。

3.功率谱熵阈值判断

在之前的文章(Mr.看海:【熵与特征提取】基于“信息熵”的特征指标及其MATLAB代码实现(功率谱熵、奇异谱熵、能量熵))中讲到,信息熵越大,代表不确定性越大,信号中包含的信息量越少,信号越无秩序/越接近于白噪声,则信息熵越大。

由于盲源分离本身的特性,分离出来的独立成分中,最多包含一个高斯分量,也就是噪声分量。

所以我们只需要判断几个独立成分的功率谱熵中,是否有数值相较于其他分量大得多的成分,就是噪声分量。

也就是找到功率谱熵中的离群值。

这里我们阈值的计算标准是:阈值=功率谱熵均值+功率谱熵的标准差

我们将大于阈值的独立成分直接赋值为0。

计算结果如下图,可以看到噪声分量被识别了出来。

4.重构滤波信号

不知道大家是否还记得FastICA方法的重要性质之一:输出信号幅度的不确定性。FastICA分解得到的独立成分是不能像类EMD分解得到的imf那样直接相加进行重构的。

但是FastICA也有自己的重构方法,就是使用上边提到的混合矩阵A。重构公式为:

X=A∗icasig

上式中的icasig就是经过处理过后的独立成分,对于大于阈值的成分,我们已经将其幅值全部置0;X就是重构结果,也就是该方法中的滤波结果。

此时得到的滤波结果为:

可以看出,滤波效果还是颇为不错的,经计算此时的信噪比为15.9dB。

二、算法流程图

将上述算法梳理成流程图如下,当然vmd分解这步是可以替换成其他分解算法的,另外功率谱熵也可以换成其他熵值指标。

三、MATLAB实现

为了方便大家使用,按照惯例笔者对上述流程进行了封装。封装的流程就是上述流程图中红框内的部分,之所以没有将vmd也一并封装进去,是为了大家方便替换其他的模态分解算法。

封装后的函数只需要将分解好的imf变量导入,即可一行代码实现滤波:

reSig = filEMDsICA(imf);  % 调用filEMDsICA函数实现滤波

经实测,这个方法的滤波效果还是很不错的。

我为大家提供了完整的演示案例,可以一键实现下述图像和滤波结果的输出:

要你做的,基本就只需替换数据啦!

需要上边这个函数文件以及测试代码的同学,可以在公众号 khscience(看海的城堡)中回复“ICA滤波”获取。

扩展阅读

Mr.看海:【滤波专题-第1篇】数字滤波器15分钟入门!——这可能是最简单的FIR有限冲激响应滤波讲解

Mr.看海:【滤波专题-第2篇】数字滤波器15分钟入门!——这可能是最简单的IIR无限冲激响应滤波讲解

Mr.看海:【滤波专题-第3篇】IIR无限冲激响应和FIR有限冲激响应数字滤波器有什么区别?

Mr.看海:【滤波专题-第4篇】滤波器滤波效果的评价指标(信噪比SNR、均方误差MSE、波形相似参数NCC)

Mr.看海:【滤波专题-第5篇】FIR、IIR滤波器设计及MATLAB实现

Mr.看海:【滤波专题-第6篇】小波阈值去噪方法看这一篇就明白了~(附MATLAB实现)

Mr.看海:【滤波专题-第7篇】“类EMD”算法分解后要怎样使用(3)——EMD降噪方法及MATLAB代码实现

Mr.看海:【盲源分离】快速理解FastICA算法(附MATLAB绘图程序)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试环境搭建整套大数据系统(十一:docker部署superset,无密码登录嵌入html,http改为https)

一:安装docker 参考文档 https://blog.csdn.net/weixin_43446246/article/details/136554243 二:安装superset 下载镜像。 拉取镜像(docker pull amancevice/superset) 查看镜像是否下载完成(docker images&#xf…

如何检测无源晶振过驱?晶振过驱怎么办?

无源晶振(Passive Crystal Oscillator)是一种使用晶体元件来生成稳定频率的振荡器,它不像有源振荡器(如时钟芯片)那样需要外部电源。检测无源晶振是否过驱通常需要通过测量其输出波形和频率,与期望的规格进行比较。 如何检测无源晶振过驱: …

Linux——线程池

线程池的概念 线程池也是一种池化技术,可以预先申请一批线程,当我们后续有任务的时候就可以直接用,这本质上是一种空间换时间的策略。 如果有任务来的时候再创建线程,那成本又要提高,又要初始化,又要创建数…

Gatling压力测试Springboot项目

Gatling压力测试Springboot项目 一、指定Java Spring 项目作为测试项二、下载Gatling三、配置测试代码四、打开bin目录下的gatling.bat文件进行测试 一、指定Java Spring 项目作为测试项 这里给出一个简单的示例:代码链接 下载maven依赖以后在8080端口运行这个项目…

Windows10+tensorrt+python部署yolov5

一、安装cuda 打开NVIDIA控制面板 —>帮助—>系统信息—>组件,找到驱动版本新,我这边是11.2, 然后去CUDA Toolkit Archive | NVIDIA Developer下载对应版本的CUDA,根据查看的CUDA型号确定对应的cuda Toolhit版本&#…

分析基于解析物理模型的E模式p沟道GaN高电子迁移率晶体管(H-FETs)

来源:Analyzing E-Mode p-Channel GaN H-FETs Using an Analytic Physics-Based Compact Mode(TED 24年) 摘要 随着近期对用于GaN互补技术集成电路(ICs)开发的p沟道GaN器件研究兴趣的激增,一套全面的模型…

初识Spring MVC

什么是Spring MVC? 官方给的解释是 Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的 正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC" 注:Severlet是…

DragDiffusion的Win10部署方案

DragDiffusion就不再过多介绍。这是之前的一个Win10部署工作。文章链接这里就不贴了。 源代码 直接上Win10改好的程序下载链接:CSDN下载 Github我没有上传,因为实在是太大了。。。 接下来,您需要下载好上述文件,同时您需要去G…

【技术类-04】python实现docx表格文字和段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

作品展示: 背景需求: 把python实现docx表格文字和段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)合并在一起统计数量 【技术类-02】python实现docx段落文字的“手动换行符(软回车&a…

2024年AI辅助研发:科技创新的引擎

CSND - 个人主页:17_Kevin-CSDN博客 收录专栏:《人工智能》 技术进展 进入2024年,人工智能(AI)在科技界和工业界的焦点地位更加巩固,其在辅助研发领域的技术进步尤为显著。深度学习技术的突飞猛进使得数据分…

数据结构 之 优先级队列(堆) (PriorityQueue)

🎉欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ 🎉感谢各位读者在百忙之中抽出时间来垂阅我的文章,我会尽我所能向的大家分享我的知识和经验📖 🎉希望我们在一篇篇的文章中能够共同进步!!&…

Mysql:行锁,间隙锁,next-key锁?

注:以下讨论基于InnoDB引擎。 文章目录 问题引入猜想1:只加了一行写锁,锁住要修改的这一行。语义问题数据一致性问题 猜想2:要修改的这一行加写锁,扫描过程中遇到其它行加读锁猜想3:要修改的这一行加写锁&…

怎么利用视频截取gif?三步在线转换gif

在当今的社交媒体和网络世界中,GIF图像已经成为了一种非常受欢迎的表达方式。它们以简洁、循环播放的形式,能够生动地展示一系列图像的变化。你可能好奇,如何从视频中提取GIF图呢?很简单,使用视频转gif工具手机、pc均可…

GaN HEMTs在电力电子应用中的交叉耦合与基板电容分析与建模

来源:Analysis and Modeling of Cross-Coupling and Substrate Capacitances in GaN HEMTs for Power-Electronic Applications( TED 17年) 摘要 本文提出了一种考虑了基板电容与场板之间交叉耦合效应的场板AlGaN/GaN高电子迁移率晶体管(HE…

RabbitMQ学习总结-基础篇

1..RabbitMQ 本身是一个消息中间件,在服务应用中,可解决高性能,高并发,高应用的问题,极大程度上解决了应用的性能问题。 2.MQ的使用分为生产者和消费者,生产者生产消息,消费者去消费消息。 3.…

力扣每日一题 卖木头块 线性DP

Problem: 2312. 卖木头块 文章目录 思路复杂度Code 思路 👨‍🏫 灵神题解 复杂度 时间复杂度: O ( n m ( m n ) ) O(nm(mn)) O(nm(mn)) 空间复杂度: O ( n m ) O(nm) O(nm) Code class Solution {public long sellingWood(int n, int m, int…

AI基础知识问答(1)

1.什么是线性判别分析法(FDA)? 线性判别分析是一种对于监督数据降维的经典方法。通过对数据标准化,求得类内散度矩阵和类间散度矩阵,寻找一个投影矩阵W,使得同类样例的投影点尽可能接近,异类样…

基于高德地图JS API实现Vue地图选点组件

基于高德地图JS API2.0实现一个搜索选择地点后返回给父组件位置信息的功能,同时可以进行回显 目录 1 创建key和秘钥1.1 登录高德地图开放平台1.2 创建应用1.3 绑定服务创建秘钥 2 使用组件前准备2.1 导入loader2.2 在对应的组件设置秘钥2.3 引入css样式 3 功能实现…

Leetcode 1514 概率最大的路径

文章目录 1. 题目描述2. 我的尝试 1. 题目描述 原题链接:Leetcode 1514 概率最大的路径 给你一个由 n 个节点(下标从 0 开始)组成的无向加权图,该图由一个描述边的列表组成,其中 edges[i] [a, b] 表示连接节点 a 和 b…

HTML静态网页成品作业(HTML+CSS)——非遗昆曲介绍设计制作(1个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…