# 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)

现在，当我们对内置小波有了一些了解之后，让我们看看如何创建自定义小波对象。有两种方法可以做到这一点:

1. 传递实现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()的使用实例和所有内置小波的图像。然而，这个网站不再积极维护，并没有包括每一个小波中出现的小波。小波系数在该位置的精度也低于小波系数。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://johannesliu.gitbook.io/data-science-python-implemented/10.0-foundation_signal_processing/10.3-wavelets.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
