Matlab深度学习进行波形分割(二)
🔗 运行环境: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% completeEvaluation 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×240 5000
指定一个包含 40 个输入特征的 sequenceInputLayer。保持其余网络参数不变。
layers = [ ...sequenceInputLayer(40)lstmLayer(200,'OutputMode','sequence')fullyConnectedLayer(4)softmaxLayerclassificationLayer];
使用 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.
相关文章:
Matlab深度学习进行波形分割(二)
🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 🔐#### 防伪水印——左手の明天 ####🔐 💗 大家…...
Markdown高级用法——mermaid
Markdown高级用法——mermaid 起初是写文章,其中有时序图流程图等一般是processOn或者draw.io画截图粘过去的,工作中又是腾讯文档,上面也能画图,但假如我笔记软件用语雀之类的又要把一张图反复粘贴,浪费内存ÿ…...
cf919Div2C题题目总结
Problem - C - Codeforces 这道题其实是一道数学题。 先看第一个变量,也就是我们要求的答案k的数量,但看k是很好确定它的限制条件的,要想均匀分成k份,n%k必须为0,有了k,我们再来看m,对于a(1)和…...
Pandas实战100例 | 案例 4: 数据选择和索引 - 选择特定的列和行
案例 4: 数据选择和索引 - 选择特定的列和行 知识点讲解 在 Pandas 中,选择数据是一个非常常见的操作。你可以选择特定的列或行,或者基于某些条件筛选数据。 示例代码 选择特定的列 # 选择单列 selected_column df[ColumnName]# 选择多列 selected…...
Netty-Netty实现自己的通信框架
通信框架功能设计 功能描述 通信框架承载了业务内部各模块之间的消息交互和服务调用,它的主要功能如下: 基于 Netty 的 NIO 通信框架,提供高性能的异步通信能力; 提供消息的编解码框架,可以实现 POJO 的序列化和反…...
【算法刷题】总结规律 算法题目第2讲 [234] 回文链表,因为深浅拷贝引出的bug
配合b站视频讲解食用更佳:https://www.bilibili.com/video/BV1vW4y1P7V7 核心提示:好几道题是处理有序数组的! 适合人群:考研/复试/面试 解决痛点:1. 刷了就忘 2.换一道相似的题就不会 学完后会输出:对每类题目的框架…...
RabbitMQ如何保证消息不丢失?
RabbitMQ如何保证消息不丢失? 消息丢失的情况 生产者发送消息未到达交换机生产者发送消息未到达队列MQ宕机,消息丢失消费者服务宕机,消息丢失 生产者确认机制 解决的问题:publisher confirm机制来避免消息发送到MQ过程中消失。…...
Random的使用
作用:生成伪随机数 1.导包:import java.util.Random 2.得到随机数对象:Random r new Random(); 3.调用随机数的功能获取随机数: 这里随机生成一个0-9的整数: int number r.nextInt(10); 实现指定区间的随机数&a…...
通过反射修改MultipartFile类文件名
1、背景 项目上有这样一个需求,前端传文件过来,后端接收后按照特定格式对文件进行重命名。(修改文件名需求其实也可以在前端处理的) //接口类似于下面这个样子 PosMapping("/uploadFile") public R uploadFile(List<MultipartFile> fil…...
Macos下修改Python版本
MacOS下修改Python版本 安装 查看本机已安装的Python版本:where python3 ~ where python3 /usr/bin/python3 /usr/local/bin/python3 /Library/Frameworks/Python.framework/Versions/3.12/bin/python3如果没有你想要的版本,去python官网下载安装包。…...
多种采购方式下,数智化招标采购系统建设解决方案
广发证券成立于1991年,是国内首批综合类证券公司,先后于2010年和2015年在深圳证券交易所及香港联合交易所主板上市。 多年来,广发证券在竞争激烈、复杂多变的行业环境中努力开拓、锐意进取,以卓越的经营业绩、持续完善的全面风险…...
Java选择排序
选择排序是一种简单直观的排序算法,其基本思想是每一轮从待排序的元素中选择最小(或最大)的元素,将其与当前位置的元素交换。选择排序的实现步骤可以简要概括为: 初始化: 遍历整个数组,将当前位…...
[足式机器人]Part3 机构运动学与动力学分析与建模 Ch00-1 坐标系与概念基准
本文仅供学习使用,总结很多本现有讲述运动学或动力学书籍后的总结,从矢量的角度进行分析,方法比较传统,但更易理解,并且现有的看似抽象方法,两者本质上并无不同。 2024年底本人学位论文发表后方可摘抄 若有…...
【金猿人物展】DataPipelineCEO陈诚:赋能数据应用,发挥未来生产力
陈诚 本文由DataPipelineCEO陈诚撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度趋势人物榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 我们处在一个“见证奇迹”的时代。在过去的20年间,我们见证了大数据技术快速发展所带…...
4D 毫米波雷达:智驾普及的新路径(二)
4 4D 毫米波的技术路线探讨 4.1 前端收发模块 MMIC:级联、CMOS、AiP 4.1.1 设计:级联、单芯片、虚拟孔径 4D 毫米波雷达的技术路线主要分为三种,分别是多级联、级联 虚拟孔径成像技术、以及 集成芯片。( 1 )多级…...
element plus自定义组件表单校验
方式一: import { formContextKey, formItemContextKey } from "element-plus";// 获取 el-form 组件上下文 const formContext inject(formContextKey, void 0); // 获取 el-form-item 组件上下文 const formItemContext inject(formItemContextKey, …...
C //练习 4-13 编写一个递归版本的reverse(s)函数,以将字符串s倒置。
C程序设计语言 (第二版) 练习 4-13 练习 4-13 编写一个递归版本的reverse(s)函数,以将字符串s倒置。 注意:代码在win32控制台运行,在不同的IDE环境下,有部分可能需要变更。 IDE工具:Visual S…...
DNS解析和主从复制
一、DNS名称解析协议 二、DNS正向解析 三、DNS主从复制 主服务器 从服务器...
光猫(无限路由器)插入可移动硬盘搭建简易版的NAS
1.场景分析 最近查询到了许多有关NAS的资料,用来替代百度云盘等确实有很多优势,尤其是具有不限速(速度看自己配置)、私密性好、一次投入后续只需要电费即可等优势。鉴于手上没有可以用的资源-cpu、机箱、内存等,查询到…...
SpringIOC之support模块GenericGroovyApplicationContext
博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…...
AI系统内存隔离实战:基于Cgroups与容器的多任务资源保障
1. 项目概述:内存隔离在AI系统中的核心价值最近在折腾一个叫openclaw-memory-isolation的项目,这名字一看就挺硬核的,直译过来是“开放之爪-内存隔离”。乍一听,你可能觉得这又是一个底层系统或者安全领域的项目,但结合…...
终极指南:如何用dnSpyEx完美调试和编辑.NET 8程序集
终极指南:如何用dnSpyEx完美调试和编辑.NET 8程序集 【免费下载链接】dnSpy Unofficial revival of the well known .NET debugger and assembly editor, dnSpy 项目地址: https://gitcode.com/gh_mirrors/dns/dnSpy 在当今快速发展的.NET生态中,…...
抖音无水印下载终极指南:douyin-downloader 快速入门与高效使用
抖音无水印下载终极指南:douyin-downloader 快速入门与高效使用 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallb…...
构建高可靠后端架构:从分层设计到可观测性的工程实践
1. 项目概述:一个为现代应用打造的“钢铁脊梁” 最近在折腾一个前后端分离的项目,后端服务部署在云上,前端是Vue,中间还夹杂着几个微服务。部署上线那几天,我几乎没怎么合眼,不是数据库连接池爆了ÿ…...
多智能体编排实战:从架构设计到生产部署的12周训练指南
1. 项目概述与核心价值最近在探索如何系统性地掌握多智能体编排技术时,我遇到了一个名为“Shadow Dojo”的开源项目。这个名字很有意思,“道场”一词本身就意味着一个需要持续练习、精进技艺的地方。这个项目将自己定位为“训练场”,目标非常…...
别再死记硬背了!用“餐厅经营”的比喻,5分钟搞懂批处理、分时和实时操作系统的区别
用餐厅经营智慧解锁操作系统核心概念 想象一下走进一家餐厅,菜单上的选择琳琅满目,服务员穿梭忙碌,厨房里热火朝天——这个看似普通的就餐场景,其实暗藏着计算机操作系统的精妙设计。就像餐厅需要高效协调顾客、服务员和厨师的关系…...
ARM GICv3中断控制器与ICC_CTLR寄存器详解
1. ARM GICv3中断控制器概述在ARM架构的嵌入式系统中,通用中断控制器(GIC)是管理硬件中断请求的核心组件。GICv3作为当前主流的版本,相比前代架构进行了多项重要改进,其中CPU接口寄存器组的增强尤为显著。作为系统开发者,深入理解…...
Seraphine:英雄联盟智能BP与战绩分析工具终极指南
Seraphine:英雄联盟智能BP与战绩分析工具终极指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 还在为英雄联盟排位赛的BP阶段感到焦虑吗?面对30秒的英雄选择倒计时,你是…...
AI编程助手配置同步工具:跨机器团队技能管理实践
1. 项目概述与核心价值最近在折腾AI编程工具链,发现一个挺有意思的现象:无论是Cursor、Claude Code,还是GitHub Copilot,它们都越来越依赖所谓的“技能”(Skills)或“上下文”(Contextÿ…...
questasim下载安装
questasim下载安装 https://zhuanlan.zhihu.com/p/682726018...
