小波变换-完美通俗解读
-
小波变换和
motion
信号处理(一)
这是《小波变换和
motion
信号处理》系列的第一篇,基础普及。
第
二篇
p>
我准备写深入小波的东西,
第三篇
讲解应用
。
记得我还在大四的时候,
在申请出
国和保研中犹豫了好一阵,
骨子里
的保守最后让我选择了先保研
。当然后来也退学了,不过这是后话。
当时保研就要找老板,实验室,自己运气还不错,
进了一个在本校很
牛逼的实验室干活路。
我们实验室主要是搞图
像的,
实力在全国也是
很强的,进去后和师兄师姐聊,大家都在
搞什么小波变换,
H264
之
类的。当
时的我心思都不在这方面,尽搞什么操作系统移植,
ARM+FPGA
< br>这些东西了。对小波变换的认识也就停留在神秘的
“
图像
视频压缩算法之王
”
上面。
后来我才发现,在别的很广泛的领域中,小波也逐渐开始流行。比如
p>
话说很早以前,
我们接触的信号频域处理基本都是傅立叶和拉普拉斯
的天下。但这些年,小波在信号分析中的逐渐兴盛和普及。这让人不
得不感到好奇,
是什么特性让它在图象压缩,
信号处理这些
关键应用
中更得到信赖呢?说实话,
我还在国内的时候,
就开始好奇这个问题
了,于是放狗搜,放毒搜,找遍了中文讲小波变换
的科普文章,发现
没几个讲得清楚的,当时好奇心没那么重,也不是搞这个研究的,懒<
/p>
得找英文大部头论文了,于是作罢。后来来了这边,有些项目要用信
号处理,不得已接触到一些小波变换的东西,才开始硬着头皮看。看
了一些材料,听了
一些课,才发现,还是那个老生常谈的论调:国外
的技术资料和国内真
< br>TNND
不是一个档次的。
同样的事情,
别人说得
很清楚,
连我这种并不聪明的人也看得懂
p>
;
国内的材料则绕来绕去讲
得一塌糊涂,
除了少数天才没几个人能在短时间掌握的。
牢骚就不继续发挥
了。
在这个系列文章里,
我希望能简单介绍一下小
波变换,它和傅立叶变换的比较,以及它在移动平台做
motion
detection
的应用。如果不做特殊说明,均以离散小波为例子
。考虑
到我以前看中文资料的痛苦程度,
我会尽量用简单,
p>
但是直观的方式
去介绍。有些必要的公式是不能少的,但我尽量少用
公式,多用图。
另外,
我不是一个好的翻译者,
所以对于某些实在翻译不清楚的术语,
我就会直接用英语。我并不
claim
我会把整个小波变换讲清楚,这是
不可能
的事,
我只能尽力去围绕要点展开,
比如小波变换相对傅立叶<
/p>
变换的好处,
这些好处的原因是什么,
小
波变换的几个根本性质是什
么,
背后的推导是什么。
我希望达到的目的就是一个小波变换的初学
者在看完这个系列之后,就能用
matlab
或者别的工具对信号做小波
变换的基本分析并且知道这个分析大概是怎么回事。
最后说
明,
我不是研究信号处理的专业人士,
所以文中必有疏漏或者<
/p>
错误,如发现还请不吝赐教。
要讲小波
变换,我们必须了解傅立叶变换。要了解傅立叶变换,我们
先要弄清楚什么是
”
变换
“
。很多处理,不
管是压缩也好,滤波也好,
图形处理也好,本质都是变换。变换的是什么东西呢?是基,
也就是
basis
。如果你暂时有些遗忘了
basis
的定义,那么简单说,在线性代
数里,
basis
是指空间里一系列线性独立的向量,而这个空间里的任
何其他向量,都可以由这些个向量的线性组合来表示。那
basis<
/p>
在变
换里面啥用呢?比如说吧,
傅立叶展
开的本质,
就是把一个空间中的
信号用该空间的某个
basis
的线性组合表示出来,
要这样表示的原
因,
是因为傅立叶变换的本质,是。小波变换自然也不例外的和
basis
有
关了。再比如你用
Pho
toshop
去处理图像,里面的图像拉伸,反转,
等等一系列
操作,都是和
basis
的改变有关。
既然这些变换都是在搞基,那我们自然就容易想到,这个
bas
is
的选
取非常重要,因为
basis
的特点决定了具体的计算过程。一个空间中
可能有很多种形式的
basis
,
什么样的
basis
比较好,
很大程度上取决
< br>于这个
basis
服务于什么应用。比如如果我们希望选
取有利于压缩的
话,那么就希望这个
basis
能用其中很少的向量来最大程度地表示信
号,这样即使把别的向量给砍了,信号
也不会损失很多。而如果是图
形处理中常见的线性变换,
最省计
算量的完美
basis
就是
eigen
vector
basis
了,
因为此
时变换矩阵
T
对它们的作用等同于对角矩阵
( Tv_n =
av_n
,
a
是
eigenvalue )
。总的来
说,抛开具体的应用不谈,所有的
basis
,我们都希望它们
有一个共同的特点,那就是,容易计算,用
最简单的方式呈现最多的信号特性。
好,现在我们对变换有了基本的认识,知道他们其实就是在搞基。当<
/p>
然,搞基也是分形式的,不同的变换,搞基的妙处各有不同。接下来
先看看,傅立叶变换是在干嘛。
傅立叶级数最早是
Joseph Fourier
这个人提出的,
他发现,
这个
basis
不仅仅存在与
vector space
,
还存在于
function
space
。
这个
function
space
本质上还是一个
linea
r
vector
space
,可以
是有限的,可以是
无限的,
只不过在这个空间里,
vector
就是
function
了,
而对应的标
量就是实数或者复数。在
vector
space
里,你有
vector
v
可以写成
vector
basis
的线性组合,那在
function
space
里,
function f(x)
< br>也可
以写成对应
function basis
的线性组合,
也有
norm
。
你的
vector
basis
可以是正交的,我的
function
basis
也可以是正交的(比如
sin(t)<
/p>
和
sin(2t)
)。唯一不同的是,我
的
function
basis
是无
穷尽的,因为我
的
function space
的维度是无穷的。好,具体来说,那就是现在我们
有一个函数,
f(x)
。我们希望将它写成一些
cos
函数和一些
sin
函数
的
形式,像这样
again
,这是一个无限循环的函数。其中的
1
,
cosx,
sinx,
cos2x ….
.
这些,就是傅立叶级数。傅立叶级数应用如此广泛的主要原因之一,
< br>就是它们这帮子
function basis
是正交的
,这就是有趣的地方了。为
什么
function basis
正交如此重要呢?我们说两个
vector
正交,那就
是他俩的内积为
0
。那
对于
function
basis
呢?
function
basis
怎么求
内积呢?
现在先复习一下
vector
正交的定义。我们
说两个
vector
v,w
如果正<
/p>
交的话,应符合:
< br>那什么是
function
正交呢?假设我们有两个函数
f(x)
和
g(x)
< br>,
那是什
么?我们遵循
vect
or
的思路去想,两个
vector
求
内积,就是把他们
相同位置上对应的点的乘积做一个累加。那移过来,就是对每一个
p>
x
点,对应的
f
和
g
做乘积,再累加。不过问题是,
f<
/p>
和
g
都是无限函
数阿,
x
又是一个连续的值。怎么办呢?向量是离散的,所以累
加,
函数是连续的,那就是
…….
积分
!
我们知道函数内积是这样算的了
,
自然也就容易证明,
按照这个形式
去
写的傅立叶展开,
这些级数确实都是两两正交的。
证明过程这里
就
不展开了。好,下一个问题就是,为什么它们是正交
basi
s
如此重要
呢?这就牵涉到系数的求解了。我们研究了函数
p>
f
,研究了级数,一
堆三角函数和常数
p>
1
,
那系数呢?
a
0, a1, a2
这些系数该怎么确定呢?
好,
比如我这里准备求
a1
了。
我现在知道什么?信号
f(x)
是已知的,
傅立叶级数是已知的,我们怎么求
a1
呢?很简单,把方程
两端的所
有部分都求和
cosx
的内积
,即:
然后我们发现,因为正交的
性质,右边所有非
a1
项全部消失了,因
为他们和
cosx
的内积都是
0
p>
!所有就简化为
这样,
a1
就求解出来了。到这里,你就看出正交的奇妙性了
吧
:)
好,
现在我们知道,
傅立叶变换就是用一系列三角波来表示信号方程
的展开,这个信号可以是
连续的,可以是离散的。傅立叶所用的
function basis
< br>是专门挑选的,
是正交的,
是利于计算
< br>coefficients
的。
但千万别误解为展开变换
所用的
basis
都是正交的,这完全取决于具
体的使用需求,比如泰勒展开的
basis
就只是简单
的非正交多项式。
有了傅立叶变换的基础,接下来,我们就看
看什么是小波变换。首先
来说说什么是小波。所谓波,就是在时间域或者空间域的震荡方
程,
比如正弦波,就是一种波。什么是波分析?针对波的分析拉(囧)。
并不是说小波分析才属于波分析,
傅立叶分析也是波分析,
因为正弦
波也是一种波嘛。那什么是小波呢?这个
”
小
“
,是针对傅立叶波而言
< br>的。傅立叶所用的波是什么?正弦波,这玩意以有着无穷的能量,同
样的幅度在整
个无穷大区间里面振荡,像下面这样:
那小波是什么呢?是一种能量在时域非常集中的波。
它的能量是有限
的,而且集中在某一点附近。比如下面这样:
p>
这种小波有什么好处呢?它对于分析瞬时时变信号非常有用。
它有效
的从信号中提取信息,
通过伸缩和平移等运算功能对函数或信号
进行
多尺度细化分析,解决了傅立叶变换不能解决的许多困难问题。恩,
以上就是通常情况下你能在国内网站上搜到的小波变换文章告诉你
的。
但为什么呢?这是我希望在这个系列文章中讲清楚的。
不过在这
篇文章里,
我先点到为止,
把小波变换的重要特
性以及优点
cover
了,
在下一篇文
章中再具体推导这些特性。
小波变换的本质和傅立叶变换类似
,也是用精心挑选的
basis
来表示
信号方程。
每个小波变换都会有一个
mother wavel
et
,
我们称之为母
小波,
同时还有一个
scaling function
,
中文是尺度函数,
也被成为父
小波。
任何小波变换的
basis
函数,其实就是对这个母小波和父小
波
缩放和平移后的集合。下面这附图就是某种小波的示意图:
从这里看出,
这里的缩放倍数都是<
/p>
2
的级数,
平移的大小和当前其缩
放的程度有关。
这样的好处是,
小波的
basis
函数既有高频又有低频,
同时还覆
盖了时域。对于这点,我们会在之后详细阐述。
小波展开的形
式通常都是这样(注意,这个只是近似表达,严谨的展
开形式请参考
第二篇
):
< br>其中的
就是小波级数,这些级数的组合就形成了小波变换中的
基
basis
。
和
傅
立
叶
级
数
有
一
点
不
同
的
是
,<
/p>
小
波
级
数
通
常
是
orthon
ormal basis
,也就是说,它们不仅两两正交,还归一化了。小
波级数通常有很多种,但是都符合下面这些特性:
1.
小波变换对不管是一维还是高维的大部分信号都能
cover
很好。
这个和傅立叶级数有很大区
别。
后者最擅长的是把一维的,
类三角波
连续变量函数信号映射到一维系数序列上,
但对于突变信号或任何高
< br>维的非三角波信号则几乎无能为力。
2.
围绕小波级数的展开能够在时域和频域上同时定位信号,也就是
说,信号的
大部分能量都能由非常少的展开系数,比如
a_{j,k}
,决
定。
这个特性是得益于小波变换是二维变换。
< br>我们从两者展开的表达
式就可以看出来,傅立叶级数是
,
而小波级数是
。
3.
从信号算出展开系数
a
需要很方便。普遍情况下,小
波变换的复
杂度是
O(Nlog(N))
,和
FFT
相当。有不少很快的变换甚至可以达到
O(N)
,
也就是说,
计
算复杂度和信号长度是线性的关系。
小波变换的
等式定义,
p>
可以没有积分,
没有微分,
仅仅是乘法和加
法即可以做到,
和现代计算机的计算指令完全
match
。
可能看到这里,
你会有点晕了。
这些特性是怎么来的?为什么需要有
这些特性?
具体到实践中,
它们到底是怎么给小波变换带来比别人更
强的好
处的?计算简单这个可能好理解,
因为前面我们已经讲过正交
特
性了。
那么二维变换呢?频域和时域定位是如何进行的呢?恩,
我
完全理解你的感受,因为当初我看别的文章,也是有这些问题,就是
< br>看不到答案。
要说想完全理解小波变换的这些本质,
需要
详细的讲解,
所以我就把它放到下一篇了。
< br>接下来,
上几张图,
我们以一些基本的信号处理来呈现小
波变换比傅
立叶变换好的地方,我保证,你看了这个比较之后,大概能隐约感受
到小波变换的强大,并对背后的原理充满期待
:)
假设我们现在有这么一个信号:
<
/p>
看到了吧,这个信号就是一个直流信号。我们用傅立叶将其展开,会
发现形式非常简单:只有一个级数系数不是
0
,其他所有级数
系数都
是
0
。好,我们再看接下来这个
信号:
简单说,
< br>就是在前一个直流信号上,
增加了一个突变。
其实这个突
变,
在时域中看来很简单,
前面还是很平滑的直流,
后面也是很平滑的直
流,
就是中间有一个阶跃嘛。
但是,
如果我们再次让其傅立叶展开呢?
所有的傅立叶级数都为非
0
了!
为什
么?因为傅立叶必须用三角波来
展开信号,
对于这种变换突然而
剧烈的信号来讲,
即使只有一小段变
换,傅立叶也不得不用大量
的三角波去拟合,就像这样:
看看
上面这个图。
学过基本的信号知识的朋友估计都能想到,
这不就
是
Gibbs
现象么?
Exactly
。用比较八股的说法来解释,
Gibb
s
现象是
由于展开式在间断点邻域不能均匀收敛所引起的,即使
在
N
趋于无
穷大时,这一现象也依然存
在。其实通俗一点解释,就是当变化太
sharp
的时候,三角
波
fit
不过来了,就凑合出
Gibb
s
了
:)
接下来我们来看看,
如果用刚才举例中的那种小波,
展开之后是这样
的:
看见了么?只要小波
basis
不和这个信号变化重叠,它所对应的级数
< br>系数都为
0
!也就是说,假如我们就用这个三级小波对此
信号展开,
那么只有
3
个级数系数不为
0
。你可以使用更复杂的小波,不管什
么小波,
大部分级数系数都会是
0
。
原因?由于小波
basis
的特殊性,
任何小波和常量函数的内积都趋近于
0
。换句话说,选小波的时候,
就需要保证母小波在一个周期的积分趋近于
0
。
正是这个有趣的性质,
让
小波变换的计算以及对信号的诠释比傅立叶变换更胜一筹!
原因在
于,
小波变换允许更加精确的局部描述以及信号特征的分离。
一个傅
立叶系数通常表示某个贯穿整个时间域的信号分量,
因此
,
即使是临
时的信号,
其特征也被强扯
到了整个时间周期去描述。
而小波展开的
系数则代表了对应分量
它当下的自己,因此非常容易诠释。
小波变换的优势不仅仅在
这里。
事实上,
对于傅立叶变换以及大部分
的信号变换系统,
他们的函数基都是固定的,
那么变换后的
结果只能
按部就班被分析推导出来,
没有任何灵活性,
比如你如果决定使用傅
立叶变换了,那
basi
s function
就是正弦波,你不管怎么
scale
p>
,它都
是正弦波,即使你举出余弦波,它还是移相后的正弦波。总之
你就只
能用正弦波,
没有任何商量的余地。
而对于小波变换来讲,
基是变的,
是可以根据信号来推导或
者构建出来的,
只要符合小波变换的性质和
特点即可。也就是说
,如果你有着比较特殊的信号需要处理,你甚至
可以构建一个专门针对这种特殊信号的小
波
basis function
集合对其
进行分析。这种灵活性是任何别的变换都无法比拟的。总结来说,傅
立叶变换适合周
期性的,
统计特性不随时间变化的信号
;
而小波变换
则适用于大部分信号,
尤其是瞬时信号。
它针对绝大部分信号的压缩,
去噪,检测效果都特别好。
看到这里,
你应该大概了解了小波变换针对傅立叶
变换的优点了。
你
也许对背后的原因还存在一些疑问,
并希望深入了解一些小波的构建
等知识,请移步本系列第二篇:
傅立叶变换,小波变换和
motion
信
号处理(二)
小波变换和
< br>motion
信号处理(二)
这是《小波变换和
motion
信号处理》系列的第二篇,深入
小波。
第
一篇
我进行了基础知识的铺垫
,
第三篇
主要讲解应用。
在上一篇中讲到,
每个小波变换都会有一个
mot
her wavelet
,
我们称
之为
母小波,同时还有一个
father
wavelet
,就是
scaling
function
。
而该小波的
basis
函数其实就是对这个母小波和父小波缩放和平移形
成的。
缩放倍数都是
2
的级数,
平移的大小和当前其缩放的程度有关。
还讲到,小波系统有很多种,不同的母小波,衍生的小波基就完全不
同。小波
展开的近似形式是这样:
其中的<
/p>
就是小波级数,这些级数的组合就形成了小波变换中的
基
basis
。
和
傅
p>
立
叶
级
数
有
一
点
不
同
的
是
,
< br>小
波
级
数
通
常
是
orthonormal
basis
,也就是说,它们不仅两两正交,还归一化了。
<
/p>
我们还讲了一般小波变换的三个特点,
就是小波级数是二维的,<
/p>
能定
位时域和频域,计算很快。但我们并没有深入讲解,比如,如
何理解
这个二维?它是如何同时定位频域和时域的?
在这一篇文章里,我们就来讨论一下这些特性背后的原理。
<
/p>
首先,
我们一直都在讲小波展开的近似形式。
那什么是完整形式呢?
之前讲到,小波
basis
的形成,是基于基本的小波函数,也就是母小
波来做缩放和平移的。但是
,母小波并非唯一的原始基。在构建小波
基函数集合的时候,通常还要用到一个函数叫尺
度函数,
scaling
function
< br>,人们通常都称其为父小波。它和母小波一样,也是归一化
了,
< br>而且它还需要满足一个性质,
就是它和对自己本身周期平移的函
< br>数两两正交:
另外,为了方便处理,父小波和母小波也需要是正交的。可以说,完
整的小
波展开就是由母小波和父小波共同定义的。
其中
是母小波,
是父小波。需要提醒一点的是,这个正
交纯
粹是为了小波分析的方便而引入的特性,
并不是说小波变换
的基就一
定必须是正交的。
但大部分小波变换的基确实是正交的
,
所以本文就
直接默认正交为小波变换的主要性质之一了。
p>
引入这个父小波呢,
主
要是为了方便做多解
析度分析(
multiresolution analysis, MRA
)。说
到这里,
你的问题可能会井喷了:
好好的为什么出来一个父小波呢?
这个
scal
ing
function
是拿来干嘛的?它背后的物理意义是
什么?
wavelet
function
背后的物理意义又是什么?这个多解析度分析又是
什么呢?不急,下面,我们围绕一
个例子来巩固一下前面的知识,同
时再引出新的特性。
假设我们有这样一个信号:
该信号长度为
8
,是离散的一维信号。我们要
考虑的,就是如何用小
波将其展开。
为了方便讲解,
我们考虑最简单的一种小波,
哈尔小波。
下面是它
的一种母小波:
那如何构建基于这
个母小波的基呢?刚才提到了,要缩放,要平移。
我们先试试缩放,那就是
ψ(2n)
:
但这样的话,
它与自己的内积就不是
1
了,
不符合小波基
orthonormal
p>
的要求,
所以我们要在前面加一个系数根号二,
这样我们就得到了另
一个哈尔小波的
basis
function
:
同理,我们可以一直这样推广下去做
scale
,得
到
4n
,
8n
,
…….
下的
basis funct
ion
。当然在这个例子里,我们信号长度就是
8
,所以做到
4n
就够了。但推广来说,就是这种
p>
scaling
对母小波的作用为
,这是归
一化后的表示形式。
平移的话也很简单,我们可以对母小波进
行平移,也可以对
scale
之
后的<
/p>
basis
function
进行平移
。比如对上一幅图中的
basis
function
进行平移,就成了