python连续小波分析CWT

2023-11-13

转自:python连续小波分析

0 引言

我们学过内积,内积的物理含义:两个图形的相似性,若两个图形完全正交,则内积为0,若两个图形完全一样,则系数为1(相对值)。

小波变换的实质是:原信号与小波基函数的相似性。小波系数就是小波基函数与原信号相似的系数。(英文文献中是这样解释:The definition of wavelet transform shows that the wavelet analysis is a measure of similarity the basis functions(wavelets)and the original function .The coefficients caculated indicate how close the function is to the danghter wavelet at that particular scale )

连续小波变换:小波函数与原信号对应点相乘,再相加,得到对应点的小波变换系数,平移小波基函数,再计算小波函数与原信号对应点相乘,再相加,这样就得到一系列的小波系数。

对于离散小波变换(由于很多小波函数不是正交函数,因此需要一个尺度函数)所以,原信号函数可以分解成尺度函数和小波函数的线性组合,在这个函数中,尺度函数产生低频部分,小波函数产生高频部分。
(本段摘自CSDN博主「不负韶华T」:https://blog.csdn.net/heifan2014/article/details/72561758)

1 实例

1.1 结果图

上面为原始信号,下面为连续小波变换得到的时频数据
在这里插入图片描述
涉及到代码不会的知识点均可在下链接查找:
小波变换介绍

小波时频(尺度图)的绘制原理与实现

pywt模块使用说明

Python Matplotlib add_subplot 和 subplots_adjust详解及代码详细说明 配图片说明

matplotlib.pyplot contourf()函数的使用

1.2 代码

import numpy as np
import pywt
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pylab as plt

sampling_rate = 1024  # 采样频率
t = np.arange(0, 1.0, 1.0/sampling_rate)  # 0-1.0之间的数,步长为1.0/sampling_rate
f1 = 100  # 频率
f2 = 200
f3 = 300
data = np.piecewise(t, [t < 1, t < 0.8, t < 0.3], 
                    [lambda t: np.sin(2 * np.pi * f1 * t), 
                     lambda t: np.sin(2 * np.pi * f2 * t), 
                     lambda t: np.sin(2 * np.pi * f3 * t)]
                    )
wavename = "cgau8"  # 小波函数
totalscal = 256     # totalscal是对信号进行小波变换时所用尺度序列的长度(通常需要预先设定好)
fc = pywt.central_frequency(wavename)  # 计算小波函数的中心频率
cparam = 2 * fc * totalscal  # 常数c
scales = cparam/np.arange(totalscal, 1, -1)  # 为使转换后的频率序列是一等差序列,尺度序列必须取为这一形式(也即小波尺度)
[cwtmatr, frequencies] = pywt.cwt(data, scales, wavename, 1.0/sampling_rate)  # 连续小波变换模块

plt.figure(figsize=(8, 4))
plt.subplot(211)  # 第一整行
plt.plot(t, data)
plt.xlabel(u"time(s)")
plt.title(u"300Hz 200Hz 100Hz Time spectrum")
plt.subplot(212)  # 第二整行

plt.contourf(t, frequencies, abs(cwtmatr))
plt.ylabel(u"freq(Hz)")
plt.xlabel(u"time(s)")
plt.subplots_adjust(hspace=0.4) #调整边距和子图的间距 hspace为子图之间的空间保留的高度,平均轴高度的一部分
plt.show()

1.3 结果分析

  • 小波变换需要提前设定 totalscal(对信号进行小波变换时所用尺度序列的长度),本文为 256,小波变换计算结果返回了 cwtamtr和frequencies,其结构分别为 (255, 1024),(255,),数据一共 1024 个

  • cwtmatr :小波变换的返回结果之一,包括实部和虚部,结构大小为 (255, 1024)

    • 在连续小波变换时,当选用小波母函数是复数而非实数时,则该小波变换就定义为连续复小波变换,变换后的系数为复数,即WTf=WTr+jWTi,其中WTr和WTi为复小波系数的实部和虚部。
    • 复小波变换就是用实部和虚部两个实小波同时对信号进行变换。复小波的实部和虚部通常是正交的,所以信号的复小波变换实际上是将该信号在两个互相正交的空间同时做实小波变换,相比实小波变换只能得到原信号一个空间中的信息,复小波同时提供了两个正交空间的信息。
    • 这样,复小波变换除了提供类似于实小波变换的幅值信息外,还可以提供两个正交空间中信号分量间特有的相位信息。可以得到的实部、虚部、幅值和相位四种基本信息进行适当的组合构成复小波变换的复合信息。这些特点有助于更准确地捕捉畸变信号和提供更丰富的信号细微特征差异,克服实小波无相位信息和平移敏感性的缺点。
      在这里插入图片描述
  • frequencies:小波变换返回另一结果,结构为 {ndarray: (255, )},为计算出来的时频数据
    在这里插入图片描述

2 cwt 使用介绍

pywt.cwt(data, scales, wavelet)
连续小波变换

在这里插入图片描述

  • Parameters:
    • data : array_like, 信号数组
    • scales : 要使用的小波尺度(s)。
      可以用 *f = scale2frequency(wavelet, scale)/sampling_period 来确定物理频率大小。f的单位是赫兹,采样周期的单位为秒。
    • wavelet : Wavelet 对象或名字
    • sampling_period : float
      频率输出的采样周期。coefs的计算值与sampling_period的选择无关。scales不按抽样周期进行缩放。
    • axis: int, optional
      计算CWT的轴。如果不给出,则使用最后一个轴。
  • Returns:
    • coefs : array_like,
      给定尺度和小波的输入信号的连续小波变换。第一维是scales,其余为data
    • frequencies : array_like。
      如果采样周期的单位是秒,那么频率的单位是赫兹。否则,假设采样周期为1。

3. 参考链接

[1] matplotlib.pyplot contourf()函数的使用 2018.11;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python连续小波分析CWT 的相关文章

随机推荐

  • 如何用Flask和Redis来动态维护代理池

    我们在爬虫时可能会遇到封IP的问题 那么利用代理就可以进行IP的伪装 然后进行爬虫的请求 我们有时会需要非常多的ip 那么维护一个代理池 代理的队列 可以存入或取出 需要对整个池进行定期的检查和更新 以此来保证代理的高质量 也就是代理的检测
  • 腹部仿体abdomen phantom的MATLAB实现及探讨

    abdomen phantom 官网给出的切片图如下 我利用MATLAB实现的情况如下 切片像素矩阵为256 256时 中心切片如图 切片像素矩阵为512512时 中心切片如图 可见 1 512512尺寸的在线对区域差别明显 多一条竖直线
  • 学习Java——自动拆装箱

    目录 引言 基本数据类型 数据类型有什么好处 整数的取值范围 超出范围怎么办 包装类型 为什么需要包装类 拆箱与装箱 自动拆箱与装箱 实现原理 哪些场景会用到 场景一 将基本数据类型放入集合类 场景二 包装类型和基本类型的大小比较 场景三
  • AD软件点击启动没有反应

    文章目录 一 AD无法启动 二 解决方法 一 AD无法启动 之前用了很久的AD16 突然某一天打开电脑 点开AD 结果一点反应没有 我还楞了一下 怎么今天你小子不想上班了 然后又点了一次 还是没反应 于是头铁继续试了几次 离了个大谱 一点东
  • vue-element-admin 页面内点详情跳转

    之前都是点击按钮以弹窗的形式展示信息 现在有个需求是点了页面内的详情按钮后进行路由跳转 跳到一个新的页面上去 1 先添加路由 route index js path test component Layout redirect test n
  • Windows Server2016 安装docker 所踩的坑

    献给小白用户 首先参考官网文档 https docs microsoft com zh cn virtualization windowscontainers deploy containers deploy containers on s
  • 2023年最新前端面试题汇总大全二(含答案超详细,Vue,TypeScript,React,微信小程序,Webpack 汇总篇)-- 持续更新

    HTML篇 CSS篇 JS篇 Vue篇 TpeScript篇 React篇 微信小程序篇 前端面试题汇总大全 含答案超详细 HTML JS CSS汇总篇 持续更新 前端面试题汇总二 逐步更新 五 Vue 篇 1 谈谈你对MVVM开发模式的理
  • 万物革新人们刷脸支付需求越来越多元化

    随着时代的进步 技术的革新 消费者的消费逐渐感性化 它们已经不满足于大众化的同类消费 独出心裁 别具匠心的个性化消费逐渐成为潮流 刷脸支付的出现 让消费者拥有更具科技感 新鲜感 以及高效的消费体验 更是尽可能的满足了年轻一代消费者的支付需求
  • “新卷王”X-volution

    编辑 Happy 首发 AIWalker 在本文中 华为上交 华为海思提出了一种集成卷积与自注意力的Xvolution 它将卷积与自注意力进行了集成 同时利用卷积的局部特征提取能力与自注意力的全局建模能力 更重要的是 它通过结构重参数化机制
  • 链表大小排序方法c语言,C语言数据结构 链表与归并排序实例详解

    C语言数据结构 链表与归并排序实例详解 归并排序适合于对链表进行原址排序 即只改变指针的连接方式 不交换链表结点的内容 归并排序的基本思想是分治法 先把一个链表分割成只有一个节点的链表 然后按照一定顺序 自底向上合并相邻的两个链表 只要保证
  • sklearn中的线性回归模型中的transform()模型讲解

    利用sklearn进行线性拟合时 通常要进行数据转换 目的在于将数据集中的数据转换为可供Python进行解算的矩阵 举一个栗子来说明 假设我们使用多项式回归来做模拟 阶次为2 有4个特征 易知 我们的多项式展开为 由上式易知 4个特征加一个
  • 下载后端传来的excel文件

    html内容
  • MATLAB应用3——深度视觉 奥比中光Astra S显示RGB和深度信息

    首先从官网下载OpenNI驱动并安装 以及添加环境变量 MATLAB代码 参考 https blog csdn net limingmin2020 article details 109445787 首次使用需编译mxNI cpp文件 生成
  • SCI期刊画图常用颜色归纳总结

    我导师曾审稿300 他经常教导我们 论文中图片的质量是非常重要的 我审稿时主要看稿件的图表 PS 当然他说实验方法和结果很很很重要 还有其他的就不讨论了 因为本篇文章主要讲关于论文画图的事 我通常用PS画学术图 当然其他软件都可以 比如我师
  • 打印A4纸图片需要多少像素和分辨率?

    我们如果要设计杂志用的图片 A4大小的需要多少像素大小和分辨率呢 一般来说 给铜版纸使用的300dpi就够用了 太小打印出来不一定清晰 太大的话耗费内存和CPU处理起来十分慢 所以300dpi是一个很好的分界线 A4物理大小是21厘米 29
  • 【视频解读】动手学深度学习V2_02深度学习介绍

    1 AI地图 人工智能的地图 x轴是不同模式 由符号学到概率模型 到机器学习 Y轴是我想做的东西 最底下的是感知 我得了解这是什么东西 然后做推理 形成自己的知识 最后做规划 最底层的就是感知 就是我能够看到这个物体 比如这个屏幕等 做推理
  • 创建索引分区

    Oracle学习四 创建 索引分区 作者 mckobe23 http mckobe23 itpub net 发表于 2007 03 13 18 30 分类 Oracle 出处 http mckobe23 itpub net post 291
  • vue 中导出的方法,导出xls/zip/mp4等

    在我的项目中会用到导出功能 导出xls zip mp4文件的需求 所以直接整合一下导出功能的方法 首先引入方法 import downloadXls downloadZip from utils download 然后再运用 我这个地方是需
  • python 编码

    1 ASCII Unicode和UTF 8 计算机只能处理数字 如果要处理文本 就必须把文字转换为数字 因为计算机是美国人发明的 因此最早只有127个字母被编码到计算机里 包含大小写英文字母 数字和一些符号 这个编码表被称为ASCII编码
  • python连续小波分析CWT

    目录 0 引言 1 实例 1 1 结果图 1 2 代码 1 3 结果分析 2 cwt 使用介绍 3 参考链接 转自 python连续小波分析 0 引言 我们学过内积 内积的物理含义 两个图形的相似性 若两个图形完全正交 则内积为0 若两个图