Matlab深度学习进行波形分割(二)

news2024/11/17 10:04:04

🔗 运行环境:Matlab

🚩 撰写作者:左手の明天

🥇 精选专栏:《python》

🔥  推荐专栏:《算法研究》

🔐#### 防伪水印——左手の明天 ####🔐

💗 大家好🤗🤗🤗,我是左手の明天!好久不见💗

💗今天分享Matlab深度学习——波形分割💗

📆  最近更新:2024 年 01 月 15 日,左手の明天的第 312 篇原创博客

📚 更新于专栏:matlab

🔐#### 防伪水印——左手の明天 ####🔐


🚩接上上一篇文章 详解Matlab深度学习进行波形分割

使用滤波后的 ECG 信号训练网络

使用与以前相同的网络架构基于滤波后的 ECG 信号训练 LSTM 网络。

if actionFlag == "Train networks"
    filteredNet = trainNetwork(filteredTrainSignals,trainLabels,layers,options);
end

信号预处理将训练准确度提高到 80% 以上。

对滤波后的 ECG 信号进行分类

用更新后的 LSTM 网络对预处理后的测试数据进行分类。

predFilteredTest = classify(filteredNet,filteredTestSignals,'MiniBatchSize',50);

将分类性能可视化为混淆矩阵。

figure
confusionchart([testLabels{:}],[predFilteredTest{:}],'Normalization','row-normalized');

简单的预处理将 T 波分类提高了约 15%,将 QRS 复波和 P 波分类提高了约 10%。

ECG 信号的时频表示

时间序列数据成功分类的常见方法是提取时频特征并将其馈送到网络而不是原始数据。然后,网络同时跨时间和频率学习模式。

傅里叶同步压缩变换 (FSST) 计算每个信号采样的频谱,因此对于需要保持与原始信号相同的时间分辨率的分割问题,它是可直接使用的理想选择。使用 fsst 函数检查一个训练信号的变换。指定长度为 128 的凯塞窗以提供足够的频率分辨率。

data =  preview(trainDs);
figure
fsst(data{1,1},250,kaiser(128),'yaxis')

基于感兴趣的频率范围 [0.5, 40] Hz 计算训练数据集中每个信号的 FSST。将 FSST 的实部和虚部视为单独的特征,并将两个分量都馈送到网络中。而且,通过减去均值并除以标准差来标准化训练特征。使用变换后的数据存储、extractFSSTFeatures 辅助函数和 tall 函数来并行处理数据。

fsstTrainDs = transform(trainDs,@(x)extractFSSTFeatures(x,250));
fsstTallTrainSet = tall(fsstTrainDs);
fsstTrainData = gather(fsstTallTrainSet);
Evaluating tall expression using the Parallel Pool 'Processes':
- Pass 1 of 1: 0% complete
Evaluation 0% complete

- Pass 1 of 1: 4% complete
Evaluation 4% complete

- Pass 1 of 1: 8% complete
Evaluation 8% complete

- Pass 1 of 1: 12% complete
Evaluation 12% complete

- Pass 1 of 1: 17% complete
Evaluation 17% complete

- Pass 1 of 1: 21% complete
Evaluation 21% complete

- Pass 1 of 1: 25% complete
Evaluation 25% complete

- Pass 1 of 1: 29% complete
Evaluation 29% complete

- Pass 1 of 1: 33% complete
Evaluation 33% complete

- Pass 1 of 1: 38% complete
Evaluation 38% complete

- Pass 1 of 1: 42% complete
Evaluation 42% complete

- Pass 1 of 1: 46% complete
Evaluation 46% complete

- Pass 1 of 1: 50% complete
Evaluation 50% complete

- Pass 1 of 1: 54% complete
Evaluation 54% complete

- Pass 1 of 1: 58% complete
Evaluation 58% complete

- Pass 1 of 1: 62% complete
Evaluation 62% complete

- Pass 1 of 1: 67% complete
Evaluation 67% complete

- Pass 1 of 1: 71% complete
Evaluation 71% complete

- Pass 1 of 1: 75% complete
Evaluation 75% complete

- Pass 1 of 1: 79% complete
Evaluation 79% complete

- Pass 1 of 1: 83% complete
Evaluation 83% complete

- Pass 1 of 1: 88% complete
Evaluation 88% complete

- Pass 1 of 1: 92% complete
Evaluation 92% complete

- Pass 1 of 1: 96% complete
Evaluation 96% complete

- Pass 1 of 1: 100% complete
Evaluation 100% complete

- Pass 1 of 1: Completed in 2 min 39 sec
Evaluation 100% complete

Evaluation completed in 2 min 39 sec

对测试数据重复此过程。

fsstTTestDs = transform(testDs,@(x)extractFSSTFeatures(x,250));
fsstTallTestSet = tall(fsstTTestDs);
fsstTestData = gather(fsstTallTestSet);
Evaluating tall expression using the Parallel Pool 'Processes':
- Pass 1 of 1: Completed in 1 min 8 sec
Evaluation completed in 1 min 8 sec

调整网络架构

修改 LSTM 架构,使网络接受每个采样的频谱,而不是单一值。检查 FSST 的大小以查看频率的数量。

size(fsstTrainData{1,1})
ans = 1×2

          40        5000

指定一个包含 40 个输入特征的 sequenceInputLayer。保持其余网络参数不变。

layers = [ ...
    sequenceInputLayer(40)
    lstmLayer(200,'OutputMode','sequence')
    fullyConnectedLayer(4)
    softmaxLayer
    classificationLayer];

使用 ECG 信号的 FSST 训练网络

使用变换后的数据集训练更新后的 LSTM 网络。

if actionFlag == "Train networks"
    fsstNet = trainNetwork(fsstTrainData(:,1),fsstTrainData(:,2),layers,options);
end

使用时频特征提高了训练准确度,现在已超过 90%。

用 FSST 对测试数据进行分类

使用更新后的 LSTM 网络和提取的 FSST 特征,对测试数据进行分类。

predFsstTest = classify(fsstNet,fsstTestData(:,1),'MiniBatchSize',50);

将分类性能可视化为混淆矩阵。

confusionchart([fsstTestData{:,2}],[predFsstTest{:}],'Normalization','row-normalized');

 

与原始数据结果相比,使用时间频率表示法将 T 波分类提高了约 25%,将 P 波分类提高了约 40%,将 QRS 复波分类提高了 30%。

使用 signalMask 对象将网络预测与单个 ECG 信号的真实值标签进行比较。绘制感兴趣的区域时忽略 "n/a" 标签。

testData = gather(tall(testDs));
Evaluating tall expression using the Parallel Pool 'Processes':
- Pass 1 of 1: Completed in 2.1 sec
Evaluation completed in 2.2 sec
Mtest = signalMask(testData{1,2}(3000:4000));
Mtest.SpecifySelectedCategories = true;
Mtest.SelectedCategories = find(Mtest.Categories ~= "n/a");

figure
subplot(2,1,1)
plotsigroi(Mtest,testData{1,1}(3000:4000))
title('Ground Truth')

Mpred = signalMask(predFsstTest{1}(3000:4000));
Mpred.SpecifySelectedCategories = true;
Mpred.SelectedCategories = find(Mpred.Categories ~= "n/a");

subplot(2,1,2)
plotsigroi(Mpred,testData{1,1}(3000:4000))
title('Predicted')
 

结论

此示例说明信号预处理和时频分析是如何提高 LSTM 波形分割性能的。带通滤波和基于傅里叶的同步压缩使所有输出类的平均改进程度从 55% 提高到 85% 左右。

参考资料

[1] McSharry, Patrick E., et al."A dynamical model for generating synthetic electrocardiogram signals."IEEE® Transactions on Biomedical Engineering.Vol. 50, No. 3, 2003, pp. 289–294.

[2] Laguna, Pablo, Raimon Jané, and Pere Caminal."Automatic detection of wave boundaries in multilead ECG signals:Validation with the CSE database."Computers and Biomedical Research.Vol. 27, No. 1, 1994, pp. 45–60.

[3] Goldberger, Ary L., Luis A. N. Amaral, Leon Glass, Jeffery M. Hausdorff, Plamen Ch.Ivanov, Roger G. Mark, Joseph E. Mietus, George B. Moody, Chung-Kang Peng, and H. Eugene Stanley."PhysioBank, PhysioToolkit, and PhysioNet:Components of a New Research Resource for Complex Physiologic Signals."Circulation.Vol. 101, No. 23, 2000, pp. e215–e220. [Circulation Electronic Pages; http://circ.ahajournals.org/content/101/23/e215.full].

[4] Laguna, Pablo, Roger G. Mark, Ary L. Goldberger, and George B. Moody."A Database for Evaluation of Algorithms for Measurement of QT and Other Waveform Intervals in the ECG."Computers in Cardiology.Vol.24, 1997, pp. 673–676.

[5] Sörnmo, Leif, and Pablo Laguna."Electrocardiogram (ECG) signal processing."Wiley Encyclopedia of Biomedical Engineering, 2006.

[6] Kohler, B-U., Carsten Hennig, and Reinhold Orglmeister."The principles of software QRS detection."IEEE Engineering in Medicine and Biology Magazine.Vol. 21, No. 1, 2002, pp. 42–57.

[7] Salamon, Justin, and Juan Pablo Bello."Deep convolutional neural networks and data augmentation for environmental sound classification."IEEE Signal Processing Letters.Vol. 24, No. 3, 2017, pp. 279–283.

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

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

相关文章

Ubuntu 22.04 安装prometheus

服务器监控和报警软件有很多,为什么我们会选择Prometheus而不是其他软件呢? 因为它有以下优点: 自带简易web监控页面,用户可以很方便地查看监控数据和使用仪表盘。能实时收集数据并根据自定义警报规则推送告警;具有丰…

企业如何找到合适的内容策略?媒介盒子分享

企业如果想要抢先占领用户心智的话,媒介盒子认为首先需要找到合适的内容策略,好的内容能够与消费者建立双向信任的关系,一种让消费者对品牌的好感度提升,进而成为品牌的忠实用户,接下来媒介盒子就来和大家聊聊&#xf…

Selenium Grid - 多台计算机上并行运行

当你希望在多台计算机上并行运行测试?Selenium Grid可以帮你实现。 官方文档原文: https://www.selenium.dev/documentation/grid/getting_started/ Selenium Grid允许通过将客户端发送的命令路由到远程浏览器实例,在远程机器上执行WebDriv…

mac上搭建 hadoop 伪集群

1. hadoop介绍 Hadoop是Apache基金会开发的一个开源的分布式计算平台,主要用于处理和分析大数据。Hadoop的核心设计理念是将计算任务分布到多个节点上,以实现高度可扩展性和容错性。它主要由以下几个部分组成: HDFS (Hadoop Distributed Fi…

Kafka生产消费流程

Kafka生产消费流程 1.Kafka一条消息发送和消费的流程图(非集群) 2.三种发送方式 准备工作 创建maven工程&#xff0c;引入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.3.1…

【MATLAB】 HANTS滤波算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 HANTS滤波算法是一种时间序列谐波分析方法&#xff0c;它综合了平滑和滤波两种方法&#xff0c;能够充分利用遥感图像存在时间性和空间性的特点&#xff0c;将其空间上的分布规律和时间上的变化规律联系起来…

【MySQL性能优化】- MySQL结构与SQL执行过程

MySQL结构与SQL执行过程 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学习心得&#xff0c;欢迎指正…

BPMN 2.0 相关定义概要描述

官方文档&#xff1a;https://www.omg.org/spec/BPMN/2.0/ BPMN 2.0 &#xff08;BPMN&#xff0c;业务流程模型和标记&#xff0c;Business Process Model And Notation&#xff09; 是一种业务流程建模和执行的标准&#xff0c;它使用 XML 格式来描述业务流程。 以下是 BPM…

Eureka 本机集群实现

距离上次发布博客已经一年多了&#xff0c;主要就是因为考研&#xff0c;没时间学习技术的内容&#xff0c;现在有时间继续完成关于代码方面的心得&#xff0c;希望跟大家分享。 今天在做一个 Eureka 的集群实现&#xff0c;我是在本电脑上跑的&#xff0c;感觉这个挺有意思&a…

alibaba.item_get API:电商行业中的数据驱动决策支持

alibaba.item_get API 是阿里巴巴提供的一个用于获取商品详情的接口。在电商行业中&#xff0c;数据驱动的决策支持是非常重要的&#xff0c;而这个 API 可以帮助你获取到商品的各种详细信息&#xff0c;从而为你的决策提供支持。 具体来说&#xff0c;通过使用 alibaba.item_…

可以部署到Vercel的一些有趣项目

博客地址 可以部署到Vercel的一些有趣项目-雪饼分享几款可以部署在Vercel上的项目&#xff0c;更新中~ 免费的域名要不要&#xff1f; 如果你还不会将项目部署到Vercel&#xff0c;或是绑定域名建议阅读 将项目部署到Vercel&#xff0c;并绑定域名 Excalidraw 白板 一个开源的…

Netty通信中的粘包半包问题(二)

在前面我们已经分析过Netty会出现的粘包半包问题&#xff0c;还没看过前面的博客的&#xff0c;可以先去看下之前写的博客 Netty通信中的粘包半包问题(一) 解放方式:特殊分隔符解决,在每个报文后面加上一个特殊分隔符&#xff0c;以此来告诉服务端每个报文的数据结界是什么 1.…

RIP【新华三与华为区别】

【介绍】 rip分为rip 1 与 rip 2 &#xff0c;rip 2 是对 rip 1 的一种升级&#xff0c;rip 2 可以进行认证等功能 【命令】 新华三&#xff1a; [HC3-R1] rip #启用rip [HC3-R1-rip] version 2 #告知rip 版本号 [HC3-R1-rip] network 192.168.1.0 #宣告其网段 [HC3-R1-rip] …

13、Redis高频面试题

1、项目中为什么用Redis 我们项目中之所以选择Redis&#xff0c;主要是因为Redis有下面这些优点&#xff1a; 操作速度快&#xff1a;Redis的数据都保存在内存中&#xff0c;相比于其它硬盘类的存储&#xff0c;速度要快很多数据类型丰富&#xff1a;Redis支持 string&#x…

STM32蓝牙小车、红外循迹小车、超声波避障小车项目设计

一、前言 本文旨在分享我学习STM32的过程中&#xff0c;为了强化学习成果&#xff0c;试着制作一些实训项目。最开始做的就是STM32蓝牙小车、STM32红外循迹小车、STM32超声波避障小车。 相信看完本文的你&#xff0c;一定可以亲手制作一辆属于自己的智能小车&#xff01; 注&am…

HTML--表单

睡不着就看书之------------------------ 表单 作用&#xff1a;嗯~~动态页面需要借助表单实现 表单标签&#xff1a; 主要分五种&#xff1a; form&#xff0c;input&#xff0c;textarea&#xff0c;select&#xff0c;option 从外观来看&#xff0c;表单就包含以下几种&…

【已解决】丨Details: An error occurred while executing command: “host-status

Author&#xff1a;AXYZdong 硕士在读 工科男 有一点思考&#xff0c;有一点想法&#xff0c;有一点理性&#xff01; 定个小小目标&#xff0c;努力成为习惯&#xff01;在最美的年华遇见更好的自己&#xff01; CSDNAXYZdong&#xff0c;CSDN首发&#xff0c;AXYZdong原创 唯…

代码随想录 Leetcode18. 四数之和

题目&#xff1a; 代码&#xff08;首刷看解析 2024年1月15日&#xff09;&#xff1a; class Solution { public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> result;sort(nums.begin(), nums.end(…

谷粒商城-商品服务-品牌管理-阿里云云存储+JSR303数字校验+统一异常处理

阿里云云存储OSS 分布式系统上传文件 分布式系统上传文件 单体应用上传&#xff1a;上传文件到服务器&#xff0c;想获取文件时再向服务器发请求获取文件。 分布式系统上传&#xff1a; 因为有多台服务器&#xff0c;为防止负载均衡导致获取文件时没找到对应的服务器&#xf…

stack,queue和prioriy_queue

MySTL stack和queue template <class T, class Container deque<T> > class queue;template <class T, class Container deque<T> > class stack;选择适配器的宗旨是要能达到预想的功能 queue——只能使用list和deque stack——可以使用vector和…