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

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

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等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux中安装jdk

1.查看jdk是否安装 java -version 2.搜索java yum -y list java* 3. 安装 yum install -y java-1.8.0-openjdk.x86_64 安装完成 验证

2024年实体门店和企业怎么做短视频矩阵?一文带你了解清楚

不知道大家有没有刷到过这个直播间&#xff0c;潮汕一位做牛丸的大哥&#xff0c;看起来直播间内容平平无奇&#xff0c;也就几十个人的直播间观看&#xff0c;但是他通过短视频矩阵的方式卖了150万单牛丸你敢信&#xff1f; 那你猜猜他通过短视频矩阵发了多少条视频&#xff…

python-求f(x,n)

[题目描述] 输入&#xff1a; 输入 &#x1d465;和 &#x1d45b;。输出&#xff1a; 函数值&#xff0c;保留两位小数。样例输入1 4.2 10 样例输出1 3.68 来源/分类&#xff08;难度系数&#xff1a;一星&#xff09; 完整代码如下&#xff1a; x,nmap(eval,input().split(…

记周末百度云防御CC攻击事件

今天一早&#xff0c;收到百度智能云短信提醒&#xff0c;一位客户的网站遭遇了CC攻击。 主机吧赶紧登陆客户网站查看&#xff0c;是否正常&#xff0c;看是否需要通知客户。 结果打开正常&#xff0c;看情况并没什么影响&#xff0c;那就等攻击结果了再看吧。 下午的时候&am…

嵌入式操作系统_6.任务间通信

1.任务间通信管理 任务间通信管理也是嵌入式操作系统的关键功能之一。它主要为操作系统的应用程序提供多种类型的数据传输、任务同步/异步操作等手段。 2.操作系统任务之间的关系 由于嵌入式操作系统是为应用提供管理、硬件支持、协调任务和中断处理程序等功能&#xff0c;具备…

环保绩效评级:ABCD四个等级,你的企业处于哪个水平?

在当下社会&#xff0c;环保问题越来越受到人们的关注和重视。企业作为经济活动的重要参与者&#xff0c;其环保绩效评级直接关系到环境保护的成效。朗观视觉将详细解析环保绩效评级的ABCD四等级&#xff0c;帮助读者了解不同等级的特点和评判标准&#xff0c;进而引导企业提高…

Hexo 搭建个人博客(ubuntu20.04)

1 安装 Nodejs 和 npm 首先登录NodeSource官网&#xff1a; Nodesource Node.js DEB 按照提示安装最新的 Node.js 及其配套版本的 npm。 &#xff08;1&#xff09;以 sudo 用户身份运行下面的命令&#xff0c;下载并执行 NodeSource 安装脚本&#xff1a; sudo curl -fsSL…

Linux笔记--vi编辑器

vi编辑器 基本操作 对于vi编辑器有这几种模式 移动 当编辑一个过大的文件时通过方向键移动光标过慢所以可以使用快捷键进行移动 编辑 dw指令只能在单词第一个字母处使用 D指令删除的是当前行 查找替换 pattern指代想要搜索的内容

Spring Security——结合JWT实现令牌的验证与授权

目录 JWT&#xff08;JSON Web Token&#xff09; 项目总结 新建一个SpringBoot项目 pom.xml PayloadDto JwtUtil工具类 MyAuthenticationSuccessHandler&#xff08;验证成功处理器&#xff09; JwtAuthenticationFilter&#xff08;自定义token过滤器&#xff09; W…

ThinkPHP5.0 apache服务器配置URL重写,index.php去除

本地环境wamp .htaccess文件代码 <IfModule mod_rewrite.c>Options FollowSymlinks -MultiviewsRewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] </IfModule> 踩过这个坑&a…

第12章.STM32标准库简介

目录 0. 《STM32单片机自学教程》专栏 12.1 CMSIS 标准 12.2 STM32标准库文件结构 12.2.1 主结构 12.2.2 Libraries固件库文件 CMSIS文件夹 1.core_cm3.c&core_cm3.h 2.startup启动文件 3.Stm32f10x.h 4.system_stm32f10x.c&system_stm32f10…

解决用Three.js实现嘴型和语音同步时只能播放部分部位的问题 Three.js同时渲染播放多个组件变形动画的方法

前言 参考这篇文章ThreeJSChatGPT 实现前端3D数字人AI互动&#xff0c;前面搭后端、训练模型组内小伙伴都没有什么问题&#xff0c;到前端的时候&#xff0c;脸部就出问题了。看我是怎么解决的。 好文章啊&#xff0c;可惜百度前几个都找不到&#xff0c;o(╥﹏╥)o 问题情况 …

【C++提高编程-05】----C++之Deque容器实战

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

ubuntu vnc

如何在Ubuntu 18.04安装VNC | myfreax sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils sudo apt install tigervnc-standalone-server tigervnc-common vncserver sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils sudo apt ins…

用Python向Word文档添加页眉和页脚

用Python向Word文档添加页眉和页脚 添加页眉和页脚效果代码 添加页眉和页脚 在本文中&#xff0c;我们将用python向文档中添加页眉和页脚。 效果 添加前的文档&#xff1a; 添加页眉和页脚后&#xff1a; 代码 from docx import Documentdef add_header_footer(doc_path…

【数据结构】——常见排序

文章目录 一、 冒泡排序二、 选择排序三、插入排序四、 快速排序1. hoare版本2. 优化版本3. 前后指针法4. 非递归版本 五、 堆排序六、 希尔排序七、 归并排序1. 递归版本2. 非递归版本 八、 计数排序 在开始之前先准备一个交换数据的函数&#xff0c;排序会经常用到 //交换位置…

牛客热题:兑换零钱(一)

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;兑换零钱(一)题目链接方法一&am…

解读ROS功能包模块的步骤

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言解读ROS功能包模块的步骤前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 推荐开发经验及方法博客专栏: [https:/…

抢占人工智能行业红利,前阿里巴巴产品专家带你15天入门AI产品经理

前言 当互联网行业巨头纷纷布局人工智能&#xff0c;国家将人工智能上升为国家战略&#xff0c;藤校核心课程涉足人工智能…人工智能领域蕴含着巨大潜力&#xff0c;早已成为业内共识。 面对极大的行业空缺&#xff0c;不少人都希望能抢占行业红利期&#xff0c;进入AI领域。…

软件工程实务:软件产品

目录 1、软件产品的基本概念 2、软件工程是什么&#xff1f; 为什么产生软件工程? 软件工程是做什么的? 3、定制软件和软件产品的工程比较 4 、软件产品的运行模式 5、软件产品开发时需要考虑的两个基本技术因素 6、产品愿景 7、软件产品管理 8、产品原型设计 9、小结…