python小波分析cwt,Python中pywt小波分析库中的一些基本使用方法

python⼩波分析cwt,Python中pywt⼩波分析库中的⼀些基本使
⽤⽅法
尺度函数 : scaling function (在⼀些⽂档中⼜称为⽗函数 father wavelet )
⼩波函数 : wavelet function(在⼀些⽂档中⼜称为母函数 mother wavelet)
连续的⼩波变换 :CWT
离散的⼩波变换 :DWT
⼩波变换的基本知识:
不同的⼩波基函数,是由同⼀个基本⼩波函数经缩放和平移⽣成的。
音箱⼩波变换是将原始图像与⼩波基函数以及尺度函数进⾏内积运算,所以⼀个尺度函数和⼀个⼩波基函数就可以确定⼀个⼩波变换
⼩波变换后低频分量
杀虎口下载基本的⼩波变换函数
⼆维离散⼩波变换:
(官⽹上的例⼦)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def test_pywt():
import numpy as np
import matplotlib.pyplot as plt
import pywt
import pywt.data
# Load image
original = pywt.data.camera()
# Wavelet transform of image, and plot approximation and details
titles = ['Approximation', ' Horizontal detail',
dm500s接收机'Vertical detail', 'Diagonal detail']
coeffs2 = pywt.dwt2(original, 'bior1.3')
LL, (LH, HL, HH) = coeffs2
plt.imshow(original)
fig = plt.figure(figsize=(12, 3))
for i, a in enumerate([LL, LH, HL, HH]):
ax = fig.add_subplot(1, 4, i + 1)
ax.imshow(a, interpolation="nearest", ay)
ax.set_title(titles[i], fontsize=10)
ax.set_xticks([])
ax.set_yticks([])
fig.tight_layout()
plt.show()
# test_pywt()
#coding=gbk
'''
Created on 2018年10⽉9⽇
这个模块是为了测试 pywt 库 的相关⽤法
寻自我
@author: Administrator
长春李大夫'''
import pywt
print(pywt.families()) #打印出⼩波族
# ['haar', 'db', 'sym', 'coif', 'bior', 'rbio', 'dmey', 'gaus', 'mexh', 'morl', 'cgau', 'shan', 'fbsp', 'cmor']
for family in pywt.families(): #打印出每个⼩波族的每个⼩波函数
print('%s family: '%(family) + ','.join(pywt.wavelist(family)))
# haar family: haar
# db family:
db1,db2,db3,db4,db5,db6,db7,db8,db9,db10,db11,db12,db13,db14,db15,db16,db17,db18,db19,db20,db21,db22,db23,db24,db2
# sym family:
sym2,sym3,sym4,sym5,sym6,sym7,sym8,sym9,sym10,sym11,sym12,sym13,sym14,sym15,sym16,sym17,sym18,sym19,sym20
# coif family: coif1,coif2,coif3,coif4,coif5,coif6,coif7,coif8,coif9,coif10,coif11,coif12,coif13,coif14,coif15,coif16,coif17
# bior family:
bior1.1,bior1.3,bior1.5,bior2.2,bior2.4,bior2.6,bior2.8,bior3.1,bior3.3,bior3.5,bior3.7,bior3.9,bior4.4,bior5.5,bior6.8
# rbio family:
rbio1.1,rbio1.3,rbio1.5,rbio2.2,rbio2.4,rbio2.6,rbio2.8,rbio3.1,rbio3.3,rbio3.5,rbio3.7,rbio3.9,rbio4.4,rbio5.5,rbio6.8
# dmey family: dmey
# gaus family: gaus1,gaus2,gaus3,gaus4,gaus5,gaus6,gaus7,gaus8
# mexh family: mexh
# morl family: morl
# cgau family: cgau1,cgau2,cgau3,cgau4,cgau5,cgau6,cgau7,cgau8
# shan family: shan
# fbsp family: fbsp
# cmor family: cmor
db3 = pywt.Wavelet('db3') #创建⼀个⼩波对象
print(db3)
# Filters length: 6 #滤波器长度
# Orthogonal: True #正交
# Biorthogonal: True #双正交
# Symmetry: asymmetric #对称性,不对称
# DWT: True #离散⼩波变换
# CWT: False #连续⼩波变换
def print_array(arr):
print('[%s]'%','.join(['%.14f'%x for x in arr]))
#离散⼩波变换的⼩波滤波系数
# dec_lo Decomposition filter values 分解滤波值, rec 重构滤波值
#db3.filter_bank 返回4 个属性
print(db3.filter_bank == (db3.dec_lo, db3.dec_hi, _lo, _hi)) #True
print(db3.dec_len)
_len) #6
# 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]
#IDWT
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) # [ 4.38354585 3.80302657 7.31813271 -0.58565539 4.09727044 7.81994027]
print(cD) # [-1.33068221 -2.78795192 -3.16825651 -0.67715519 -0.09722957 -0.07045258] print(des)
# ['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]
#⼩波包 wavelet packets
X = [1, 2, 3, 4, 5, 6, 7, 8]
wp = pywt.WaveletPacket(data=X, wavelet='db3', mode='symmetric', maxlevel=3)
print(wp)
print(wp.data) #[1 2 3 4 5 6 7 8 9]
print(repr(wp.path))
print(wp.level) # 0 #分解级别为0
print(wp['ad'].maxlevel) # 3
#访问⼩波包的⼦节点
#第⼀层:
print(wp['a'].data)
# [ 4.52111203 1.54666942 2.57019338 5.3986205 8.19182134 11.27067814
# 12.65348525] # 当设置分解的 maxlevel 时,分解得到的data
#[ 4.52111203 1.54666942 2.57019338 5.3986205 8.20681003 11.18125264] 设置为2 时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)
# [ 6.7736584 5.78857317 5.69392399 10.98672847 19.92241106]
# print(wp['aaaa'].data) #超过最⼤层时,会报错
#获取特定层数的所有节点
print([node.path for node _level(3, 'natural')]) #第3层有8个
# ['aaa', 'aad', 'ada', 'add', 'daa', 'dad', 'dda', 'ddd']
#依据频带频率进⾏划分
print([node.path for node _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'] = [-2,-2] # wp['ad'].data
new_wp['d'] = wp['d']
print(struct(update=False))
# new_wp['a'] = wp['a'] 直接使⽤⾼低频也可进⾏重构
# new_wp['d'] = wp['d']
print(new_wp) #: None
print(struct(update=True)) #更新设置为True时。
print(new_wp)
# : [1. 2. 3. 4. 5. 6. 7. 8.]
#获取叶⼦结点
print([node.path for node in _leaf_nodes(decompose=False)])
# ['aa', 'ad', 'd']
print([node.path for node in _leaf_nodes(decompose=True)])
# ['aaa', 'aad', 'ada', 'add', 'daa', 'dad', 'dda', 'ddd']
#从⼩波包树中移除结点
原型批评
dummy = wp.get_level(2)
for i _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 _leaf_nodes(False):
print(i.path, i.data)

本文发布于:2024-09-22 04:00:49,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/494488.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:变换   函数   波包   结点   分解   滤波
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议