python小波变换学习

小波变换

尺度函数 : scaling function (又称为父函数 father wavelet )
小波函数 : wavelet function(又称为母函数 mother wavelet)
连续的小波变换 :CWT
离散的小波变换 :DWT

小波变换的基本知识:
不同的小波基函数,是由同一个基本小波函数经缩放和平移生成的。
小波变换是将原始图像与小波基函数以及尺度函数进行内积运算, 所以一个尺度函数和一个小波基函数就可以确定一个小波变换。
离散小波变换函数

下面先列举3条关键理解:

小波分解,分解到的"不是频率域"!可以抽象理解为"小波域",但其实没有实际内涵!傅里叶变换到频率域是有实际内涵的;
小波分解得到的"小波系数"是"没有量纲"的!它其实是"没有实际意义的数",需要做系数重构才能从"小波域"再转回到"时域";
“系数重构"与"重构信号"不是一个东西!系数重构就是把无量纲的小波分解系数变回到有意义的"时域”;"重构信号"就是把分解的完整恢复回去。

离散小波变换函数:不同的适用处于搭配函数.

分解与重构/恢复信号:1级分解与重构原始信号函数为: dwt和dwt2 与 idwt和idwt2;多级(包括1级)分解与重构原始信号函数为: wavedec和wavedec2 与 waverec和waverec2;所以wavedec可涵盖dwt。系数重构:1级分解的系数重构用函数的是: upcoef和upcoef2;多级分解的系数重构用函数的是: wrcoef和wrcoef2。(多级)系数提取:多级分解低频近似系数提取:appcoef和appcoef2;多解分解高频细节系数提取:detcoef和detcoef2。

说明:"系数提取"只有"多级分解"才会用的到! 1级分解是不需要"系数提取"的!因为就分成了低频和高频2个部分,直接用1维或2维分解函数的返回结果就行了!所以:多级分解的系数提取,就相当于1级分解后的返回结果的直接画图。
import pywt

db3 = pywt.Wavelet(‘db3’) # 创建一个小波对象
print(db3)
“”"
Family name: Daubechies
Short name: db
Filters length: 6 #滤波器长度
Orthogonal: True #正交
Biorthogonal: True #双正交
Symmetry: asymmetric #对称性,不对称
DWT: True #离散小波变换
CWT: False #连续小波变换
“”"

def dwt_and_idwt():
‘’’
DWT 与 IDWT (离散的小波变换=>分解与重构)
使用db2 小波函数做dwt
‘’’

x = [3, 7, 1, 1, -2, 5, 4, 6]
cA, cD = pywt.dwt(x, 'db2')      # 得到近似值和细节系数
print(cA)                        # [5.65685425 7.39923721 0.22414387 3.33677403 7.77817459]
print(cD)                        # [-2.44948974 -1.60368225 -4.44140056 -0.41361256  1.22474487]
print(pywt.idwt(cA, cD, 'db2'))  # [ 3.  7.  1.  1. -2.  5.  4.  6.]# 传入小波对象,设置模式
w = pywt.Wavelet('sym3')
cA, cD = pywt.dwt(x, wavelet=w, mode='constant')
print(cA, cD)
print(pywt.Modes.modes)
# [ 4.38354585  3.80302657  7.31813271 -0.58565539  4.09727044  7.81994027]
# [-1.33068221 -2.78795192 -3.16825651 -0.67715519 -0.09722957 -0.07045258]
# ['zero', 'constant', 'symmetric', 'periodic', 'smooth', 'periodization', 'reflect', 'antisymmetric', 'antireflect']print(pywt.idwt([1, 2, 0, 1], None, 'db3', 'symmetric'))
print(pywt.idwt([1, 2, 0, 1], [0, 0, 0, 0], 'db3', 'symmetric'))
# [ 0.83431373 -0.23479575  0.16178801  0.87734409]
# [ 0.83431373 -0.23479575  0.16178801  0.87734409]

def wavelet_packets():
# 小波包 wavelet packets
X = [1, 2, 3, 4, 5, 6, 7, 8]
wp = pywt.WaveletPacket(data=X, wavelet=‘db3’, mode=‘symmetric’, maxlevel=3)
print(wp.data) # [1 2 3 4 5 6 7 8 9]
print(wp.level) # 0 #分解级别为0
print(wp[‘ad’].maxlevel) # 3

# 访问小波包的子节点
# 第一层:
print(wp['a'].data)       # [ 4.52111203  1.54666942  2.57019338  5.3986205   8.20681003 11.18125264]
print(wp['a'].path)       # a# 第2 层
print(wp['aa'].data)      # [ 3.63890166  6.00349136  2.89780988  6.80941869 15.41549196]
print(wp['ad'].data)      # [ 1.25531439 -0.60300027  0.36403471  0.59368086 -0.53821027]
print(wp['aa'].path)      # aa
print(wp['ad'].path)      # ad# 第3 层时:
print(wp['aaa'].data)
print([node.path for node in wp.get_level(3, 'natural')])  # 获取特定层数的所有节点,第3层有8个
# ['aaa', 'aad', 'ada', 'add', 'daa', 'dad', 'dda', 'ddd']# 依据频带频率进行划分
print([node.path for node in wp.get_level(3, 'freq')])
# ['aaa', 'aad', 'add', 'ada', 'dda', 'ddd', 'dad', 'daa']# 从小波包中 重建数据
X = [1, 2, 3, 4, 5, 6, 7, 8]
wp = pywt.WaveletPacket(data=X, wavelet='db1', mode='symmetric', maxlevel=3)
print(wp['ad'].data)  # [-2,-2]new_wp = pywt.WaveletPacket(data=None, wavelet='db1', mode='symmetric')
new_wp['a'] = wp['a']
new_wp['aa'] = wp['aa'].data
new_wp['ad'] = wp['ad'].data
new_wp['d'] = wp['d']
print(new_wp.reconstruct(update=False))
# new_wp['a'] = wp['a']  直接使用高低频也可进行重构
# new_wp['d'] = wp['d']
print(new_wp)  #: None
print(new_wp.reconstruct(update=True))  # 更新设置为True时。
print(new_wp)
# : [1. 2. 3. 4. 5. 6. 7. 8.]# 获取叶子结点
print([node.path for node in new_wp.get_leaf_nodes(decompose=False)])
print([node.path for node in new_wp.get_leaf_nodes(decompose=True)])
# ['aa', 'ad', 'd']
# ['aaa', 'aad', 'ada', 'add', 'daa', 'dad', 'dda', 'ddd']# 从小波包树中移除结点
dummy = wp.get_level(2)
for i in wp.get_leaf_nodes(False):print(i.path, i.data)
# aa [ 5. 13.]
# ad [-2. -2.]
# da [-1. -1.]
# dd [-1.11022302e-16  0.00000000e+00]
node = wp['ad']
print(node)  # ad: [-2. -2.]
del wp['ad']  # 删除结点
for i in wp.get_leaf_nodes(False):print(i.path, i.data)
# aa [ 5. 13.]
# da [-1. -1.]
# dd [-1.11022302e-16  0.00000000e+00]print(wp.reconstruct())  # 进行重建
# [2. 3. 2. 3. 6. 7. 6. 7.]wp['ad'].data = node.data  # 还原已删除的结点
print(wp.reconstruct())
# [1. 2. 3. 4. 5. 6. 7. 8.]assert wp.a == wp["a"]
print(wp["a"])
# a: [ 2.12132034  4.94974747  7.77817459 10.60660172]

if name == ‘main’:
dwt_and_idwt()
wavelet_packets()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细设计文档该怎么写

详细设计文档是软件开发过程中的一个关键阶段,它为每个软件模块的实现提供了详细说明。这份文档通常在概要设计阶段之后编写,目的是指导开发人员如何具体实现软件的功能。以下是撰写详细设计文档的步骤和一些示例: 步骤和组成部分 引言 目的…

【IDEA——连接MySQL数据库,创建库和表】

IDEA——连接MySQL数据库,创建库和表 1、打开idea数据库操作页面(两种打开方法都可以) 2、点击加号,选择Driver,方便导入连接数据库的驱动jar包 然后选择MySQL进行添加驱动 3、点击上一步页面的左上方的Data Sources连接本地数据…

单细胞测序没有中性粒细胞?

建库流程需要特别注意,参考10x官网: https://www.10xgenomics.com/support/software/cell-ranger/tutorials/cr-tutorial-neutrophilshttps://kb.10xgenomics.com/hc/en-us/articles/360004024032-Can-I-process-neutrophils-or-other-granulocytes-usi…

AI:103-基于深度学习的海上牧场鱼群识别技术

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大…

组播(多播)原理及代码

单播地址标识单个 IP 接口,广播地址标识某个子网的所有 IP 接口,多播地址标识一组 IP 接口。 单播和广播是寻址方案的两个极端(要么单个要么全部),多播则意在两者之间提供一种折中方 案。多播数据报只应该由对它感兴…

【HBase】——Shell操作

1 基本操作 1.1 进入 HBase 客户端命令行 bin/hbase shell1.2 查看帮助命令 能够展示 HBase 中所有能使用的命令,主要使用的命令有 namespace 命令空间相关, DDL 创建修改表格,DML 写入读取数据。 help1.2 namespace 1)创建命…

域名注册是免费的吗?怎么注册域名?(国科云)

在浩瀚的互联网海洋之中,域名是每个网站独一无二的门牌号,用户通过域名识别并访问不同的网站。域名是企业线上流量的主要入口,同时它也代表着一家企业或者一个品牌的重要形象,在当今信息化时代,域名的重要性已经无可替…

Golang 项目如何生成 swagger 文档

swag工具介绍和安装 Swag是一款可以将Go的注释转换为Swagger2.0格式文档的工具,生成接口文档用到的注释需要按照swag要求的格式书写。 使用 笔者用过的方案 第1步:GoLand by JetBrains 里 AltF12 调出控制台 第2步:使用go install方式下…

职场商务英语口语“自助餐”用英文怎么说?柯桥外语培训

“自助餐”用英语怎么说? ● 其实很简单,“自助餐”的英文就是:Buffet。 例句: At lunchtime, theres a choice between the buffet or the set menu.15857575376 午饭时,可以选择自助餐或套餐。 We are going to …

AutoPDMS的工程文件突然不见了……

1.用户好不容易一个工程的应力分析计算通过,不料,第二天使用时提示以下信息,对用户来说简直如同噩梦降临。 分析:要么用户移动了文件,要么用户删除了文件,用户两者都否定。无论怎么样文件不会莫名不见了&am…

linux(mysql下载以及操作)

下载mysql 查看镜像 docker images 下载MySQL镜像 mysql/mysql-server:8.0 创建文件夹,创建配置文件和放数据文件 mkdir -p /data/mysql/{conf,,data} 创建配置文件 my.cnf 写入配置文件my.cnf的代码 [client] default-character-setutf8[mysql] de…

基于SpringBoot的疫情居家管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的疫情居家管理系统,java…

反编译有哪些优势

在现在这个信息化的时代,软件开发中的编程是关键步骤,了解编程的反编译同样至关重要。对于大多数人来说,编程和反编译似乎是两个相对比较陌生的概念,但是都在软件开发周期中起着至关重要的作用。尤其是反编译,它在多个…

关于我花费六千多组了台window+Linux主机

一边学习,一边总结,一边分享! 写在前面 我在2023年12月组了一台“洋垃圾”的主机,一边当做台式机使用,一边当做服务器使用。这个方案算是相对比较划算的方案。我开始是打算直接单做服务器使用的,以及内存…

03-SpringCloud-Ribbon负载均衡

Ribbon负载均衡 1.1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1,怎么变成了http://localhost:8081的呢? 1.2.源码跟踪 为什么我们只输入…

Spring Cloud Gateway集成Knife4j

1、前提 网关路由能够正常工作。 案例 基于 Spring Cloud Gateway Nacos 实现动态路由拓展的参考地址:Spring Cloud Gateway Nacos 实现动态路由 详细官网案例:https://doc.xiaominfo.com/docs/middleware-sources/spring-cloud-gateway/spring-gatewa…

《算法导论》复习——CHP1、CHP2 算法基础

基本定义: 算法是一组有穷的规则,规定了解决某一特定类型问题的一系列运算。 关心算法的正确性和效率。 算法的五个重要特性:确定性、能行性、输入、输出、有穷性。 基础方法: 伪代码(Pseudocode)&#xff…

MATLAB基本绘图操作(二维和三维绘图)

MATLAB基本绘图操作 文章目录 MATLAB基本绘图操作1、二维平面绘图2、三维立体绘图 1、二维平面绘图 x0:0.01:2*pi; %从09开始,每次递增0.01,一直到2*pi结束 y sin(x) ; figure %建立一个幕布 plot(x, y) %绘制二维的平面图 title(y sin(x)) %标题…

Flink版本更新汇总(1.14-1.18)

0、汇总 1.14.0 1.有界流支持 Checkpoint; 2.批执行模式支持 DataStream 和 Table/SQL 混合应用; 3.新增 Hybrid Source 功能; 4.新增 缓冲区去膨胀 功能; 5.新增 细粒度资源管理 功能; 6.新增 DataStream 的 Pulsar …

element中Tree 树形控件实现节点过滤和懒加载节点

目录 1.代码实现2. 效果图3. 使用到的部分属性说明4. 更多属性配置查看element官网 1.代码实现 <template><div class"TreePage"><el-row :gutter"20"><!--村数据--><el-col :span"24"><div class"head-…