当前位置: 首页 > news >正文

EMD关于信号的重建,心率提取

关于EMD的俩个假设:

IMF 有两个假设条件:

  • 在整个数据段内,极值点的个数和过零点的个数必须相等或相差最多不能超过一 个;
  • 在任意时刻,由局部极大值点形成的上包络线和由局部极小值点形成的下包络线 的平均值为零,即上、下包络线相对于时间轴局部对称。

先安装pyEMD库 

from pyEMD import EMD  (报错)
执行pip uninstall pyEMD
pip install EMD-signal==1.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/

代码部分:

from PyEMD import EMD
import numpy as np
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
from scipy.signal import find_peaks
from scipy import signal#读取信号数据
def readtxt(path):with open(path,'r') as f:str=f.readline()list = str.split(' ')list1=[];for i,x in enumerate(list):if ((i%5 == 0) or (i%5 == 1) or (i%5 == 2)) and x !='':list1.append(float(x))return list1def pyem(lis):emd = EMD()IMFs = emd.emd(np.array(lis))print(len(IMFs), len(IMFs[0]), type(IMFs))#计算周期和频率imfs = emd.imfs# 估计瞬时频率和周期freqs = []periods = []for imf in imfs:if len(imf) > 1:# 计算频率sample_rate = 1 / (imf.argmax() / len(imf))freq = sample_rate / len(imf)print(freq)freqs.append(freq)# 计算周期period = 1 / freqprint(period)periods.append(period)fig = plt.figure()ax = fig.add_subplot(len(IMFs) + 1, 1, 1)ax.plot(np.array(lis))for i in range(len(IMFs)):ax = fig.add_subplot(len(IMFs) + 1, 1, i + 2)ax.plot(IMFs[i])plt.show()lr = 0for i,s in enumerate(IMFs):if i>len(IMFs-1)/2+1:lr +=sreturn lr#获取心率
def findPeaks(list):# x = electrocardiogram()[2000:4000]# jus=[1,2,3,4,10,1,2,3,4,21,1,2,2,3]#获取列表最小值,然后减去最小值# list_N = list[20000:30000]list_N = listavg = sum(list_N)/len(list_N);list_D=[]for i in range(len(list_N)):list_D.append(list_N[i]-avg)#列表转换数组y=np.array(list_D)#消除趋势线z=signal.detrend(y)#结果抽取200点,降频,然后再获取数据的脉率pl=200;fs=len(list_N)#参照值比BP = fs/pl;#进行趋势拟合x=signal.resample(z,pl)#获取最小值作为条件限制hu=min(x)peaks, _ = find_peaks(x, height=hu)# print(peaks)# 实际的心率值# print(len(peaks))##获取相邻俩个峰值之间的点数,然后计算心率值for i,d in enumerate(peaks):  #打印查看脉搏波的数值print(peaks[i])a1 = peaks[0]a2 = peaks[1]a3= a2-a1#计算每个脉搏对应的点数R_point = a3*BP#以60为节点计算的数值rate=60*(500/R_point)# print("bass",bass)#总的点数除以每一个脉搏对应的点数,然后除以90秒对应的值# rate = (len(list)/R_point)/1.5plt.plot(x)plt.plot(peaks, x[peaks], "x")plt.plot(np.zeros_like(x), "--", color="gray")plt.show()return rateif __name__ == "__main__":path = "../362a7e1de4dd484a9b4a3274a0e5a633_1648249928320.txt" #正常# path = "../a7c9bff53f2e4a70af7a9f641552507a_1706541122_1706564288403_887_1.txt"  #异常ll = readtxt(path)imf = pyem(ll[2000:10000])plt.plot(imf)plt.show()print(findPeaks(imf))

运行结果:

这是IMFS的分解图9个,从低频一直到高频

 因为最后一个是趋势项,我们将IMF[5]、IMF[6]、IMF[7]进行叠加,这几本接近我们的目标信号

然后对目标信号进行峰值提取:

总结:

信号分量的处理

通过经验模态分解(EMD)得到了信号的分量,可以进行许多不同的分析和处理操作,以下是一些常见的对分量的利用方向:

(1)信号重构:将分解得到的各个本征模态函数(IMF)相加,可以重构原始信号。这可以用于验证分解的效果,或者用于信号的重建和恢复。

(2)去噪:对于复杂的信号,可能存在噪声或干扰成分。通过分析各个IMF的频率和振幅,可以识别和去除信号中的噪声成分。

(3)频率分析:分析每个IMF的频率成分,可以帮助理解信号在不同频率上的振荡特性,从而揭示信号的频域特征。

(4)特征提取:每个IMF代表了信号的局部特征和振荡模式,可以用于提取信号的特征,并进一步应用于机器学习或模式识别任务中。

(5)信号预测:通过对分解得到的各个IMF进行分析,可以探索信号的未来趋势和发展模式,从而用于信号的预测和预测建模。

(6)模式识别:分析每个IMF的时域和频域特征,可以帮助对信号进行模式识别和分类,用于识别信号中的不同模式和特征。

(7)异常检测:通过分析每个IMF的振幅和频率特征,可以用于探测信号中的异常或突发事件,从而用于异常检测和故障诊断。

在得到了信号的分量之后,可以根据具体的应用需求选择合适的分析和处理方法,以实现对信号的深入理解、特征提取和应用。

相关文章:

EMD关于信号的重建,心率提取

关于EMD的俩个假设: IMF 有两个假设条件: 在整个数据段内,极值点的个数和过零点的个数必须相等或相差最多不能超过一 个;在任意时刻,由局部极大值点形成的上包络线和由局部极小值点形成的下包络线 的平均值为零&#x…...

HEVC的Profile和Level介绍

文章目录 HEVCProfile(配置):Level(级别):划分标准 HEVC HEVC(High Efficiency Video Coding),也称为H.265,是一种视频压缩标准,旨在提供比先前的…...

Springboot Thymeleaf 实现数据添加、修改、查询、删除

1、引言 在Spring Boot中使用Thymeleaf模板引擎实现数据的添加、修改、查询和删除功能,通常步骤如下: 在Controller类中,定义处理HTTP请求的方法。创建Thymeleaf模板来处理表单的显示和数据的绑定。 2、用户数据添加 1、 在Controller类中…...

关于 UnityEditorWindow

想要使用UnityEditorWindow作为调试窗口吗? 这样做可以很方便的针对游戏中的重要对象做调试。 但是有一个很不方便的地方,OnGUI 的刷新频率不高,或者说需要鼠标点击之后才会重绘,如何解决这一问题? 可以如下操作&am…...

小狐狸JSON-RPC:wallet_addEthereumChain(添加指定链)

wallet_addethereumchain(添加网络) var res await window.ethereum.request({"method": "wallet_addEthereumChain","params": [{"chainId": "0x64", // 链 ID (必填)"…...

Pandas | value_counts() 的详细用法

value_counts() 函数得作用 用来统计数据表中,指定列里有多少个不同的数据值,并计算每个不同值有在该列中的个数,同时还能根据指定得参数返回排序后结果。 返回得是Series对象 value_counts(values,sortTrue, ascendingFalse, normalizeFal…...

上岸美团了!

Hello,大家好,最近春招正在如火如荼,给大家分享一份美团的面经,作者是一份某双非的硕(只如初见668),刚刚通过了美团的3轮面试,已经拿到offer,以下是他的一些分享。 一面&…...

Gemma开源AI指南

近几个月来,谷歌推出了 Gemini 模型,在人工智能领域掀起了波澜。 现在,谷歌推出了 Gemma,再次引领创新潮流,这是向开源人工智能世界的一次变革性飞跃。 与前代产品不同,Gemma 是一款轻量级、小型模型&…...

LabVIEW智能家居安防系统

LabVIEW智能家居安防系统 随着科技的飞速发展和人们生活水平的不断提升,智能家居系统以其便利性和高效性,逐渐成为现代生活的新趋势。智能家居安防系统作为智能家居系统的重要组成部分,不仅能够提高家庭的安全性,还能为用户提供更…...

[蓝桥杯 2022 省 A] 求和

[蓝桥杯 2022 省 A] 求和 题目描述 给定 n n n 个整数 a 1 , a 2 , ⋯ , a n a_{1}, a_{2}, \cdots, a_{n} a1​,a2​,⋯,an​, 求它们两两相乘再相加的和,即 S a 1 ⋅ a 2 a 1 ⋅ a 3 ⋯ a 1 ⋅ a n a 2 ⋅ a 3 ⋯ a n − 2 ⋅ a n − 1 a n − 2 ⋅ a…...

【C++入门】输入输出、命名空间、缺省参数、函数重载、引用、内联函数、auto、基于范围的for循环

目录 命名空间 命名空间的定义 命名空间的使用 输入输出 缺省参数 函数重载 引用 常引用 引用的使用场景 内联函数 auto 基于范围的for循环 命名空间 请看一段C语言的代码&#xff1a; #include <stdio.h> #include <stdlib.h>int rand 10;int main…...

Docker + Nginx 安装

安装Docker 1.防火墙 2.yum源 3.安装基础软件 更新yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum clean all #清除yum源缓存 yu…...

UE RPC 外网联机(1)

技术&#xff1a;RPC TCP通信 设计&#xff1a;大厅服务<---TCP--->房间服务<---RPC--->客户端&#xff08;Creator / Participator&#xff09; 1. PlayerController 用于RPC通信控制 2.GameMode 用于数据同步 3.类图 4. 注意 &#xff08;1&#xff09;RPC&a…...

AI预测福彩3D第22弹【2024年3月31日预测--第5套算法开始计算第4次测试】

今天&#xff0c;咱们继续进行本套算法的测试&#xff0c;今天为第四次测试&#xff0c;仍旧是采用冷温热趋势结合AI模型进行预测。好了&#xff0c;废话不多说了。直接上结果~ 仍旧是分为两个方案&#xff0c;1大1小。 经过人工神经网络计算并进行权重赋值打分后&#xff0c;3…...

Django(二)-搭建第一个应用(1)

一、项目环境和结构 1、项目环境 2、项目结构 二、编写项目 1、创建模型 代码示例: import datetimefrom django.db import models from django.utils import timezone# Create your models here.class Question(models.Model):question_text models.CharField(max_length2…...

前端bugs

问题&#xff1a; Failed to load plugin typescript-eslint declared in package.json eslint-config-react-app#overrides[0]: Cannot find module eslint/package.json 解决&#xff1a; google了一晚上还得是chatgpt管用 运行以下命令【同时还要注意项目本身使用的Node版…...

MCGS学习——水位控制

要求 插入一个水罐&#xff0c;液位最大值为37插入一个滑动输入器&#xff0c;用来调节水罐水位&#xff0c;滑动输入器最大调节为液位最大值&#xff0c;并能清楚的显示出液位情况用仪表显示水位变化情况&#xff0c;仪表最大显示设置直观清楚方便读数&#xff0c;主划线为小…...

本地搭建多人协作ONLYOFFICE文档服务器并结合Cpolar内网穿透实现公网访问远程办公

文章目录 1. 安装Docker2. 本地安装部署ONLYOFFICE3. 安装cpolar内网穿透4. 固定OnlyOffice公网地址 本篇文章讲解如何使用Docker在本地服务器上安装ONLYOFFICE&#xff0c;并结合cpolar内网穿透实现公网访问。 Community Edition允许您在本地服务器上安装ONLYOFFICE文档&…...

Ubuntu 中电子邮件处理工具

Ubuntu 中电子邮件处理工具的综述 在现代通信技术中&#xff0c;电子邮件系统是不可或缺的一部分。特别是在基于 Linux 的操作系统如 Ubuntu 中&#xff0c;有许多高效且可靠的电子邮件处理工具可供选择。除了众所周知的 Postfix&#xff0c;还有其他几个重要的选项&#xff0…...

java多线程——运用线程同步解决线程安全问题

前言&#xff1a; 整理下学习笔记&#xff0c;打好基础&#xff0c;daydayup!!! 线程安全 多线程可以同时进行操作&#xff0c;但如果是同时操作一个共享资源的时候&#xff0c;可能会出现业务安全问题。 示例&#xff1a; 小A和小B共用一个账户&#xff0c;如果小A和小B同时取…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...