简单的心电图信号分割方法

news2024/11/25 23:48:42

代码很简单,很容易看懂。

import pandas as pdimport matplotlib.pyplot as plt
#headers = ['Name', 'Age', 'Marks']df = pd.read_csv('samples-folder/samples2.csv')
df=df.drop(0)df=df.drop(1)# print(df)
if(len(df.columns) == 3):    df.columns = ['sample interval', 'signal', 'filtered']    # print(df)
    list1 = df.filtered    list2 = df.signal# print(list1)
else:    df.columns = ['sample interval', 'signal']    list1 = df.signal
plotting1 = []plotting2 = []for i in list1:    plotting1.append(float(i))
# for i in list2:#     plotting2.append(float(i))
# print(type(plotting[0]))

# print(plotting)# print(len(plotting))
length_df = len(df)
x = []for i in range(1,length_df+1):    x.append(i)    plt.figure(figsize=(300,70))
# plt.plot(x, plotting2, label ="Original ECG signal") # plt.show()   

plt.figure(figsize=(300,70))plt.plot(x[:], plotting1[:], label ="Filtered ECG signal")plt.show()
# plt.figure(figsize=(400,50))# plt.subplot(1,2,1)# plt.plot(x, plotting1)# plt.subplot(1,2,2)# plt.plot(x, plotting2)

# df.set_index('Marks').plot()
# plt.show()haar = []
count = 28flag = 1
i = 1while(i<= length_df):    j = i    #     if(i == 10000-count+1):#         for k in range(1, count):#             haar.append(-1)#         break        while(i<= length_df and i < j + count):                haar.append(1)        i+=1                            while(i<= length_df and i< j + (2*count)):        haar.append(-1)        i+=1                    flag = - flag           # print(haar)# print(len(haar))plt.figure(figsize=(200,50))plt.plot(x, plotting1, label ="ecg signal")plt.plot(x, haar, label ="haar")plt.show()

图片

图片

list_peaks = []i = 0while(i< length_df):    sum1 = 0    j = i    while(i< length_df and i < j+ count):        sum1 += plotting1[i]        i+=1    while(i< length_df and i< j + (2* count)):        sum1 -= plotting1[i]        i+=1            list_peaks.append(sum1)    sum1 = 0

# print(list_peaks)
# print(len(list_peaks))base = []for i in range(0, len(list_peaks)):    base.append(i+1)    plt.figure(figsize=(10,6))plt.plot(base, list_peaks)    

list_peaks_stuffed = []
index = 0
# def compute():#     global index#     list_peaks_stuffed = []#     for i in range(len(list_peaks)-1):#         j = i#         while(i< j+ count):#             list_peaks_stuffed.append(0)#             i+=1#         if(index < len(list_peaks)):#             list_peaks_stuffed.append(list_peaks[index])#             index +=1
#         while(i< j+ (2* count) - 1):#             list_peaks_stuffed.append(0)#             i+=1
#         i = j#     return list_peaks_stuffed[0]
# list_new = []# for k in range(0, 10000):#     val = compute()                # left = 10000 - len(list_peaks_stuffed) -1
# for i in range(0, left//2):#     list_peaks_stuffed.append(0)
# list_peaks_stuffed.append(list_peaks[len(list_peaks) -1])
# for j in range(0, left//2):#     list_peaks_stuffed.append(0)    # to_be_popped = len(list_peaks_stuffed) - 10000# for i in range(to_be_popped):#     list_peaks_stuffed.pop()                
# # print(len(list_peaks_stuffed))# print(list_peaks_stuffed)# # plt.subplot(1,2,2)# plt.figure(figsize=(10,6))# plt.plot(x, list_peaks_stuffed)# plt.show()

图片

import math
length = len(plotting1) -1left_len = length
pointer = 0remaining_len = length+1
x = []for i in range(length+1):    x.append(i+1)
iter_count = 1arr = []fig, ax = plt.subplots(1, 1, figsize=(60, 20))# ax[0].plot(x, plotting1)# ax[0].set_title("Original")while(iter_count<=1 ):    arr = arr[left_len+1:]    arr3 = []    arr_d = []    for k in range(0, length+1):        arr_d.append(0)        for k in range(0, length+1):        arr3.append(0)        arr2 = []    pointer1 = pointer    count = 0    while(pointer1 < left_len ):        arr2.append((plotting1[pointer1] + plotting1[pointer1 + 1])/ math.sqrt(2))        pointer1 +=2        count += 1                pointer2 = pointer    while(pointer2 < left_len):        arr2.append((plotting1[pointer2] - plotting1[pointer2+ 1] )/ math.sqrt(2))        pointer2 += 2            if((left_len + 1)%2 == 1):        arr2.append(plotting1[length])    #     if(iter_count >= 1 and iter_count <= 10):        for g in range(0, len(arr2)):        if(2*g <= length):            arr3[2*g] = arr2[g]            for g in range(count, len(arr2)):        if(2*(g - count) <= length):            arr_d[2*(g- count)] = arr2[g]                for g in range(0, length+1):        if(arr3[g] == 0):            if((g-1) <= length and (g+1) <= length):                arr3[g] = (arr3[g-1] + arr3[g+1])/2                    for g in range(0, length+1):        if(arr_d[g] == 0):            if((g-1) <= length and (g+1) <= length):                arr_d[g] = (arr_d[g-1] + arr_d[g+1])/2                arr = arr2 + arr                ax.plot(x, arr3)    ax.plot(x, arr_d)    ax.plot(x, plotting1)    #     ax[iter_count -1].set_title(f"Iteration{iter_count}")#     print("Hello world")        
    iter_count +=1    left_len = ((left_len + 1)//2)-1    remaining_len = length - left_len

图片

import math
length = len(plotting1) -1left_len = length
pointer = 0remaining_len = length+1
x = []for i in range(length+1):    x.append(i+1)
iter_count = 1arr = []fig_, ax_ = plt.subplots(1, 1, figsize=(30, 5))# ax[0].plot(x, plotting1)
arr = arr[left_len+1:]arr3 = []arr_d = []for k in range(0, length+1):    arr_d.append(0)
for k in range(0, length+1):    arr3.append(0)
arr2 = []pointer1 = pointercount = 0while(pointer1 < left_len ):    arr2.append((plotting1[pointer1] + plotting1[pointer1 + 1])/ math.sqrt(2))    pointer1 +=2    count += 1


pointer2 = pointerwhile(pointer2 < left_len):    arr2.append((plotting1[pointer2] - plotting1[pointer2+ 1] )/ math.sqrt(2))    pointer2 += 2
if((left_len + 1)%2 == 1):    arr2.append(plotting1[length])
#     if(iter_count >= 1 and iter_count <= 10):

print(len(arr2))print(len(arr))for g in range(0, len(arr2)):    if(2*g <= length):        arr3[2*g] = arr2[g]

for g in range(count, len(arr2)):    if(2*(g - count) <= length):        arr_d[2*(g- count)] = arr2[g]
for g in range(0, length+1):    if(arr3[g] == 0):        if((g-1) <= length and (g+1) <= length):            arr3[g] = (arr3[g-1] + arr3[g+1])/2
for g in range(0, length+1):    if(arr_d[g] == 0):        if((g-1) <= length and (g+1) <= length):            arr_d[g] = (arr_d[g-1] + arr_d[g+1])/2
arr = arr2 + arr


ax_.plot(x, arr3)ax_.plot(x, arr_d)ax_.plot(x, plotting1)
ax_.set_title("Combined plotting of signals")
# print(len(arr_d), len(plotting1))

arr_t_wave = []for samp in range(0, length_df):    if(samp+20 < length_df-1):        if(arr_d[samp + 20]- arr_d[samp] >= 0.015):            arr_t_wave.append(0)        elif(plotting1[samp+20] - arr_d[samp] < -0.015):            arr_t_wave.append(0)           else:                    arr_t_wave.append((plotting1[samp]))    else:        arr_t_wave.append(plotting1[samp])            if(arr_t_wave[samp] <= 0):        arr_t_wave[samp] = 0    else:        arr_t_wave[samp] = (arr_t_wave[samp]) * 0.4                        
#Removing R peaks from arr_t_wave:arr_t_wave2 = []for samp in range(0, length_df):    if(samp+10 < length_df-1):        if(arr_d[samp + 10]- arr_d[samp] >= 0.015):            arr_t_wave2.append(arr_d[samp]* 3)        elif(plotting1[samp+10] - arr_d[samp] < -0.015):            arr_t_wave2.append(arr_d[samp]* 3)           else:                    arr_t_wave2.append((plotting1[samp]))    else:        arr_t_wave2.append(plotting1[samp])            if(arr_t_wave2[samp] <= 0):        arr_t_wave2[samp] = 0    else:        arr_t_wave2[samp] = (arr_t_wave2[samp]) * 0.4        #     if( samp+ 10 < 9989 and (arr_d[samp] >= 0.15 or arr_d[samp + 10] >= 0.15)):#         samp1 = samp -1000#         while samp1 <= samp:#             arr_t_wave[samp1] = 0#             samp1 += 1#         while samp1 <= samp+ 5:#             arr_t_wave.append(0)#             samp1 += 1        #         samp +=5    
#         else:#             arr_t_wave[samp] = 0                    

        ax_.plot(arr_t_wave2)dict1 = {}
marker_list = []
s = 0limit = 200while(s <= length_df):    t = s+1    flag = 0    while(t< length_df and t <= s + limit and arr_t_wave2[t] <= 0.008 and arr_t_wave2[t] >= -0.008):        flag += 1        t += 1    if(flag == limit):        flag = 0        st = s        s = s+ limit        while(s< length_df and arr_t_wave2[s] <= 0.008 and arr_t_wave2[s] >= -0.008):            s += 1        dict1[st] = s        marker_list.append(st)        marker_list.append(s-30)    else:        s = s + 1        
for i in marker_list:    if marker_list.count(i + 30) >= 1:        marker_list = list(filter(lambda x: x != i and x != i+ 30, marker_list))
marker_list_f = []
p = 0while(p < len(marker_list)-1):    val = (marker_list[p] + marker_list[p+1])//2    marker_list_f.append(val)    p += 2
    
marker_signal = []
for i in range(0, length_df):    if i in marker_list:        marker_signal.append(1)    else:        marker_signal.append(0)        marker_signal_f = []
for i in range(0, length_df):    if i in marker_list_f:        marker_signal_f.append(1)    else:        marker_signal_f.append(0)                   # print(marker_list)# print(marker_list_f)# print(dict1)fig1, ax1 = plt.subplots(1, 1, figsize=(30, 5))
# ax1[iter_count -1].plot(x, plotting1)ax1.plot(x, plotting1)ax1.plot(x, arr_d)
ax1.set_title("R peak detector signal")
fig4, ax4 = plt.subplots(1, 1, figsize=(20, 5))
# ax1[iter_count -1].plot(x, plotting1)ax4.plot(x, plotting1)ax4.plot(x, arr_t_wave)ax4.set_title("Prominent peaks detector signal")
fig3, ax3 = plt.subplots(1, 1, figsize=(20, 5))
# ax1[iter_count -1].plot(x, plotting1)ax3.plot(x, plotting1)ax3.plot(x, arr_t_wave2)ax3.set_title("Combined detector signals")


# fig5, ax5 = plt.subplots(1, 1, figsize=(20, 5))
# # ax1[iter_count -1].plot(x, plotting1)# ax5.plot(x[1200: 2500], plotting1[1200: 2500])# ax5.plot(x[1200: 2500], arr_t_wave2[1200: 2500])# ax5.plot(x[1200: 2500], marker_signal[1200: 2500])


fig6, ax6 = plt.subplots(1, 1, figsize=(20, 5))
# ax1[iter_count -1].plot(x, plotting1)ax6.plot(x, plotting1)ax6.plot(x, marker_signal_f)ax6.set_title("Segmented signal")

# fig2, ax2 = plt.subplots(1, 1, figsize=(60, 15))# x1 = []# plotting2 = []# arr_d1 = []# for i in range(700, 1200):#     x1.append(i+1)#     plotting2.append(plotting1[i])#     arr_d1.append(arr_d[i])
# arr_t_wave = []# for samp in range(700, 1200):#     if(samp+10 < 1200):#         if(arr_d[samp + 15]- arr_d[samp] >= 0.015):#             arr_t_wave.append(0)#         elif(plotting1[samp+15] - arr_d[samp] < -0.015):#             arr_t_wave.append(0)   #         else:#             arr_t_wave.append((plotting1[samp]))#     else:#         arr_t_wave.append(plotting1[samp])        #     if(arr_t_wave[samp-700] <= 0):#         arr_t_wave[samp-700] = 0#     else:#         arr_t_wave[samp-700] = (arr_t_wave[samp-700]* arr_t_wave[samp-700])     # # ax1[iter_count -1].plot(x, plotting1)# ax2.plot(x1, plotting2)# ax2.plot(x1, arr_d1)
# fig4, ax4 = plt.subplots(1, 1, figsize=(60, 15))# ax4.plot(x1, plotting2)# ax4.plot(x1, arr_t_wave)

图片

图片

marker_list_f.insert(0, 0)marker_list_f.append(length_df -1)
print(marker_list_f)i = 0fig8, ax8 = plt.subplots(len(marker_list_f) -1, 1, figsize=(3, 50))

while(i < len(marker_list_f)-1):    beat = []    for j in range(marker_list_f[i], marker_list_f[i+1] + 1):        beat.append(plotting1[j])    x = []    for k in range(len(beat)):        x.append(k + 1)    ax8[i].plot(x, beat)    ax8[i].set_title(f"Beat{i+1}")        i += 1

图片

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

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

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

相关文章

Setapp:只需一次订阅,即可获得 240 款+ Mac 软件

为一项任务寻找合适的应用程序是一项相当艰巨的任务。过去&#xff0c;最好的办法要么是花费宝贵的时间搜索可靠的评论&#xff0c;要么就是相信无论安装什么软件都能完成任务。 如果你是 Mac 用户&#xff0c;那么 Setapp 将让这一问题成为过去。无需在需要时下载单个程序&am…

【数据挖掘】机器学习中相似性度量方法-余弦相似度

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

MIPI A-PHY协议学习

一、说明 A-PHY是一种高带宽串行传输技术,主要为了减少传输线并实现长距离传输的目的,比较适用于汽车。同时,A-PHY兼容摄像头的CSI协议和显示的DSI协议。其主要特征: 长距离传输,高达15m和4个线内连接器; 高速率,支持2Gbps~16Gbps; 支持多种车载线缆(同轴线、屏蔽差分…

SolarLab - hackthebox

简介 靶机名称&#xff1a;SolarLab 难度&#xff1a;中等 靶场地址&#xff1a;https://app.hackthebox.com/machines/SolarLab 本地环境 靶机IP &#xff1a;10.10.11.16 ubuntu渗透机IP(ubuntu 22.04)&#xff1a;10.10.16.17 windows渗透机IP&#xff08;windows11&…

OS复习笔记ch9-1

单处理器调度 调度类型 主要类型 长程调度&#xff1a;决定将哪个进程放入进程池中 中程调度&#xff1a;决定将哪些进程部分或者全部放入内存中 短程调度&#xff1a;决定哪个空闲进程上处理机 I/O调度&#xff1a;决定哪个进程的I/O请求被可用的I/O设备处理 处理器调度和进…

如何通过数据库与AI实现以图搜图?OceanBase向量功能详解

OceanBase支持向量数据库的基础能力 当前&#xff0c;数据库存储系统与人工智能技术的结合&#xff0c;可以体现在两个主要的应用方向上。 一、近似搜索。它利用大语言模型&#xff08;LLM&#xff0c;简称大模型&#xff09;的嵌入&#xff08;embedding&#xff09;技术&am…

【Android面试八股文】请描述new一个对象的流程

文章目录 请描述new一个对象的流程JVM创建对象的过程检查加载分配内存内存空间初始化设置对象初始化请描述new一个对象的流程 JVM创建对象的过程 当JVM遇到一条new指令时,它需要完成以下几个步骤: 类加载与检查内存分配 并发安全性内存空间初始化设置对象信息对象初始化下图…

永磁同步直线电机(PMLSM)控制与仿真3-永磁同步直线电机数学三环控制整定

文章目录 1、电流环参数整定2、速度环参数整定3、位置环参数整定 写在前面&#xff1a;原本为一篇文章写完了永磁同步直线电机数学模型介绍&#xff0c;永磁同步直线电机数学模型搭建&#xff0c;以及永磁同步直线电机三环参数整定及三环仿真模型搭建&#xff0c;但因为篇幅较长…

贪心+dp,CF 1282B2 - K for the Price of One (Hard Version)

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1282B2 - K for the Price of One (Hard Version)https://codeforces.com/problemset/problem/1282/B2 二、解题报告 1、思路分析 考虑优先买价格低的&#xff0c;所以先升序排序 定义状态f[i]为购买前i个…

axios打通fastapi和vue,实现前后端分类项目开发

axios axios是一个前后端交互的工具&#xff0c;负责在前端代码&#xff0c;调用后端接口&#xff0c;将后端的数据请求到本地以后进行解析&#xff0c;然后传递给前端进行处理。 比如&#xff0c;我们用fastapi写了一个接口&#xff0c;这个接口返回了一条信息&#xff1a; …

LeetCode | 709.转换成小写字母

这道题可以用api也可以自己实现&#xff0c;都不难&#xff0c;大小字母之前相差了32&#xff0c;检查到大写字母时加上32即可 class Solution(object):def toLowerCase(self, s):""":type s: str:rtype: str"""return s.lower()class Solution…

韩顺平0基础学java——第22

p460-483 常用类 包装类Wrapper 针对8种几种数据类型相应的引用类型——包装类 包装类和基本数据类型的转换 jdk5之前的手动装箱和拆箱&#xff1a; jdk5之后的自动装箱和拆箱&#xff1a; 三元运算符是一个整体&#xff1a; 这个三元运算符里&#xff0c;精度最高的是doubl…

机器学习周记(第四十三周:MCformer)2024.6.10~2024.6.16

目录 摘要ABSTRACT1 论文信息1.1 论文标题1.2 论文摘要1.3 论文引言1.4 论文贡献 2 论文模型2.1 问题定义2.2 可逆实例归一化&#xff08;Reversible Instance Normalization&#xff09;2.3 混合通道块 &#xff08;Mixed-Channels Block&#xff09;2.4 编码器&#xff08;De…

MPLS VPN一

R1为客户&#xff0c;现在进行一些基本配置&#xff0c;来确保可以通路由 先启动OSPF跑通 在R3上 等一会 现在启动MPLS 对R3 对R4 然后在R2上 再把接口划到空间里面 原来的IP在公网里面&#xff0c;被清除了 然后再配置接口 查看 对R1&#xff08;相当于客户&#xff09; …

CrossOver和PD虚拟机谁更强大?CrossOver和PD虚拟机应该怎么选择

在当前的虚拟化技术和应用程序兼容性解决方案中&#xff0c;CrossOver和PD虚拟机&#xff08;Parallels Desktop&#xff09;都是备受用户喜爱的选择。对于需要在非原生系统上运行应用程序的用户而言&#xff0c;选择合适的工具尤为重要。那么&#xff0c;CrossOver和PD虚拟机谁…

虚表-在成员函数前面加上virtual后发生了什么事情???

从上图得出&#xff1a; 子类继承的父类的虚表指针吗&#xff1f; 答&#xff1a;是的。 子类和父类是同一个虚表还是不同的虚表&#xff1f; 答&#xff1a;不同的虚表&#xff0c;倘若是同一个当子类进行覆盖的时候&#xff0c;父类的虚表会丢失。 下面有一些方法来观察类…

【linux】认识“文件”的本质,理解“文件系统”的设计逻辑,体会linux优雅的设计理念

⭐⭐⭐个人主页⭐⭐⭐ ~~~~~~~~~~~~~~~~~~ C站最❤❤❤萌❤❤❤博主 ~~~~~~~~~~~~~~~~~~~ ​♥东洛的克莱斯韦克-CSDN博客♥ ~~~~~~~~~~~~~~~~~~~~ 嗷呜~ ✌✌✌✌ 萌妹统治世界~ &#x1f389;&#x1f389;&#x1f389;&#x1f389; ✈✈✈✈相关文章✈✈✈✈ &#x1f4a…

虚函数表共享和生成

每个类有不同的虚表&#xff0c;相同的类使用相同的虚表 模拟动态绑定的一个过程

【Apache Doris】周FAQ集锦:第 6 期

【Apache Doris】周FAQ集锦&#xff1a;第 6 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

C++11左值、右值

知识回顾&#xff0c;详解引用 简单概括&#xff0c;引用就是给已存在对象取别名&#xff0c;引用变量与其引用实体共用同一块内存空间 左右值区分 注意&#xff1a;不一定左边的都是左值&#xff0c;右边的都是右值 左边的也可能是右值&#xff0c;等号右边的也可能是左值 …