首页 > 其他分享 >时频分析法——连续小波变换(CWT)

时频分析法——连续小波变换(CWT)

时间:2024-08-03 18:27:02浏览次数:21  
标签:ecg plt CWT matplotlib 小波 分析法 时频 import data

连续小波变换是一种数学工具,用于将信号分解为构成其的小波或波形。这种变换在信号处理、图像分析、音频压缩等领域有广泛的应用。与傅里叶变换相比,连续小波变换能提供关于信号在不同时间和尺度上的详细信息,使之更适合分析非平稳信号(即信号的统计特性随时间变化的信号)。

 所使用的数据来自于公开的心电信号数据库,获取网址如下:PTB Diagnostic ECG Database v1.0.0 (physionet.org)

本文使用经过预处理的心电信号(ECGs)作为分析例子,所有图片均有它所得到:在我的资源中的"processed_ecg segment_csdn "

连续小波变换的定义

连续小波变换利用一组基函数(称为小波)对信号进行分析。这些小波是由一个母小波通过平移和缩放生成的。母小波 ψ(t) 是一个平均值为零的波形,通常具有快速衰减的特性。通过调整缩放因子 a 和平移参数 b 来生成不同的小波,从而能够聚焦于信号的不同特性。小波变换可以定义为:

CWT(a, b) = \frac{1}{\sqrt{\left | a \right |}}\int_{-\infty }^{+\infty }f(t)\varphi ^{*}(\frac{t-b}{a})dt

其中f(t) 是输入信号;ψ(t) 是母小波;a 是缩放参数(不等于零),控制小波的伸缩;b 是平移参数,控制小波在时间轴上的位置。

常用的母小波

Haar小波:可能是最简单的小波,适合处理具有突变点的信号;公式为:

\varphi (t) = \left\{\begin{matrix} 1 &t\in [0, \frac{1}{2}] \\ -1 &t\in[\frac{1}{2}, 1] \\ 0&other \end{matrix}\right.

Ricker小波:常用于边缘检测和图像处理中;公式为:

\psi (t) = \frac{2}{\sqrt{3}\sigma \pi ^{1/4}}(1-\frac{t^{2}}{\sigma ^{2}})e^{-t^{2}/2\sigma ^{2}}

这里的\sigma控制波形的宽度,通常取标准差的值。

Daubechies小波:一系列具有更平滑特性的小波,能更好地捕捉信号的详细信息,一般使用的是db4小波;公式为:

\psi (t) = \frac{1+\sqrt{3}}{4}(1+t)e^{-t/2}u(t)-\frac{1-\sqrt{3}}{4}(1-t)e^{-t/2}u(-t)

u(t)是信号与系统中的脉冲函数。

Morlet小波:结合了余弦波和高斯函数,适用于频率分析;表达式为:

\psi (t) = \pi ^{-1/4}e^{i\omega _{0}t}e^{-t^{2}/2}

其中,\omega _{0}是中心频率。

连续小波变换的实现

在本文使用Morlet小波作为母小波。首先我们来绘制原始V2导联信号图,绘制代码及图像如下:

import matplotlib.pyplot as plt
import json
import matplotlib

#字体样式和大小
matplotlib.rcParams['font.family'] = 'Times New Roman'
matplotlib.rcParams['font.size'] = 26

#加载ECG数据,请更换为自己的本地地址
with open(r"F:\ecg segment_cwt_csdn.json", "r") as file:
    ecg_data = json.load(file)
signal_data = ecg_data['data']
fs = ecg_data['fs']  #加载采样频率 hz=1000

# 获取V1导联的数据
signal = signal_data['V2']

# 创建图表并绘制V1导联
plt.figure(figsize=(15, 5))
plt.plot(signal)
plt.title('V2 Lead ECG Signal')
plt.xlabel('Time (samples)')
plt.ylabel('Amplitude')
plt.show()

连续小波变换代码实现

import numpy as np
import matplotlib.pyplot as plt
import json
import pywt
import matplotlib

#字体样式和大小
matplotlib.rcParams['font.family'] = 'Times New Roman'
matplotlib.rcParams['font.size'] = 26

# 加载ECG数据,更换为自己的本地储存地址
with open(r"F:\ecg segment_cwt_csdn.json", "r") as file:
    ecg_data = json.load(file)
signal_data = ecg_data['data']

#获取V2导联的数据
lead_data = signal_data['V2']

#定义连续小波变换
def extract_cwt_features(lead_data, scales):
    ##cmorB-C表示带宽为B,中心频率为C的莫雷特小波; sampling_period是信号的采样频率
    coefficients, frequencies = pywt.cwt(lead_data, scales, 'cmor1.5-1.0', sampling_period=1/1000)
    return coefficients

#设置小波尺度,这里设置的尺度参数是0-119
scales = np.arange(1, 120)

#计算时频特征
cwt_features = extract_cwt_features(lead_data, scales)

#绘制处理后的CWT结果
plt.figure(figsize=(12, 8))
plt.imshow(np.abs(cwt_features), aspect='auto', cmap='viridis')
plt.colorbar(label='Magnitude')
plt.title('Continuous Wavelet Transform (CWT) of V2 Lead ECG')
plt.xlabel('Time')
plt.ylabel('Scale')
plt.show()

运行上述代码得到的时频图:

标签:ecg,plt,CWT,matplotlib,小波,分析法,时频,import,data
From: https://blog.csdn.net/m0_71995775/article/details/140890109

相关文章

  • 数学建模 1 层次分析法
    学习资源声明:【哔哩哔哩】大师兄数学建模第二讲层次分析法根据资料学习,加入了一些个人的理解,整理成这篇笔记。1层次分析法的定义层次分析法:通过相互比较确定各准则对于目标的权重,及各方案对于每一准则的权重,这些权重在人的思维过程中通常是定性的,而在层次分析法中......
  • 数学建模 1 层次分析法(上机篇)
    学习资源声明:大师兄数学建模第二讲层次分析法通过学习,加以个人思考整理得此篇笔记,含大量实操图片记录。1MATLAB基础操作语句(实用版)快速查询网站:MATLAB命令快速查询网站   我们只需要掌握基本的语法即可,在实际比赛和科研中,即查即用,养成查工具资料和帮助文档的习惯......
  • 【学习笔记】Matlab和python双语言的学习(主成分分析法)
    文章目录前言一、主成分分析法1.主成分分析法简介2.主成分分析法原理3.主成分分析法思想4.PCA的计算步骤二、代码实现----Matlab三、代码实现----python总结前言通过模型算法,熟练对Matlab和python的应用。学习视频链接:https://www.bilibili.com/video/BV1EK41187......
  • 因子分析法————数据降维
    因子分析法通过研究变量间的相关系数矩阵,把这些变量间错综复杂的关系归结成少数几个综合因子,起到了很好的降维作用目录一、因子分析与主成分分析的对比1.原理对比2.作用区别二、因子分析的实例三、因子分析的理论介绍1.因子分析的模型2.模型假设3.因子载荷矩阵的统计意义(1)A的行元......
  • 快速功能点分析法与NESMA的比较
    一、快速功能点分析法快速功能点分析方法是依据国际标准(ISOIEC24570:2018《软件工程NESMA功能规模测量法功能点分析应用的定义和计算指南》)要求提出的一种软件规模测量方法,并充分考虑软件组织及需求或项目特性,目前采用预估功能点分析方法和估算功能点分析方法进行业务需......
  • 评价类模型-层次分析法
    该博客为个人学习清风建模的学习笔记,部分课程可以在B站:【强烈推荐】清风:数学建模算法、编程和写作培训的视频课程以及Matlab等软件教学_哔哩哔哩_bilibili完整课程可以在公众号“数学建模学习交流”付费获得。目录1模型介绍1.1引入模型1.2提出问题1.3解决问题 1.4判断......
  • 层次分析法
    需要评价指标:网络搜索……问题描述问题分为三层:目标层,准则层,方案层。以一个经典的旅游地选取为例,问题得层次结构如下:问题解决步骤正互反矩阵(判断矩阵)判断矩阵的作用:对每一层的指标进行打分,得到指标的权重,然后将这些权重用于下一层的指标。性质:\(A_{ij}*A_{ji}=1\)\(......
  • 层次分析法
    在MATLAB中计算层次分析法(AnalyticHierarchyProcess,AHP)主要涉及到构建判断矩阵、计算权重向量、进行一致性检验等步骤。以下是一个详细的步骤说明:一、明确问题与构建层次结构明确决策目标:首先,需要明确决策的目标以及相关的因素或准则。构建层次结构:将目标、准则和子准则......
  • 数学建模第一次笔记:层次分析法
    概要最近因为要参加数学建模的比赛,所以用博客来记录自己的数学建模学习过程,也分享出来,希望对大家有用,我的数学建模学习过程如下:1,先有一本数学建模和优秀论文的相关书籍,我的是学校发的。2,接下来便是自学或者跟着网课系统学习(这里推荐后者)3,我是跟着清风学习的数学建模,个人......
  • 数学建模——层次分析法 AHP(Python代码)
    层次分析法    层次分析法是由美国运筹学家、匹兹堡大学教授T.L.Saaty于20世纪70年代创立的一种系统分析与决策的综合评价方法,是在充分研究了人类思维过程的基础上提出来的,它较合理地解决了定性问题定量化的处理过程。    AHP的主要特点是通过建立递阶层次结......