小波变换

1 背景介绍

1.1 FFT

对非平稳过程,傅里叶变换有局限性。平稳信号与非平稳信号FFT分析实例如下:
FFT处理非稳定信号实例
如上图,最上边的是频率始终不变的平稳信号。而下边两个则是频率随着时间改变的非平稳信号,它们同样包含和最上信号相同频率的四个成分。做FFT后,我们发现这三个时域上有巨大差异的信号,频谱(幅值谱)却非常一致。尤其是下边两个非平稳信号,我们从频谱上无法区分它们,因为它们包含的四个频率的信号的成分确实是一样的,只是出现的先后顺序不同。可见,傅里叶变换处理非平稳信号有天生缺陷。它只能获取一段信号总体上包含哪些频率的成分,但是对各成分出现的时刻并无所知。因此时域相差很大的两个信号,可能频谱图一样。然而平稳信号大多是人为制造出来的,自然界的大量信号几乎都是非平稳的,所以在比如生物医学信号分析等领域的论文中,基本看不到单纯傅里叶变换这样naive的方法。

1.2 STFT

上述问题的一个简单可行的方法就是加窗, “把整个时域过程分解成无数个等长的小过程,每个小过程近似平稳,再傅里叶变换,就知道在哪个时间点上出现了什么频率了”,这就是短时傅里叶变换。
时域上分成一段一段做FFT,不就知道频率成分随着时间的变化情况了吗!用这样的方法,可以得到一个信号的时频图了:
图上既能看到10Hz, 25 Hz, 50 Hz, 100 Hz四个频域成分,还能看到出现的时间。两排峰是对称的,所以大家只用看一排就行了。
这里写图片描述
但是STFT依然有缺陷,使用STFT存在一个问题,我们应该用多宽的窗函数?窗太窄,窗内的信号太短,会导致频率分析不够精准,频率分辨率差。窗太宽,时域上又不够精细,时间分辨率低。然而STFT的窗口是固定的,在一次STFT中宽度不会变化,所以STFT还是无法满足非稳态信号变化的频率的需求。不同窗口长度和对应效果图如下:
这里写图片描述
这里写图片描述
这里写图片描述

1.3 小波变换

小波变换的出发点和STFT还是不同的。STFT是给信号加窗,分段做FFT;而小波直接把傅里叶变换的基给换了——将无限长的三角函数基换成了有限长的会衰减的小波基。这样不仅能够获取频率,还可以定位到时间了。小波函数的具体描述在后续章节进行介绍。

1.4 函数正交

内积:在数学中,数量积(dot product; scalar product,也称为点积)是接受在实数R上的两个向量并返回一个实数值标量的二元运算。它是欧几里得空间的标准内积。
正交:正交最早出现于三维空间中的向量分析。在三维向量空间中,两个向量的内积如果是零,那么就说这两个向量是正交的。
这里写图片描述
函数内积的定义如下:
这里写图片描述
傅里叶变换中求取某一指定频率幅值的方法,即利用正余弦函数的正交特性。
这里写图片描述
这里写图片描述


2 数学基础

完全搞懂傅里叶变换和小波,你至少需要知道哪些预备知识?主页君从今天开始就将通过一些列文章告诉你他们之间的来龙去脉!本节是全部系列文章的第一节——总纲,日后我们也将按照这个思路一点一点讲述所有的知识。题目里面讲的“完全搞懂”并非是从物理学或者纯数学的角度去讲的,因为傅里叶变换最初是法国科学家傅里叶在研究物理学(主要是热力学)时创造出来的一套理论,如果要从这个角度去说“彻底搞懂”,肯定得需要很多物理知识、复变实变分析,之类的像天书一样的东西。这样牵扯下去,其实很多对于学计算机或者学电子信息的人来说,其实完全没有必要。我们要做的,就是利用你已经掌握的知识来构建整个体系!
首先,你应该知道费马定理(这个很简单,说白了其实就是函数有极值的条件),通过费马定理,你可以证明罗尔定理,然后通过罗尔定理,你又可以证明拉格朗日中值定理,通过拉格朗日中值定理,你又可以继而证明柯西中值定理。证明柯西中值定理的意义在于,它可以被用来证明泰勒公式。泰勒公式当然是一个叫做泰勒的人提出来的,但是真正证明泰勒公式的人是柯西,因为柯西知道柯西中值定理,而要证明泰勒公式就需要用到柯西中值定理。泰勒公式在我们这里有两个用途,首先它可以用来证明欧拉公式,欧拉公式在傅里叶变换里面也是必须要用到的。其次,通过泰勒公式可以得到幂级数的展开。这是一个先导,因为无论是小波展开,还是傅里叶展开,如果你理解泰勒展式或者幂级数展开式,那么对应的就很容易解释,人们设计傅里叶展式和小波展式的初衷和用意了。高数里的级数主要学两种,除了幂级数以外,另外一个就是傅里叶级数。到这里你所需要的高数知识就已经足够了。
图中黄色框图里的内容都是你在数字信号处理课程里应该学的。我们在学傅里叶变换之前,肯定要在高数里先学一个傅里叶级数,但是傅里叶级数和傅里叶变换有啥关系呢?说白了,他们的本质是一样的,尽管它们各自公式的表达式好像差别还很大。通过傅里叶级数公式,其实你做一些化简和变量替换(关于这部分内容,如果读者有兴趣,主页君后续可以给出详细证明过程),傅里叶级数就变成傅里叶变换了,当然是连续的。然后你根据数字信号处理里面学的采样定理,就能到处傅里叶变换了,这就是DFT!但是DFT有个问题,如果按公式计算,效率太低,实用价值不高,后来人们就发明了一个快速算法,FFT!这一路下来,如果每一步,你都非常清楚,那你就已经算是对傅里叶变换理解的很到位了。
然后说说小波,小波完全可以跟傅里叶变换对比着来理解,而且事实上,在小波出现之前,人们先创造出了一种叫短时傅里叶变换的东西,这可以被认为是二者之间的桥梁。当然,这部分内容,你不知道也没关系,你甚至可以以泰勒公式和幂级数为起点来理解小波。小波级数展开对应的是傅里叶展开,连续小波对应连续傅里叶变换,DWT对应DFT。这些都非常容易理解。同样,人们(其实主要是Mallat)也开发了一种小波的快速算法,FWT。FWT就像FFT在傅里叶变换中的地位。要理解FWT,你需要知道两个基础知识,一个叫做MRA,即多分辨率分析,学习MRA对于理解小波也非常有意义。因为MRA是构建小波的一种方法。另外一个你必须要知道的东西叫做“子带编码”或者子带分解。
要想理解子带分解,你就必须知道QMF,即正交镜像滤波器,而QMF是多采样率信号处理里面的重要内容。所以你必须有多采样率信号处理知识的基础,而多采样率信号处理的基础又是数字信号处理!另外,子带编码还有一个理论基础,或者说,子带编码为啥被证明有效,这就必须要知道率失真理论的有关结论。率失真理论又是信息论的重要组成部分。所以,最后这条线路上,你的学习脉络应该是从信息论出发的(其实主要是互信息和率失真方面的内容),然后才是信号处理,然后是多抽样率处理,然后是子带编码和QMF,这些你都懂了之后,FWT就太Easy了!当然,你直接就学FWT的算法,而不去管它到底是怎么来的,也是可以的,只是就像我之前说的,你的基础基本上都是空的,你学了也只是学个招式,内功心法几乎不会,所以再往上走可能会遇到很多困难。
小波变换的数学支撑体系


3 理论概念

小波函数的定义,注意与无限正弦波的差异:
这里写图片描述
典型小波实例:
这里写图片描述
这里写图片描述
这里写图片描述
傅里叶分析是把一个信号分解成各种不同频率的正弦波,因此正弦波是其基函数。同样,小波分析是把一个信号分解成将原始小波经过移位和缩放之后的一系列小波,因此小波同样可以用作表示一些函数的基函数。
这里写图片描述

3.1 连续小波变换

这里写图片描述
这里写图片描述

3.2 离散小波变换

MALLAT在小波分析中的作用就类似于傅里叶分析中的FFT实现方法。
这里写图片描述
这里写图片描述
为什么可以进行降采样:因为原始信号通过高通,低筒滤波后频率带宽仅为原信号的一半,因此可通过降采样来减少数据量的同时保持数据信息完整性
这里写图片描述

3.3 分解与重构

这里写图片描述
这里写图片描述
上面是信号小波分解后能重构的基础。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

3.4 去噪滤波

这里写图片描述
这里写图片描述
一维信号与二维信号的去噪滤波原理与步骤基本一致,两个关键问题是:“信号数据边界拓展”与“滤波门限值确定”

3.5 一维哈尔小波(举例)

小波变换的基本思想是用一组小波函数或者基函数表示一个函数或者信号,例如图像信号。为了理解什么是小波变换,下面用一个具体的例子来说明小波变换的过程。假设有一幅分辨率只有4个像素的一维图像,对应的像素值分别为[9 7 3 5]。计算它的哈尔小波变换系数:
(一) 求均值(averaging)。计算相邻像素对的平均值,得到一幅分辨率比较低的新图像,它的像素数目变成了2个,即新的图像的分辨率是原来的1/2,相应的像素值为:[8 4];
(二) 求差值(diqqerencing)。很明显,用2个像素表示这幅图像时,图像的信息已经部分丢失。为了能够从由2个像素组成的图像重构出由4个像素组成 的原始图像,就需要存储一些图像的细节系数,以便在重构时找回丢失的信息。方法是把像素对的第一个像素值减去这个像素对的平均值,或者使用这个像素对的差 值除以2。在这个例子中,第一个细节系数是(9-8)=1,因为计算得到的平均值是8,它比9小1而比7大1,存储这个细节系数就可以恢复原始图像的前两 个像素值。使用同样的方法,第二个细节系数是(3-4)=-1,存储这个细节系数就可以恢复后2个像素值。因此,原始图像就可以用下面的两个平均值和两个 细节系数表示[8 4 1 -1];
(三) 重复第1,2步,把由第一步分解得到的图像进一步分解成分辨率更低的图像[6 2 1 -1];

3.6 二维哈尔小波

前面已经介绍了一维小波变换的基本原理和变换方法。这节将结合具体的图像数据系统地介绍如何使用小波对图像进行变换。一幅图像可看成是由许多像素组成的一个矩阵,在进行图像压缩时,为降低对存储器的要求,人们通常把它分成许多小块,例如以8×8个像素为一块,并用矩阵表示,然后分别对每一个图像块进行处理。在小波变换中,由于小波变换中使用的基函数的长度是可变的,虽然无须像以离散余弦变换 (DCT)为基础的JPEG标准算法那样把输入图像进行分块以避免产生JPEG图像那样的“块效应”,但为便于理解小波变换,还是从一个小的图像块入手,并且继续使用哈尔小波对图像进行变换。假设有一幅灰度图像,其中的一个图像块用矩阵 A表示为,
这里写图片描述
一个图像块是一个二维的数据阵列,进行小波变换时可以对阵列的每一行进行变换,然后对行变换之后的阵列的每一列进行变换,最后对经过变换之后的图像数据阵列进行编码。 从求均值(averaging)与求差值(differencing)开始。在图像块矩阵A中,第一行的像素值为[64 2 3 61 60 6 7 57]。步骤1:在第一行上取每一对像素的平均值,并将结果放到第一行的前4个位置,其余的4个数是R0行每一对像素的第一个数与其相应的平均值之差,并将结果放到第一行的后4个位置。步骤2:对第一行前4个数使用与第一步相同的方法,得到两个平均值和两个差(系数),并依次放在第一行的前4个位置,其余的4个细节系数位置不动。步骤3:用与第1和2 步相同的方法,对剩余的一对平均值求平均值和差值。使用求均值和求差值的方法,对矩阵的每一行进行计算,得到A’:
这里写图片描述
其中,每一行的第一个元素是该行像素值的平均值,其余的是这行的细节系数。使用同样的方法,对A’的每一列进行计算,得到A’’:
这里写图片描述
其中,左上角的元素表示整个图像块的像素值的平均值,其余是该图像块的细节系数。根据这个事实,如果从矩阵中去掉表示图像的某些细节系数,事实证明重构的图 像质量仍然可以接受。具体做法是设置一个阈值d,例如d>=5的细节系数就把它当作“0”看待,这样经过变换之后的矩阵就变成A’’’:
这里写图片描述
“0”的数目增加了18个,也就是去掉了18个细节系数。这样做的好处是可提高编码的效率。对A’’’矩阵进行逆变换,得到了重构的近似矩阵AA:
这里写图片描述


4 具体实现

参考:http://wenku.baidu.com/view/12cb092127d3240c8547ef06.html?re=view,注意滤波器系数可由matlab程序函数“wfilters”生成。


5 参考文献

[1] 《小波变换_完美通俗解读》;
[2] 《小波变换经典讲述》;

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值