根据离散傅里叶变换对ECG信号进行频谱分析

根据ECG信号进行傅里叶变化频谱分析确定信号中QRS波的主要频率范围。

1、离散傅里叶变换基本原理

离散傅里叶变换是将时域信号转化为频域信号。基于时域的信号为原始信号,经过傅里叶变化得到各个频率的谐波的振幅和相位,也就是说将所有频率的谐波相加可以得到原始信号。

2、绘制ECG信号和频谱图

import matplotlib.pyplot as pltecg_signal = signal_1[0]  #原始ECG信号
fs = 250     #采样频率
ecg_signal_x = np.linspace(0,len(ecg_signal)/fs,len(ecg_signal))   #生成原始信号的X轴,以时间为维度
fft_x = np.linspace(0,fs,len(ecg_signal))   #生成频谱图的X轴,以频率为维度plt.figure(figsize=(20,15))
ax0 = plt.subplot(211)
ax0.set_title('ECG signal')
ax0.plot(ecg_signal_x,ecg_signal)   #绘制ECG原始信号fft = np.fft.fft(ecg_signal)   #对原始信号进行快速傅里叶变化
ax1 = plt.subplot(212)
ax1.set_title('fft')
ax1.plot(fft_x,fft)   #绘制频谱图

频率的取值范围是0-250Hz(原始ECG信号的采样频率)。

3、频谱图的对称性

根据离散傅里叶变换后的频谱图在频率上是对称的,所以分析ECG信号频率时,可以只针对前半部分或后半部分分析。下面进行频谱对称性的验证。
根据0-125Hz的频率信号进行反傅里叶变换。

fft = np.fft.fft(ecg_signal)
for i in range(len(fft_x)):if fft_x[i]<0 or fft_x[i]>125:fft[i]=0
ifft = np.fft.ifft(fft)
plt.figure(figsize=(20,5))
plt.title('fft_inverse')
plt.plot(ecg_signal_x,ifft)

0-125Hz的频率信号进行反傅里叶变换结果
将以上代码0和125改为126和250,查看126-250Hz频率信号的反变换结果。
结果显示,0-125Hz和126-250Hz的信号相同。

4、确定QRS波的主要频段

0-50Hz,该频段的信号与0-125Hz信号近乎一样,得出这个范围是ECG信号的主要频段。

51-125Hz,可以看出这个范围的信号能量很小,0.03左右。

继续确定0-50Hz中的主要频段
经过不断的实验得出,6-30Hz是QRS波的主要频段。
6-30Hz频段的信号:

5、QRS波的能量

通过计算QRS波的能量和整个ECG信号的能量之比可以估算信号的质量。
计算QRS波与ECG信号的能量之比代码:

def psqi(ecg_signal: np.ndarray, sampling_frequency: int) -> float:"""Computes the power spectrum Distribution of QRS Wave.It corresponds to the ratio of the energy of the QRS wave and the energy ofthe ECG signal. The energy of the QRS wave is computed on frequenciesranging from 6Hz to 30Hz, the energy of the ECG signal is computed onfrequencies ranging from 0Hz to 125Hz.If interference exists, the high-frequency component increases, and pSQIdecreases.Parameters----------ecg_signal : np.arrayInput ECG signalsampling_frequency : intInput ecg sampling frequencyReturns-------p_sqi_score : float"""n = len(ecg_signal)t = 1 / sampling_frequencyyf = np.fft.fft(ecg_signal)xf = np.linspace(0.0, 1.0/(2.0*t), n//2)pds_num = [np.abs(yf[idx]) for idx in range(len(xf)) if6 <= xf[idx] <= 30]pds_denom = [np.abs(yf[idx]) for idx in range(len(xf)) if0 <= xf[idx] <= 125]p_sqi_score = float(np.round(sum(pds_num) / sum(pds_denom), 3))return p_sqi_score

总结:

250Hz的ECG信号的傅里叶变换后的主要频段是6-30Hz。而且QRS波的能量占整个ECG信号的0.5-0.7时,信号质量比较好。

根据离散傅里叶变换对ECG信号进行频谱分析相关推荐

  1. 【OpenCV 例程200篇】72. 一维离散傅里叶变换

    [OpenCV 例程200篇]72. 一维离散傅里叶变换 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 1.3 一维 ...

  2. 傅里叶变换以及离散傅里叶变换

    傅里叶变换 傅氏变换的目的是讲函数整体从空域变换到频域,以便于作分析.它本身是一种线性变换. F(μ)=∫−∞+∞f(t)∗e−2πμtdtF(\mu)=\int_{-\infty}^{+\infty ...

  3. Matlab如何进行利用离散傅里叶变换DFT (快速傅里叶变换FFT)进行频谱分析

    文章目录 1. 定义 2. 变换和处理 3. 函数 4. 实例演示 例1:单频正弦信号(整数周期采样) 例2:单频正弦信号(非整数周期采样) 例3:含有直流分量的单频正弦信号 例4:正弦复合信号 例5 ...

  4. 【Python】可视化的离散傅里叶变换+快速傅里叶变换后时域信号的频域分析

    前面的知识这里就不介绍了,下面是Python语言实现的离散傅里叶变换的处理: 时域信号的函数表达 要处理的时域信号: f(t)=sin(t)+2sin(3t)+2cos(2t)+4sin(15t)f( ...

  5. 【六更完结!由于字数限制开新文章继续】零基础信号与系统学习笔记:复指数信号、傅里叶级数的系数推导、三角函数正交性、离散傅里叶变换、相位补偿、z变换表、逆变换表、常见序列及其作用

    零基础信号与系统学习笔记:复指数信号.傅里叶变换.三角函数正交性 基础1:复指数信号 复指数信号基础知识 复指数信号推导1 虚指数信号 虚指数信号特性和作用 直流信号 基础2:傅里叶级数 推导傅里叶级 ...

  6. 傅里叶变换后信号的频谱分析中相位角的求法

    信号表示为三角傅里叶级数时: 以上为进行三角分解后的初步结果,要进行信号的频谱分析还需要将括号内的三角函数合并为余弦的形式. 此处An和相位角的求法如下: 而对于指数形式的傅里叶变换结果该如何呢? 固 ...

  7. 一维离散傅里叶变换,信号分解

    傅里叶变换的应用涵盖了概率与统计.信号处理.量子力学和图像处理等学科. 离散傅里叶变换的公式如下: 在MATLAB中,可以直接使用函数库fft(X)对一维向量X做傅里叶变换,分析信号的组成.如下例子处 ...

  8. matlab一维傅里叶变换,一维离散傅里叶变换,信号分解

    傅里叶变换的应用涵盖了概率与统计.信号处理.量子力学和图像处理等学科. 离散傅里叶变换的公式如下: 在MATLAB中,可以直接使用函数库fft(X)对一维向量X做傅里叶变换,分析信号的组成.如下例子处 ...

  9. matlab hrv,利用ECG信号进行HRV分析

    一.HRV的一些医学概念 HRV(HeartRateVariability,中文为心率变异度),在医学上有重要的意义.心脏除了本身的节律性放电引发的跳动之外,也受到自律神经系统所调控.过去二十年已有不 ...

最新文章

  1. Centos 编译安装sphinx-0.9.9全文检索
  2. 距离 Java 开发者玩转 Serverless,到底还有多远?
  3. java反射构造函数_【译】3. Java反射——构造函数
  4. 常用模块(数据序列化 json、pickle、shelve)
  5. Servlet_执行原理
  6. create-react-app脚手架工具使用
  7. mysql交叉编译 cmake_CMake交叉编译配置
  8. 前端面试1:CSS布局
  9. 【OO学习】OO第二单元作业总结
  10. VB获取超过2G文件的大小
  11. Pascal Sentences数据集预处理
  12. .NET单机软件保护策略(2)软件证书制作
  13. 奥普泰安防监控智能配电箱——为安防行业添新助力
  14. Intouch高级报警(报警筛选)
  15. 2017中国大学生计算机设计大赛总结
  16. 奥比中光深度摄像头_奥比中光展示智能深度3D摄像头技术解决方案
  17. 苏世民,我的经验和教训(五)
  18. 不用/,*,mod乘、除、取模运算的除法
  19. linux重新初始化网络命令,如何在Ubuntu 18.04 Bionic Beaver Linux上重新启动网络
  20. python thinker(菜单,滚动条,回调函数,对话框)

热门文章

  1. 【JZOJ】给水(water)
  2. 平台电子签章实现方法
  3. DC学习中时无法保存ddc文件的问题Error: Unable to open DDC file ‘unmapped/led_test.ddc‘ for writing.(DDC-1)
  4. 【SAP】ABAP开发——ALV展示后字段的下划线连接
  5. 一大堆模块的结晶……
  6. 我的形码输入法[C语言] 之一:输入法的字词编码
  7. 人工智能中神经网络与自然语言处理共生关系_CodingPark编程公园
  8. DFRobot高精度低功耗数字温湿度传感器SHT40
  9. 怎样用python提取英文字母_python如何获取一次获取26个英文字母
  10. 我们能为别人留下什么?——纪念一位真正的兄长