基于盲源分离和半盲源分离的心电信号伪影消除方法(MATLAB 2018)

心电信号是通过测量放置在人体皮肤上的电极之间的电位差来获取的,其本身具有信号微弱、频段低、不稳定等特性。因此ECG信号在实际采集时极易受到不同噪声的影响,这会造成心电图本身的波形形态特征的失真,从而导致错误诊断和对患者的不当治疗。由于信号采集的环境、方法和设备等因素的干扰,影响心电信号质量的噪声主要包括:基线漂移、工频干扰、肌电噪声以及电极运动伪影。

基线漂移是一种低频噪声,主要由人体呼吸、身体运动、电极接触不良和皮肤与电极之间阻抗变化引起。漂移的幅度和持续时间取决于电极特性、电解质特性、皮肤阻抗和身体运动,通常基线漂移会造成心电信号ST段的失真,从而导致对心肌梗塞、Brugada综合征等与ST段异常相关的错误诊断。

工频干扰是一种窄带干扰噪声,主要由心电信号采集过程中50/60Hz电源线的电感和电容耦合引起。工频干扰与ECG信号混合会扭曲信号的形态,导致P波失真,从而导致对心房扩大和房颤的错误诊断。

肌电噪声是由肌肉在收缩期间的电活动或由于突然的身体运动引起的,其带宽通常在5-2000Hz之间,平均幅度为心电信号峰-峰值10%的水平,持续时间约为50ms,因此会导致ECG信号的局部波形失真。

电极运动伪影是由电极与皮肤之间阻抗随着电极运动变化引起的瞬时基线变化,其幅度能达到ECG信号峰-峰值的500%,持续时间约为300-500ms。电极运动伪影会严重干扰可穿戴式心电设备的心电信号采集,其较大的波动性和随机性会严重影响可穿戴设备采集到的心电信号质量。

鉴于此,采用盲源分离和半盲源分离方法对心电信号伪影消除,运行环境为MATLAB 2018。

clc;clear all;close all;
X_load=load("Ex1.mat");
X_load=X_load.X;
%% part a
X =X_load';
for dim =1:3X(:,dim) = X(:,dim) - sum(X(:,dim))/(size(X,1)); 
end
figure()
subplot (3,3,[1:6])
scatter3(X(:,1),X(:,2),X(:,3))
title("Visualized Data in 3D domain")
xlabel('X'); ylabel("Y"); zlabel("Z");
subplot(3,3,7)
scatter(X(:,1),X(:,2))
title("Visualized Data in 2D x-y plane")
xlabel('X'); ylabel("Y");
grid on
subplot(3,3,8)
scatter(X(:,1),X(:,3))
title("Visualized Data in 2D x-z plane")
xlabel('X'); ylabel("Z");
grid on
subplot(3,3,9)
scatter(X(:,2),X(:,3))
title("Visualized Data in 2D y-z plane")
xlabel('Y'); ylabel("Z");
grid on
%% part B.1 
Covariance_mat = cov(X)
[V,D] = eig(Covariance_mat)
D_wh = D^(-1/2);
C_final = D_wh*V'*Covariance_mat*V*D_wh;
kernel=-1:0.001:1;
figure()
subplot (3,3,[1:6])
scatter3(X(:,1),X(:,2),X(:,3));
hold on
plot3(kernel*V(1,2),kernel*V(2,2),kernel*V(3,2),'linewidth',2.5)
hold on
plot3(kernel*V(1,1),kernel*V(2,1),kernel*V(3,1),'linewidth',2.5)
hold on
plot3(40*kernel*V(1,3),40*kernel*V(2,3),40*kernel*V(3,3),'linewidth',2.5)
title("Visualized Data with eigen vectors")
xlabel("X"); ylabel("Y"); zlabel("Z");
subplot(3,3,7)
scatter3(X(:,1),X(:,2),X(:,3));
hold on
plot3(kernel*V(1,2),kernel*V(2,2),kernel*V(3,2),'linewidth',2.5)
hold on
plot3(kernel*V(1,1),kernel*V(2,1),kernel*V(3,1),'linewidth',2.5)
hold on
plot3(40*kernel*V(1,3),40*kernel*V(2,3),40*kernel*V(3,3),'linewidth',2.5)
title("Visualized Data with eigen vectors")
xlabel("X"); ylabel("Y"); zlabel("Z");
subplot(3,3,8)
scatter3(X(:,1),X(:,2),X(:,3));
hold on
plot3(kernel*V(1,2),kernel*V(2,2),kernel*V(3,2),'linewidth',2.5)
hold on
plot3(kernel*V(1,1),kernel*V(2,1),kernel*V(3,1),'linewidth',2.5)
hold on
plot3(40*kernel*V(1,3),40*kernel*V(2,3),40*kernel*V(3,3),'linewidth',2.5)
title("Visualized Data with eigen vectors")
xlabel("X"); ylabel("Y"); zlabel("Z");
subplot(3,3,9)
scatter3(X(:,1),X(:,2),X(:,3));
hold on
plot3(kernel*V(1,2),kernel*V(2,2),kernel*V(3,2),'linewidth',2.5)
hold on
plot3(kernel*V(1,1),kernel*V(2,1),kernel*V(3,1),'linewidth',2.5)
hold on
plot3(40*kernel*V(1,3),40*kernel*V(2,3),40*kernel*V(3,3),'linewidth',2.5)
title("Visualized Data with eigen vectors")
xlabel("X"); ylabel("Y"); zlabel("Z");
%% part B.2
Y = transpose(D_wh*V'*X'); 
Covariance_matY =cov(Y)
figure();
scatter3(Y(:,1),Y(:,2),Y(:,3));
title('Visualization of whitened Data');
xlabel('X');ylabel('Y');zlabel('Z'); 
%% Part C.1
COEF_pca = pca(X);
figure()
scatter3(X(:,1),X(:,2),X(:,3));
hold on
plot3(4*kernel*COEF_pca(1,2),kernel*COEF_pca(2,2),kernel*COEF_pca(3,2),'linewidth',2)
hold on
plot3(4*kernel*COEF_pca(1,1),kernel*COEF_pca(2,1),kernel*COEF_pca(3,1),'linewidth',2)
hold on
plot3(40*kernel*COEF_pca(1,3),40*kernel*COEF_pca(2,3),40*kernel*COEF_pca(3,3),'linewidth',2)
title('Visualized Data with eigen vectors (matlab)');
xlabel('X');ylabel('Y');zlabel('Z');
%% Part C.2
figure()
Y_matlab = COEF_pca'*X';
scatter3(Y_matlab(1,:),Y_matlab(2,:),Y_matlab(3,:));
title('Visuallization of whitened Data (using matlab pca)');
xlabel('X');ylabel('Y');zlabel('Z');
covarianceY_matlab =cov(Y_matlab')
%%
%完整代码可通过知乎学术咨询获得:https://www.zhihu.com/consult/people/792359672131756032?isMe=1
[U_svd,S_svd,V_svd] = svd(X);

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

工学博士,担任《Mechanical System and Signal Processing》《中国电机工程学报》《控制与决策》等期刊审稿专家,擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

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

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

相关文章

2024年5月软考成绩什么时候出?附查询方式

2024年5月软考成绩查询时间及查询方式: 查询时间:预计在2024年7月上旬进行。 查询方式: 方式一:登陆中国计算机技术职业资格网(www.ruankao.org.cn),点击报名系统,输入注册账号和…

echart图表legend每列固定宽度

修改前: 修改后: 关键代码: 设置一个背景并使之透明,否则宽度不生效,配合formatter使用 formatter: {a|{name}},rich:{a: {width: 48,fontSize: 12,backgroundColor: "rgba(11, 39, 52, 0)" // 关键代码&a…

高效编写大模型 Prompt 提示词,解锁 AI 无限创意潜能

随着 ChatGPT 的出现,AI 成为新的焦点,有人说过“未来 50%的工作将是提示词工作”,目前很多公司也在开始招聘 Prompt 提示词工程师。Prompt(提示词)成为了连接创意与技术的桥梁,它不仅是简单的指令&#xf…

2024年第七届管理、经济和社会科学国际会议(ICMESS 2024)

2024年第七届管理、经济和社会科学国际会议(ICMESS 2024) 会议简介 2024年第七届管理、经济和社会科学国际会议(ICMESS 2024)将为“管理、经济与社会发展”等最新研究领域的研究人员、专家、学者和行业专家提供一个平台,介绍他们的最新研究…

Python OCR 文字检测使用模型:读光-文字检测-DBNet行检测模型-中英-通用领域

介绍 什么是OCR? OCR是“Optical Character Recognition”的缩写,中文意为“光学字符识别”。它是一种技术,可以识别和转换打印在纸张或图像上的文字和字符为机器可处理的格式,如计算机文本文件。通过使用OCR技术,可…

Vue:快速上手

一、简介 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,…

信息化教推动数字化学校建设

在数字化学校建造的过程中,许多学校都疏忽了运用这些网络科技渠道的教师和学生,一味的追求学校数字化、智能化建造,没有从根本上意识到教育信息化的出现者或者说体现者的重要性,因而,建造数字化学校,前进教…

微服务架构-聚合设计模式

微服务架构-聚合设计模式 聚合器(Aggregator)设计模式:用于将来自多个微服务的数据,聚合成一个统一的响应,提供给客户端。 聚合模式的核心思想:是使用一个聚合器服务(Aggregator Service&#…

你对仲裁裁决不服怎么办?我教你四个狠招!

你对仲裁裁决不服怎么办?我教你四个狠招! 这个标题是什么意思呢?也就是说,当你(或用人单位)向劳动仲裁委提出仲裁申请后,但劳动仲裁结果没有维护你的权益,或者你不满意,…

[STM32+HAL]LD-1501MG舵机二次开发指南

一、准备材料 核心板:STM32F407ZGT6 舵机:LD-1501MG数字舵机 控制器:24路PWM舵机控制器 二、HAL库配置 开启串口与控制器通信 三、Keil填写代码 1、Servo.c #include "Servo.h" #include "usart.h"uint8_t Message…

python内存马学习

python内存马学习 python内存马学习 python内存马学习环境搭建和复现分析payloadFlask 请求上下文管理机制bypass高版本flask内存马的利用before_request**after_request** teardown_requesterrorhandler相关例题H&NCTF 2024 ezFlask python内存马 环境搭建和复现 from fl…

离大模型落地应用最近的工程化技术(RAG)

虽然大规模语言模型(LLM)在自然语言处理(NLP)方面表现出了其强大的文本生成和理解能力,但是它们在实际应用中仍然面临一些挑战,如处理大规模知识库和实时获取最新信息的能力,并且会产生幻觉。为…

「代码厨房大揭秘:Python性能优化的烹饪秘籍!」

哈喽,我是阿佑,上篇咱们讲了 Socket 编程 —— 探索Python Socket编程,赋予你的网络应用隐形斗篷般的超能力!从基础到实战,构建安全的聊天室和HTTP服务器,成为网络世界的守护者。加入我们,一起揭…

区块链系统开发测试----链码部署开发、系统开发验证

一.检查配置环境 检查虚拟机环境,确保有正在运行的Hyperledger Fabric区块链,并且其中chaincode_basic、credit_chaincode链码可以正常调用 查看chaincode_basic、credit_chaincode链码调用 二.开发征信链码代码 基于现有征信链码,开发征信…

Niantic利用Meta Llama让数字生物栩栩如生

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

华为机考入门python3--(26)牛客26-字符串排序

分类:字符串 知识点: 字符串是否仅由字母构成 my_str.isalpha() 字母列表按小写排序 letters.sort(keylambda x: x.lower()) 题目来自【牛客】 def custom_sort(input_str):letters []non_letters []for char in input_str:if char.isalpha…

【软件工程】【23.04】p1

关键字: 软件模型、提炼、加工表达工具、通信内聚、访问依赖、边界类交互分析、RUP核心工作流、首先测试数据流、软件验证过程、CMMI过程域分类工程类; 软件工程目的、功能需求是需求的主体、结构化方法、耦合、详细设计工具、类、类图、RUP采用用例技…

鲜花门店小程序开发流程:详细教程,让你轻松掌握

想要开发一款专属于自己鲜花门店的小程序吗?不知道从何开始?别担心,本文将为你提供详细的开发流程,帮助你轻松掌握。 1. 注册登录乔拓云网并进入操作后台 首先,你需要注册并登录乔拓云网,然后进入操作后台…

Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(三)通过web页面方式微调

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…

Amazon云计算AWS(一)

目录 一、基础存储架构Dynamo(一)Dynamo概况(二)Dynamo架构的主要技术 二、弹性计算云EC2(一)EC2的基本架构(二)EC2的关键技术(三)EC2的安全及容错机制 提供的…