小波变换-完美通俗解读

余年寄山水
800次浏览
2021年02月12日 20:43
最佳经验
本文由作者推荐

-

2021年2月12日发(作者:zhangguor)


小波变换和


motion


信号处理(一)



这是《小波变换和


motion

< p>
信号处理》系列的第一篇,基础普及。


第


二篇


我准备写深入小波的东西,


第三篇


讲解应用 。



记得我还在大四的时候,


在申请出 国和保研中犹豫了好一阵,


骨子里


的保守最后让我选择了先保研 。当然后来也退学了,不过这是后话。


当时保研就要找老板,实验室,自己运气还不错, 进了一个在本校很


牛逼的实验室干活路。


我们实验室主要是搞图 像的,


实力在全国也是


很强的,进去后和师兄师姐聊,大家都在 搞什么小波变换,


H264


之


类的。当 时的我心思都不在这方面,尽搞什么操作系统移植,


ARM+FPGA

< br>这些东西了。对小波变换的认识也就停留在神秘的


“


图像


视频压缩算法之王


”


上面。

< p>


后来我才发现,在别的很广泛的领域中,小波也逐渐开始流行。比如


话说很早以前,


我们接触的信号频域处理基本都是傅立叶和拉普拉斯


的天下。但这些年,小波在信号分析中的逐渐兴盛和普及。这让人不

得不感到好奇,


是什么特性让它在图象压缩,


信号处理这些 关键应用


中更得到信赖呢?说实话,


我还在国内的时候,


就开始好奇这个问题


了,于是放狗搜,放毒搜,找遍了中文讲小波变换 的科普文章,发现


没几个讲得清楚的,当时好奇心没那么重,也不是搞这个研究的,懒< /p>


得找英文大部头论文了,于是作罢。后来来了这边,有些项目要用信


号处理,不得已接触到一些小波变换的东西,才开始硬着头皮看。看


了一些材料,听了 一些课,才发现,还是那个老生常谈的论调:国外


的技术资料和国内真

< br>TNND


不是一个档次的。


同样的事情,


别人说得


很清楚,


连我这种并不聪明的人也看得懂


;


国内的材料则绕来绕去讲


得一塌糊涂, 除了少数天才没几个人能在短时间掌握的。



牢骚就不继续发挥 了。


在这个系列文章里,


我希望能简单介绍一下小


波变换,它和傅立叶变换的比较,以及它在移动平台做


motion


detection


的应用。如果不做特殊说明,均以离散小波为例子 。考虑


到我以前看中文资料的痛苦程度,


我会尽量用简单,


但是直观的方式


去介绍。有些必要的公式是不能少的,但我尽量少用 公式,多用图。


另外,


我不是一个好的翻译者,


所以对于某些实在翻译不清楚的术语,


我就会直接用英语。我并不


claim


我会把整个小波变换讲清楚,这是


不可能 的事,


我只能尽力去围绕要点展开,


比如小波变换相对傅立叶< /p>


变换的好处,


这些好处的原因是什么,


小 波变换的几个根本性质是什


么,


背后的推导是什么。

< p>
我希望达到的目的就是一个小波变换的初学


者在看完这个系列之后,就能用


matlab


或者别的工具对信号做小波


变换的基本分析并且知道这个分析大概是怎么回事。



最后说 明,


我不是研究信号处理的专业人士,


所以文中必有疏漏或者< /p>


错误,如发现还请不吝赐教。



要讲小波 变换,我们必须了解傅立叶变换。要了解傅立叶变换,我们


先要弄清楚什么是

< p>
”


变换


“


。很多处理,不 管是压缩也好,滤波也好,


图形处理也好,本质都是变换。变换的是什么东西呢?是基, 也就是


basis


。如果你暂时有些遗忘了

basis


的定义,那么简单说,在线性代


数里,


basis


是指空间里一系列线性独立的向量,而这个空间里的任


何其他向量,都可以由这些个向量的线性组合来表示。那


basis< /p>


在变


换里面啥用呢?比如说吧,


傅立叶展 开的本质,


就是把一个空间中的


信号用该空间的某个

< 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

< p>
这个人提出的,


他发现,


这个

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

< p>
basis


也可以是正交的(比如


sin(t)< /p>


和


sin(2t)


)。唯一不同的是,我 的


function


basis


是无 穷尽的,因为我


的


function space


的维度是无穷的。好,具体来说,那就是现在我们


有一个函数,


f(x)


。我们希望将它写成一些


cos

< p>
函数和一些


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


求 内积,就是把他们


相同位置上对应的点的乘积做一个累加。那移过来,就是对每一个


x


点,对应的


f


和


g


做乘积,再累加。不过问题是,


f< /p>


和


g


都是无限函


数阿,


x


又是一个连续的值。怎么办呢?向量是离散的,所以累 加,


函数是连续的,那就是


…….


积分 !




我们知道函数内积是这样算的了 ,


自然也就容易证明,


按照这个形式


去 写的傅立叶展开,


这些级数确实都是两两正交的。


证明过程这里 就


不展开了。好,下一个问题就是,为什么它们是正交


basi s


如此重要


呢?这就牵涉到系数的求解了。我们研究了函数


f


,研究了级数,一


堆三角函数和常数


1


,


那系数呢?


a 0, a1, a2


这些系数该怎么确定呢?


好,


比如我这里准备求


a1


了。


我现在知道什么?信号


f(x)


是已知的,

傅立叶级数是已知的,我们怎么求


a1


呢?很简单,把方程 两端的所


有部分都求和


cosx


的内积 ,即:




然后我们发现,因为正交的 性质,右边所有非


a1


项全部消失了,因


为他们和


cosx


的内积都是


0


!所有就简化为




这样,


a1


就求解出来了。到这里,你就看出正交的奇妙性了 吧


:)


好,


现在我们知道,


傅立叶变换就是用一系列三角波来表示信号方程


的展开,这个信号可以是 连续的,可以是离散的。傅立叶所用的


function basis

< br>是专门挑选的,


是正交的,


是利于计算

< br>coefficients


的。


但千万别误解为展开变换 所用的


basis


都是正交的,这完全取决于具


体的使用需求,比如泰勒展开的


basis


就只是简单 的非正交多项式。



有了傅立叶变换的基础,接下来,我们就看 看什么是小波变换。首先


来说说什么是小波。所谓波,就是在时间域或者空间域的震荡方 程,


比如正弦波,就是一种波。什么是波分析?针对波的分析拉(囧)。


并不是说小波分析才属于波分析,


傅立叶分析也是波分析,

因为正弦


波也是一种波嘛。那什么是小波呢?这个


”


小


“


,是针对傅立叶波而言

< br>的。傅立叶所用的波是什么?正弦波,这玩意以有着无穷的能量,同


样的幅度在整 个无穷大区间里面振荡,像下面这样:



那小波是什么呢?是一种能量在时域非常集中的波。


它的能量是有限


的,而且集中在某一点附近。比如下面这样:




这种小波有什么好处呢?它对于分析瞬时时变信号非常有用。


它有效


的从信号中提取信息,


通过伸缩和平移等运算功能对函数或信号 进行


多尺度细化分析,解决了傅立叶变换不能解决的许多困难问题。恩,


以上就是通常情况下你能在国内网站上搜到的小波变换文章告诉你


的。


但为什么呢?这是我希望在这个系列文章中讲清楚的。


不过在这


篇文章里,


我先点到为止,


把小波变换的重要特 性以及优点


cover


了,


在下一篇文 章中再具体推导这些特性。



小波变换的本质和傅立叶变换类似 ,也是用精心挑选的


basis


来表示


信号方程。


每个小波变换都会有一个


mother wavel et


,


我们称之为母


小波,

< p>
同时还有一个


scaling function


,


中文是尺度函数,


也被成为父


小波。 任何小波变换的


basis


函数,其实就是对这个母小波和父小 波


缩放和平移后的集合。下面这附图就是某种小波的示意图:




从这里看出,


这里的缩放倍数都是< /p>


2


的级数,


平移的大小和当前其缩


放的程度有关。


这样的好处是,


小波的


basis


函数既有高频又有低频,


同时还覆 盖了时域。对于这点,我们会在之后详细阐述。



小波展开的形 式通常都是这样(注意,这个只是近似表达,严谨的展


开形式请参考

第二篇


):



< br>其中的


就是小波级数,这些级数的组合就形成了小波变换中的

基


basis


。


和


傅


立


叶


级

数


有


一


点


不


同


的


是


,< /p>


小


波


级


数


通


常


是


orthon ormal basis


,也就是说,它们不仅两两正交,还归一化了。小


波级数通常有很多种,但是都符合下面这些特性:



1.


小波变换对不管是一维还是高维的大部分信号都能


cover


很好。


这个和傅立叶级数有很大区 别。


后者最擅长的是把一维的,


类三角波


连续变量函数信号映射到一维系数序列上,


但对于突变信号或任何高

< br>维的非三角波信号则几乎无能为力。



2.

< p>
围绕小波级数的展开能够在时域和频域上同时定位信号,也就是


说,信号的 大部分能量都能由非常少的展开系数,比如


a_{j,k}


,决


定。


这个特性是得益于小波变换是二维变换。

< br>我们从两者展开的表达


式就可以看出来,傅立叶级数是


, 而小波级数是


。



3.


从信号算出展开系数


a


需要很方便。普遍情况下,小 波变换的复


杂度是


O(Nlog(N))


,和


FFT


相当。有不少很快的变换甚至可以达到

< p>
O(N)


,


也就是说,


计 算复杂度和信号长度是线性的关系。


小波变换的


等式定义,


可以没有积分,


没有微分,


仅仅是乘法和加 法即可以做到,


和现代计算机的计算指令完全


match


。



可能看到这里,


你会有点晕了。


这些特性是怎么来的?为什么需要有


这些特性? 具体到实践中,


它们到底是怎么给小波变换带来比别人更


强的好 处的?计算简单这个可能好理解,


因为前面我们已经讲过正交


特 性了。


那么二维变换呢?频域和时域定位是如何进行的呢?恩,


我


完全理解你的感受,因为当初我看别的文章,也是有这些问题,就是

< br>看不到答案。


要说想完全理解小波变换的这些本质,


需要 详细的讲解,


所以我就把它放到下一篇了。


< br>接下来,


上几张图,


我们以一些基本的信号处理来呈现小 波变换比傅


立叶变换好的地方,我保证,你看了这个比较之后,大概能隐约感受


到小波变换的强大,并对背后的原理充满期待


:)


假设我们现在有这么一个信号:



< /p>


看到了吧,这个信号就是一个直流信号。我们用傅立叶将其展开,会


发现形式非常简单:只有一个级数系数不是


0


,其他所有级数 系数都


是


0


。好,我们再看接下来这个 信号:




简单说,

< br>就是在前一个直流信号上,


增加了一个突变。


其实这个突 变,


在时域中看来很简单,


前面还是很平滑的直流,

< p>
后面也是很平滑的直


流,


就是中间有一个阶跃嘛。


但是,


如果我们再次让其傅立叶展开呢?


所有的傅立叶级数都为非


0


了!


为什 么?因为傅立叶必须用三角波来


展开信号,


对于这种变换突然而 剧烈的信号来讲,


即使只有一小段变


换,傅立叶也不得不用大量 的三角波去拟合,就像这样:




看看 上面这个图。


学过基本的信号知识的朋友估计都能想到,


这不就


是


Gibbs


现象么?


Exactly


。用比较八股的说法来解释,


Gibb s


现象是


由于展开式在间断点邻域不能均匀收敛所引起的,即使 在


N


趋于无


穷大时,这一现象也依然存 在。其实通俗一点解释,就是当变化太


sharp


的时候,三角 波


fit


不过来了,就凑合出


Gibb s


了


:)


接下来我们来看看,


如果用刚才举例中的那种小波,


展开之后是这样


的:




看见了么?只要小波


basis


不和这个信号变化重叠,它所对应的级数

< br>系数都为


0


!也就是说,假如我们就用这个三级小波对此 信号展开,


那么只有


3


个级数系数不为


0


。你可以使用更复杂的小波,不管什


么小波,


大部分级数系数都会是


0


。


原因?由于小波


basis


的特殊性,


任何小波和常量函数的内积都趋近于


0


。换句话说,选小波的时候,


就需要保证母小波在一个周期的积分趋近于


0


。


正是这个有趣的性质,


让 小波变换的计算以及对信号的诠释比傅立叶变换更胜一筹!


原因在


于,


小波变换允许更加精确的局部描述以及信号特征的分离。


一个傅


立叶系数通常表示某个贯穿整个时间域的信号分量,


因此 ,


即使是临


时的信号,


其特征也被强扯 到了整个时间周期去描述。


而小波展开的


系数则代表了对应分量 它当下的自己,因此非常容易诠释。



小波变换的优势不仅仅在 这里。


事实上,


对于傅立叶变换以及大部分

的信号变换系统,


他们的函数基都是固定的,


那么变换后的 结果只能


按部就班被分析推导出来,


没有任何灵活性,


比如你如果决定使用傅


立叶变换了,那


basi s function


就是正弦波,你不管怎么


scale


,它都


是正弦波,即使你举出余弦波,它还是移相后的正弦波。总之 你就只


能用正弦波,


没有任何商量的余地。

而对于小波变换来讲,


基是变的,


是可以根据信号来推导或 者构建出来的,


只要符合小波变换的性质和


特点即可。也就是说 ,如果你有着比较特殊的信号需要处理,你甚至


可以构建一个专门针对这种特殊信号的小 波


basis function


集合对其

进行分析。这种灵活性是任何别的变换都无法比拟的。总结来说,傅


立叶变换适合周 期性的,


统计特性不随时间变化的信号


;

而小波变换


则适用于大部分信号,


尤其是瞬时信号。


它针对绝大部分信号的压缩,


去噪,检测效果都特别好。



看到这里,


你应该大概了解了小波变换针对傅立叶 变换的优点了。


你


也许对背后的原因还存在一些疑问,


并希望深入了解一些小波的构建


等知识,请移步本系列第二篇:


傅立叶变换,小波变换和


motion


信


号处理(二)



小波变换和

< br>motion


信号处理(二)



这是《小波变换和


motion


信号处理》系列的第二篇,深入 小波。


第


一篇


我进行了基础知识的铺垫 ,


第三篇


主要讲解应用。


< p>
在上一篇中讲到,


每个小波变换都会有一个


mot her wavelet


,


我们称


之为 母小波,同时还有一个


father


wavelet


,就是


scaling


function


。


而该小波的


basis


函数其实就是对这个母小波和父小波缩放和平移形


成的。


缩放倍数都是


2


的级数,


平移的大小和当前其缩放的程度有关。



还讲到,小波系统有很多种,不同的母小波,衍生的小波基就完全不


同。小波 展开的近似形式是这样:




其中的< /p>


就是小波级数,这些级数的组合就形成了小波变换中的


基


basis


。


和


傅


立


叶


级


数


有


一


点


不


同


的


是


,

< br>小


波


级


数


通


常


是


orthonormal basis


,也就是说,它们不仅两两正交,还归一化了。


< /p>


我们还讲了一般小波变换的三个特点,


就是小波级数是二维的,< /p>


能定


位时域和频域,计算很快。但我们并没有深入讲解,比如,如 何理解


这个二维?它是如何同时定位频域和时域的?



在这一篇文章里,我们就来讨论一下这些特性背后的原理。


< /p>


首先,


我们一直都在讲小波展开的近似形式。

那什么是完整形式呢?


之前讲到,小波


basis


的形成,是基于基本的小波函数,也就是母小


波来做缩放和平移的。但是 ,母小波并非唯一的原始基。在构建小波


基函数集合的时候,通常还要用到一个函数叫尺 度函数,


scaling


function

< br>,人们通常都称其为父小波。它和母小波一样,也是归一化


了,

< br>而且它还需要满足一个性质,


就是它和对自己本身周期平移的函

< br>数两两正交:




< p>
另外,为了方便处理,父小波和母小波也需要是正交的。可以说,完


整的小 波展开就是由母小波和父小波共同定义的。




其中


是母小波,


是父小波。需要提醒一点的是,这个正 交纯


粹是为了小波分析的方便而引入的特性,


并不是说小波变换 的基就一


定必须是正交的。


但大部分小波变换的基确实是正交的 ,


所以本文就


直接默认正交为小波变换的主要性质之一了。


引入这个父小波呢,


主


要是为了方便做多解 析度分析(


multiresolution analysis, MRA

< p>
)。说


到这里,


你的问题可能会井喷了:


好好的为什么出来一个父小波呢?


这个


scal ing


function


是拿来干嘛的?它背后的物理意义是 什么?


wavelet


function

背后的物理意义又是什么?这个多解析度分析又是


什么呢?不急,下面,我们围绕一 个例子来巩固一下前面的知识,同


时再引出新的特性。



假设我们有这样一个信号:




该信号长度为


8


,是离散的一维信号。我们要 考虑的,就是如何用小


波将其展开。


为了方便讲解,

< p>
我们考虑最简单的一种小波,


哈尔小波。


下面是它 的一种母小波:




那如何构建基于这 个母小波的基呢?刚才提到了,要缩放,要平移。


我们先试试缩放,那就是


ψ(2n)


:




但这样的话,


它与自己的内积就不是


1


了,


不符合小波基


orthonormal


的要求,


所以我们要在前面加一个系数根号二,

这样我们就得到了另


一个哈尔小波的


basis function


:




同理,我们可以一直这样推广下去做


scale


,得 到


4n


,


8n


,


…….


下的


basis funct ion


。当然在这个例子里,我们信号长度就是


8


,所以做到


4n


就够了。但推广来说,就是这种


scaling


对母小波的作用为


,这是归 一化后的表示形式。



平移的话也很简单,我们可以对母小波进 行平移,也可以对


scale


之


后的< /p>


basis


function


进行平移 。比如对上一幅图中的


basis


function


进行平移,就成了


-


-


-


-


-


-


-


-