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

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

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 += 1pointer2 = 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 + arrax_.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.xdnf.cn/news/1452408.html

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

相关文章

自定义注解获取属性对应枚举的翻译值

平时在开发的时候难免会遇到枚举来翻译类&#xff0c;于是写一个自定义注解来在开发的时候自动翻译枚举的值 相关代码如下&#xff1a; Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) Documented JacksonAnnotationsInside public interface EnumShow {/*** …

web错题(1)

action属性是form标签的必须属性&#xff0c;用于指定表单提交时表单数据将被发往哪里 dir能够指定文本显示方向的属性 可以产生下拉列表的标记时<select> multiple属性设为true&#xff0c;表示输入字段可以选择多个值 lable标签的for属性可以把lable绑定到另一个元…

meilisearch,老版本的文档

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

Unity 之通过自定义协议从浏览器启动本地应用程序

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity 之通过自定义协议从浏览器启动本地应用程序 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进…

PHP框架详解- symfony框架

GPT-4 (OpenAI) Symfony 是一个用 PHP 语言编写的开放源代码的 web 应用框架。Symfony 提供了一组可重用的组件和一个标准化、可扩展的框架&#xff0c;用于构建 web 应用、API、微服务等。它跟其他流行 PHP 框架&#xff08;比如 Laravel&#xff09;一样&#xff0c;旨在加快…

Servlet接口实现

项目搭建 pom文件引入依赖与打包配置。 <dependencies><!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId>…

java:spring actuator添加自定义endpoint

# 项目代码资源&#xff1a; 可能还在审核中&#xff0c;请等待。。。 https://download.csdn.net/download/chenhz2284/89437274 # 项目代码 【pom.xml】 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId&…

探索C嘎嘎的奇妙世界:第四关---引用与内联函数

1 引用: 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。 #include<iostream> using namespace std;int main() {int a 0;// 引用&#xff1a;…

分数计算 初级题目

今天继续更题。今天的题目是《第五单元 分数的加减法》初级题目。 定位&#xff1a;题目较为初级&#xff0c;适合预习 参考答案&#xff1a;CACCADACAABACBBCDBCB

Linux文本处理三剑客+正则表达式

Linux文本处理常用的3个命令&#xff0c;脚本或者文本处理任务中会用到。这里做个整理。 三者的功能都是处理文本&#xff0c;但侧重点各不相同&#xff0c;grep更适合单纯的查找或匹配文本&#xff0c;sed更适合编辑匹配到的文本&#xff0c;awk更适合格式化文本&#xff0c;对…

【数据结构】第十六弹---C语言实现希尔排序

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、希尔排序( 缩小增量排序 ) 1.1、预排序实现 1.2、希尔排序代码实现 1.3、代码测试 1.4、时空复杂度分析 1.5、性能比较 总结 上一弹我们…

2024年【四川省安全员C证】考试题及四川省安全员C证考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 四川省安全员C证考试题是安全生产模拟考试一点通总题库中生成的一套四川省安全员C证考试资料&#xff0c;安全生产模拟考试一点通上四川省安全员C证作业手机同步练习。2024年【四川省安全员C证】考试题及四川省安全员…

SUSTAINABILITY,SCIESSCI双检期刊还能投吗?

本期&#xff0c;小编给大家介绍的是一本MDPI出版社旗下SCIE&SSCI双检“毕业神刊”——SUSTAINABILITY。据悉&#xff0c;早在2024年1月&#xff0c;ElSEVIER旗下的Scopus数据库已暂停收录检索期刊SUSTAINABILITY所发表文章&#xff0c;同时重新评估是否继续收录该期刊。随…

Carsim高级开发:VS Connect通讯开发指南

文章目录 前言一、VS Connect 概念引入二、VS Connect 通讯框架三、Carsim 工程配置1、车辆模型配置2、procedure配置3、Run Control配置4、受控车辆名称配置 四、VS Connect Server代码1、打开Sln工程2、代码修改 五、VS Connect Client代码1、函数的调用关系2、carsim_variab…

BetterZip 5软件安装包下载+安装教程

BetterZip是一款功能强大的Mac解/压缩软件&#xff0c;可以满足用户对文件压缩、解压、加密和保护等方面的需求。以下是关于BetterZip软件的主要功能、特点和使用方法的详细介绍&#xff0c;以及对其用户友好度、稳定性和安全性的评价。 安 装 包 获 取 地 址: BetterZip 5-安…

配置完eslint没有用?

当你使用 npx eslint --init 生成配置文件后 你也配置好了.prettierrc 当你在代码写一点小问题的时候 发现eslint没有进行检查 原因是你生成的 .eslintrc.js中没有加上这个配置 extends: [.....plugin:prettier/recommended],加上以后重启vscode你会发现

基于flask的网站如何使用https加密通信-问题记录

文章目录 项目场景&#xff1a;问题1问题描述原因分析解决步骤解决方案 问题2问题描述原因分析解决方案 参考文章 项目场景&#xff1a; 项目场景&#xff1a;基于flask的网站使用https加密通信一文中遇到的问题记录 问题1 问题描述 使用下面的命令生成自签名的SSL/TLS证书和…

传统边界安全设备的前世今生

光看不行得防御 只能抵御已知规则 识别病毒文件 识别方式是将数据包还原成文件&#xff0c;然后对文件进行病毒检测&#xff0c;检测方式就是以下三种 1、每一个文件都有一个独一无二的MD5值&#xff0c;把病毒文件的MD5值也进行记录&#xff0c;然后进行匹配 2、文件稍有变…

PS通过GTX实现SFP网络通信1

将 PS ENET1 的 GMII 接口和 MDIO 接口 通过 EMIO 方 式引出。在 PL 端将引出的 GMII 接口和 MDIO 接口与 IP 核 1G/2.5G Ethernet PCS/PMA or SGMII 连接&#xff0c; 1G/2.5G Ethernet PCS/PMA or SGMII 通过高速串行收发器 GTX 与 MIZ7035/7100 开发…

统计信号处理基础 习题解答10-17

题目&#xff1a; 在选择不含信息的或者不假设任何先验知识的先验PDF时,我们需要从数据中得到最大的信息量。在这种方式下,数据是了解未知参数的主要贡献者。利用习题10.15的结果,这种方法可以通过选择使I最大的来实现。对于例10.1的高斯先验PDF,该如何选择和2使得 是不含信息…