在数值分析 和泛函分析 领域中,离散小波变换 (Discrete Wavelet Transform,DWT)是小波被离散采样的小波变换 。与其他小波变换一样,它与傅里叶变换相比的一个关键优势是时间分辨率:它既能捕获频率信息,又能捕获位置(时间上的位置)信息。
第一个离散小波变换由匈牙利 数学家哈尔 发明,离散小波变换顾名思义就是离散的输入以及离散的输出,但是这里并没有一个简单而明确的公式来表示输入及输出的关系,只能以阶层式架构来表示。
首先我们定义一些需要用到的信号及滤波器。
x[n]:离散的输入信号,长度为N。
g
[
n
]
{\displaystyle g[n]}
:low pass filter低通滤波器,可以将输入信号的高频部分滤掉而输出低频部分。
h
[
n
]
{\displaystyle h[n]}
:high pass filter高通滤波器,与低通滤波器相反,滤掉低频部分而输出高频部分。
↓
{\displaystyle \downarrow }
Q:downsampling filter降采样滤波器,如果以x[n]作为输入,则输出y[n]=x[Qn]。此处举例Q=2。
举例说明:
清楚规定以上符号之后,便可以利用阶层架构来介绍如何将一个离散信号作离散小波变换:
架构中的第1层(1st stage)
x
1
,
L
[
n
]
=
∑
k
=
0
K
−
1
x
[
2
n
−
k
]
g
[
k
]
{\displaystyle x_{1,L}[n]=\sum _{k=0}^{K-1}x[2n-k]g[k]}
x
1
,
H
[
n
]
=
∑
k
=
0
K
−
1
x
[
2
n
−
k
]
h
[
k
]
{\displaystyle x_{1,H}[n]=\sum _{k=0}^{K-1}x[2n-k]h[k]}
架构中的第2层(2nd stage)
x
2
,
L
[
n
]
=
∑
k
=
0
K
−
1
x
1
,
L
[
2
n
−
k
]
g
[
k
]
{\displaystyle x_{2,L}[n]=\sum _{k=0}^{K-1}x_{1,L}[2n-k]g[k]}
x
2
,
H
[
n
]
=
∑
k
=
0
K
−
1
x
1
,
L
[
2
n
−
k
]
h
[
k
]
{\displaystyle x_{2,H}[n]=\sum _{k=0}^{K-1}x_{1,L}[2n-k]h[k]}
可继续延伸
⋮
{\displaystyle \vdots }
⋮
{\displaystyle \vdots }
架构中的第
α
{\displaystyle \alpha }
层(
α
−
t
h
{\displaystyle \alpha -th}
stage)
x
α
,
L
[
n
]
=
∑
k
=
0
K
−
1
x
α
−
1
,
L
[
2
n
−
k
]
g
[
k
]
{\displaystyle x_{\alpha ,L}[n]=\sum _{k=0}^{K-1}x_{\alpha -1,L}[2n-k]g[k]}
x
α
,
H
[
n
]
=
∑
k
=
0
K
−
1
x
α
−
1
,
L
[
2
n
−
k
]
h
[
k
]
{\displaystyle x_{\alpha ,H}[n]=\sum _{k=0}^{K-1}x_{\alpha -1,L}[2n-k]h[k]}
注意:若输入信号
x
[
n
]
{\displaystyle x[n]}
的长度是N,则第
α
{\displaystyle \alpha }
层中的
x
α
,
L
[
n
]
{\displaystyle x_{\alpha ,L}[n]}
及
x
α
,
H
[
n
]
{\displaystyle x_{\alpha ,H}[n]}
的长度为
N
2
α
{\displaystyle {\frac {N}{2^{\alpha }}}}
此时的输入信号变成
x
[
m
,
n
]
{\displaystyle x[m,n]}
,而变换过程变得更复杂,说明如下:
首先对n方向作高通、低通以及降频的处理
v
1
,
L
[
m
,
n
]
=
∑
k
=
0
K
−
1
x
[
m
,
2
n
−
k
]
g
[
k
]
{\displaystyle v_{1,L}[m,n]=\sum _{k=0}^{K-1}x[m,2n-k]g[k]}
v
1
,
H
[
m
,
n
]
=
∑
k
=
0
K
−
1
x
[
m
,
2
n
−
k
]
h
[
k
]
{\displaystyle v_{1,H}[m,n]=\sum _{k=0}^{K-1}x[m,2n-k]h[k]}
接着对
v
1
,
L
[
m
,
n
]
{\displaystyle v_{1,L}[m,n]}
与
v
1
,
H
[
m
,
n
]
{\displaystyle v_{1,H}[m,n]}
延著m方向作高低通及降频动作
x
1
,
L
L
[
m
,
n
]
=
∑
k
=
0
K
−
1
v
1
,
L
[
2
m
−
k
,
n
]
g
[
k
]
{\displaystyle x_{1,LL}[m,n]=\sum _{k=0}^{K-1}v_{1,L}[2m-k,n]g[k]}
x
1
,
H
L
[
m
,
n
]
=
∑
k
=
0
K
−
1
v
1
,
L
[
2
m
−
k
,
n
]
h
[
k
]
{\displaystyle x_{1,HL}[m,n]=\sum _{k=0}^{K-1}v_{1,L}[2m-k,n]h[k]}
x
1
,
L
H
[
m
,
n
]
=
∑
k
=
0
K
−
1
v
1
,
H
[
2
m
−
k
,
n
]
g
[
k
]
{\displaystyle x_{1,LH}[m,n]=\sum _{k=0}^{K-1}v_{1,H}[2m-k,n]g[k]}
x
1
,
H
H
[
m
,
n
]
=
∑
k
=
0
K
−
1
v
1
,
H
[
2
m
−
k
,
n
]
h
[
k
]
{\displaystyle x_{1,HH}[m,n]=\sum _{k=0}^{K-1}v_{1,H}[2m-k,n]h[k]}
经过(1)(2)两个步骤才算完成2-D DWT的一个stage。
在讨论复杂度之前,先做一些定义,当x[n]*y[n]时,x[n]之长度为N,y[n]之长度为L:
⇒
I
D
F
T
N
+
L
−
1
[
D
F
T
N
+
L
−
1
(
x
[
n
]
)
D
F
T
N
+
L
−
1
(
y
[
n
]
)
]
{\displaystyle \ \Rightarrow IDFT_{N+L-1}\left[DFT_{N+L-1}(x[n])DFT_{N+L-1}(y[n])\right]}
其中,
I
D
F
T
N
+
L
−
1
{\displaystyle \ IDFT_{N+L-1}}
为(N+L-1)点离散傅里叶逆变换(inverse discrete Fourier transform)
D
F
T
N
+
L
−
1
{\displaystyle \ DFT_{N+L-1}}
为(N+L-1)点离散傅里叶变换(discrete Fourier transform)
(1)一维离散小波变换之复杂度(没有分段卷积(sectioned convolution)):
3
2
(
N
+
L
−
1
)
log
2
(
N
+
L
−
1
)
≈
3
2
N
log
2
N
{\displaystyle {\frac {3}{2}}(N+L-1)\log _{2}{(N+L-1)}\approx {\frac {3}{2}}N\log _{2}N}
(2)当 N >>> L 时,使用 “分段卷积(sectioned convolution)”的技巧:
将x[n]切成很多段,每段长度为
N
1
{\displaystyle \mathbb {N} _{1}}
,总共会有
S
=
N
N
1
{\displaystyle S={\frac {N}{N_{1}}}}
段,其中
N
>
N
1
>>
L
{\displaystyle N>N_{1}>>L}
。
则
x
[
n
]
∗
g
[
n
]
=
x
1
[
n
]
∗
g
[
n
]
+
x
2
[
n
]
∗
g
[
n
]
+
.
.
.
+
x
s
[
n
]
∗
g
[
n
]
{\displaystyle \ x[n]*g[n]=x_{1}[n]*g[n]+x_{2}[n]*g[n]+...+x_{s}[n]*g[n]}
x
[
n
]
∗
h
[
n
]
=
x
1
[
n
]
∗
h
[
n
]
+
x
2
[
n
]
∗
h
[
n
]
+
.
.
.
+
x
s
[
n
]
∗
h
[
n
]
{\displaystyle \ x[n]*h[n]=x_{1}[n]*h[n]+x_{2}[n]*h[n]+...+x_{s}[n]*h[n]}
复杂度为:
3
2
S
(
N
1
+
L
−
1
)
log
2
(
N
1
+
L
−
1
)
≈
3
2
S
N
1
log
2
(
N
1
+
L
−
1
)
≈
3
2
N
log
2
(
N
1
+
L
−
1
)
≈
3
2
N
log
2
N
1
{\displaystyle {\begin{aligned}{\frac {3}{2}}S(N_{1}+L-1)\log _{2}{(N_{1}+L-1)}&\approx {\frac {3}{2}}SN_{1}\log _{2}(N_{1}+L-1)\\&\approx {\frac {3}{2}}N\log _{2}(N_{1}+L-1)\\&\approx {\frac {3}{2}}N\log _{2}N_{1}\\\end{aligned}}}
在这里要注意的是,当N>>L时,一维离散小波变换之复杂度是呈线性的(随N),
O
(
N
)
{\displaystyle {\mathit {O(N)}}}
。
(3)多层(Multiple stages )的情况下:
1.若
x
a
,
H
[
n
]
{\displaystyle \ x_{a,H}[n]}
不再分解时:
C
o
m
p
l
e
x
i
t
y
≈
(
N
+
N
2
+
N
4
+
N
8
+
.
.
.
+
2
)
3
2
log
2
N
1
=
(
2
N
−
2
)
3
2
log
2
N
1
≈
3
N
log
2
N
1
{\displaystyle {\begin{aligned}Complexity&\approx \left(N+{\frac {N}{2}}+{\frac {N}{4}}+{\frac {N}{8}}+...+2\right){\frac {3}{2}}\log _{2}N_{1}\\&=(2N-2){\frac {3}{2}}\log _{2}N_{1}\\&\approx 3N\log _{2}N_{1}\\\end{aligned}}}
2.若
x
a
,
H
[
n
]
{\displaystyle \ x_{a,H}[n]}
也细分时:
C
o
m
p
l
e
x
i
t
y
≈
(
N
+
2
N
2
+
4
N
4
+
8
N
8
+
.
.
.
+
N
2
2
)
3
2
log
2
N
1
=
(
N
log
2
N
)
3
2
log
2
N
1
{\displaystyle {\begin{aligned}Complexity&\approx \left(N+2{\frac {N}{2}}+4{\frac {N}{4}}+8{\frac {N}{8}}+...+{\frac {N}{2}}2\right){\frac {3}{2}}\log _{2}N_{1}\\&=(N\log _{2}N){\frac {3}{2}}\log _{2}N_{1}\\\end{aligned}}}
(4)二维离散小波变换之复杂度(没有分段卷积(sectioned convolution)):
⇒
M
3
2
(
N
+
L
−
1
)
log
2
(
N
+
L
−
1
)
+
(
N
+
L
−
1
)
3
2
(
M
+
L
−
1
)
log
2
(
M
+
L
−
1
)
{\displaystyle \ \Rightarrow M{\frac {3}{2}}(N+L-1)\log _{2}{(N+L-1)}+(N+L-1){\frac {3}{2}}(M+L-1)\log _{2}{(M+L-1)}}
上式中,第一部分需要M个一维离散小波变换并且每个一维离散小波变换的输入有N个点;第二部分需要N+L-1个一维离散小波变换并且每个一维离散小波变换的输入有M个点。
C
o
m
p
l
e
x
i
t
y
≈
3
2
M
N
log
2
N
+
3
2
M
N
log
2
M
=
3
2
M
N
(
log
2
N
+
log
2
M
)
=
3
2
M
N
log
2
M
N
{\displaystyle {\begin{aligned}Complexity&\approx {\frac {3}{2}}MN\log _{2}N+{\frac {3}{2}}MN\log _{2}M\\&={\frac {3}{2}}MN(\log _{2}N+\log _{2}M)\\&={\frac {3}{2}}MN\log _{2}MN\\\end{aligned}}}
(5)二维离散小波变换之复杂度,使用 “分段卷积(sectioned convolution)”的技巧:
假设原始尺寸为
M
×
N
{\displaystyle M\times N}
,则每一小部分的尺寸为
M
1
×
N
1
{\displaystyle M_{1}\times N_{1}}
C
o
m
p
l
e
x
i
t
y
≈
M
N
M
1
N
1
3
2
M
1
N
1
log
2
M
1
N
1
=
3
2
M
N
log
2
M
1
N
1
{\displaystyle {\begin{aligned}Complexity&\approx {\frac {MN}{M_{1}N_{1}}}{\frac {3}{2}}M_{1}N_{1}\log _{2}M_{1}N_{1}\\&={\frac {3}{2}}MN\log _{2}M_{1}N_{1}\\\end{aligned}}}
所以若是使用分段卷积,则二维离散小波变换之复杂度是呈线性的(随MN),
O
(
M
N
)
{\displaystyle {\mathit {O(MN)}}}
。
(6)多层(Multiple stages )与二维的情况下:
首先x[m,n]的尺寸为
M
×
N
{\displaystyle M\times N}
,
1.若
x
a
,
H
1
[
n
]
,
x
a
,
H
2
[
n
]
,
x
a
,
H
3
[
n
]
{\displaystyle \ x_{a,H_{1}}[n],x_{a,H_{2}}[n],x_{a,H_{3}}[n]}
不细分,只细分
x
a
,
L
[
n
]
{\displaystyle \ x_{a,L}[n]}
时,总复杂度为:
t
o
t
a
l
c
o
m
p
l
e
x
i
t
y
=
(
M
N
+
M
N
4
+
M
N
16
+
.
.
.
)
3
2
log
2
M
1
N
1
≈
4
3
M
N
3
2
log
2
M
1
N
1
=
2
M
N
log
2
M
1
N
1
{\displaystyle {\begin{aligned}totalcomplexity&=\left(MN+{\frac {MN}{4}}+{\frac {MN}{16}}+...\right){\frac {3}{2}}\log _{2}M_{1}N_{1}\\&\approx {\frac {4}{3}}MN{\frac {3}{2}}\log _{2}M_{1}N_{1}\\&=2MN\log _{2}M_{1}N_{1}\\\end{aligned}}}
2.若
x
a
,
H
1
[
n
]
,
x
a
,
H
2
[
n
]
,
x
a
,
H
3
[
n
]
{\displaystyle \ x_{a,H_{1}}[n],x_{a,H_{2}}[n],x_{a,H_{3}}[n]}
也细分时,总复杂度为:
t
o
t
a
l
c
o
m
p
l
e
x
i
t
y
=
(
M
N
+
4
M
2
N
2
+
16
M
4
N
4
+
.
.
.
)
3
2
log
2
M
1
N
1
=
[
M
N
log
2
(
m
i
n
(
M
,
N
)
)
]
3
2
log
2
M
1
N
1
{\displaystyle {\begin{aligned}totalcomplexity&=\left(MN+4{\frac {M}{2}}{\frac {N}{2}}+16{\frac {M}{4}}{\frac {N}{4}}+...\right){\frac {3}{2}}\log _{2}M_{1}N_{1}\\&=\left[MN\log _{2}(min(M,N))\right]{\frac {3}{2}}\log _{2}M_{1}N_{1}\\\end{aligned}}}
压缩、去除噪声:使用低通滤波器,将小波变换的高频滤掉,即保留
x
1
,
L
L
[
m
,
n
]
{\displaystyle x_{1,LL}[m,n]}
而将其他部分舍弃。
边缘侦测:使用高通滤波器,将小波的低频滤掉,即保留
x
1
,
H
L
[
m
,
n
]
{\displaystyle x_{1,HL}[m,n]}
或
x
1
,
L
H
[
m
,
n
]
{\displaystyle x_{1,LH}[m,n]}
而舍弃其他部分。
R语言小波分析wavelet (页面存档备份 ,存于互联网档案馆 )
作为 JPEG2000 的内部架构
模式辨认:由于可以利用低频的部分得到原图的缩略版,加上模式通常为整体的特性,借由在缩略图上进行工作,小波变换可以有效减少寻找模式与比对模式的运算时间
滤波器设计:小波变换保留部分时间信息,可以据此信息加上信号的强度信息,保留特定时点的信息而同时去除噪声