10.3 小波变换
10.3.1 小波对象
小波族和内建小波名称
小波对象实际上是一组特定于dwt的数据的方便载体,比如正交镜滤波器和一些与之相关的一般属性。
首先让我们看看创建小波对象的方法。最简单和最方便的方法是使用内置的小波。
这些小波被组织成小波族。最常用的家庭有:
[]:print(pyet.families())
[]:['haar', 'db', 'sym', 'coif', 'bior', 'rbio', 'dmey', 'gaus', 'mexh', 'morl', 'cgau', 'shan', 'fbsp', 'cmor']
将wavelist()函数的姓作为参数传递,用于获得每个家族中的小波名列表。
[]: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, db25, db26, db27, db28, db29, db30, db31, db32, db33, db34, db35, db36, db37, db38
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
创建小波对象
现在,当我们知道了所有的名字,让我们最终创建一个小波对象:
[]:w = pywt.Wavelet('db3')
小波属性
但是我们能对小波对象做什么呢?它们有一些有趣的信息。
首先,让我们尝试打印一个小波对象。这显示了关于它的名字,它的姓和一些属性,如正交性和对称性的简短信息。
[]:print(w)
Wavelet db3
Family name: Daubechies
Short name: db
Filters length: 6
Orthogonal: True
Biorthogonal: True
Symmetry: asymmetric
DWT: True
CWT: False
但最重要的信息是用于离散小波变换的小波滤波器系数。这些系数可以通过dec_lo,小波。dec_hi, rec_lo, rec_hi属性得到,分别对应于低通分解滤波器和高通分解滤波器,低通重构滤波器和高通重构滤波器:
[]:def print_array(arr):
print("[%s]" % ", ".join(["%.14f" % x for x in arr]))
获取过滤器数据的另一种方法是使用filter_bank属性,它在一个元组中返回所有四个过滤器:
[]:w.filter_bank == (w.dec_lo, w.dec_hi, w.rec_lo, w.rec_hi)
其他小波属性为:小波名称,short_family_name和family_name:
[]:w.name, w.short_family_name, w.family_name
[]:('db3', 'db', 'Daubechies')
分解(dec_len)和重构(rec_len)过滤器长度:
[]:int(w.dec_len), int(w.rec_len)
(6, 6)
正交性与双正交性
w.orthogonal, w.biorthogonal
(True, True)
对称性
[]:w.symmetry
[]:'asymmetric'
与滤波器相关联的尺度函数(vanishing_moments_phi)和小波函数(vanishing_moments_psi)的消失矩数:
[]:w.vanishing_moments_phi, w.vanishing_moments_psi
[]:(0, 3)
现在,当我们对内置小波有了一些了解之后,让我们看看如何创建自定义小波对象。有两种方法可以做到这一点:
传递实现filter_bank属性的filter bank对象。属性必须返回四个过滤器系数。
[]:class MyHaarFilterBank(object):
... @property
... def filter_bank(self):
... from math import sqrt
... return ([sqrt(2)/2, sqrt(2)/2], [-sqrt(2)/2, sqrt(2)/2],
... [sqrt(2)/2, sqrt(2)/2], [sqrt(2)/2, -sqrt(2)/2])
[]:my_wavelet = pywt.Wavelet('My Haar Wavelet', filter_bank=MyHaarFilterBank())
传递实现filter_bank属性的filter bank对象。属性必须返回四个过滤器系数。
[]:from math import sqrt
my_filter_bank = ([sqrt(2)/2, sqrt(2)/2], [-sqrt(2)/2, sqrt(2)/2],
[sqrt(2)/2, sqrt(2)/2], [sqrt(2)/2, -sqrt(2)/2])
my_wavelet = pywt.Wavelet('My Haar Wavelet', filter_bank=my_filter_bank)
注意,这种自定义小波不会将所有属性设置为正确的值:
[]:my_wavelet
[]: Wavelet My Haar Wavelet
Family name:
Short name:
Filters length: 2
Orthogonal: False
Biorthogonal: False
Symmetry: unknown
DWT: True
CWT: False
不过,你可以自己设置一些:
[]:my_wavelet.orthogonal = True
my_wavelet.biorthogonal = True
[]:print(my_wavelet)
Wavelet My Haar Wavelet
Family name:
Short name:
Filters length: 2
Orthogonal: True
Biorthogonal: True
Symmetry: unknown
DWT: True
CWT: False
找点乐子
我们都知道小波函数的有趣之处在于小波函数。如果没有计算小波函数和尺度函数近似值的工具,这个包会是什么样子呢?
这就是wavefun()方法的目的,该方法基于滤波器系数,在给定的细化级别上近似尺度函数(phi)和小波函数(psi)。
返回值的个数取决于小波的正交性。对于正交小波,结果是具有尺度函数、小波函数和xgrid坐标的元组。
[]:w = pywt.Wavelet('sym3')
w.orthogonal
[]:True
[]:(phi, psi, x) = w.wavefun(level=5)
对于双正交(非正交)小波,采用不同的尺度和小波函数进行分解和重构,从而返回五个元素:分解尺度和小波函数逼近、重构尺度和小波函数逼近以及xgrid。
[]:w = pywt.Wavelet('bior1.3')
w.orthogonal
[]:(phi_d, psi_d, phi_r, psi_r, x) = w.wavefun(level=5)
您还可以在小波属性浏览器页面上找到wavefun()的使用实例和所有内置小波的图像。然而,这个网站不再积极维护,并没有包括每一个小波中出现的小波。小波系数在该位置的精度也低于小波系数。
Last updated
Was this helpful?