小波变换(一)
由于项目可能会用到的原因,学一下,感觉已有的通俗易懂教程不够相应的学术性. 教程:《数字信号处理》陈后金著 视频教程: 中国大学mooc-数字信号处理 [TOC] 在正式进入小波变换之前,我们不妨来讨论一下傅里叶变换的局限性和为什么我们需要引入小波变换。 回想傅里叶变换的公式 怎么来解决以上的问题呢?有人提出了短时傅里叶变换来加以改善,我们先来看看短时傅里叶变换的表达式: 通过加入一个滑动的窗函数 (长度为N),来弥补傅里叶变换的频谱上没有时间信息这个弊端 其实原理很简单,就是原来一段的傅里叶变换,现在固定分成几段来分别进行傅里叶变换,那么分成的这几段,可以在时间上独立开来,就变成了 具有时间信息的傅里叶变换 但当然,这个加窗对整个变换也是有影响的,这里不妨先介绍两个术语: 时间分辨率由时窗宽度 决定, 越 小 ,时间分辨率越高. 频谱分辨率是指分辩信号中相邻谱峰的能力 越 小 ,频谱分辨率越高。 在对信号的时频分析中,我们希望时间分辨率和频谱分辨率都可以比较高,但是从定义式里面我们就知道,时 间分辨率和频谱分辨率是相互制约的 ,同时也说明,我们没办法 同时获得 较高的时间分辨率和频谱分辨率. 从这里我们可以再一步印证出,傅里叶变换(连续)具有无穷的频谱分辨率,而无时间分辨率. 现在我们回来讨论短时傅里叶变换的窗函数 的长度N,显然N如果变大,频谱分辨率肯定是越来越好的,时间分辨率确实便来越差的.同时N如果变小,频谱分辨率肯定是越来越差的,时间分辨率便是越来越差的. 既然上面说了时间分辨率和频谱分辨率已经是不可兼得的了,那么现在问题来了, 我们到底想得到什么东西? 回想一下: 傅里叶变换的缺点在他不能有效地处理非平稳信号,短时傅里叶变换的N是固定的,往两边变化都会有制约. 那我们能不能在分析的过程中让这个N变起来?让他 在信号变化快的时候窗变小一点 ,获得较高的时间分辨率,较低的频谱分辨率. 在信号变化慢的时候窗变大一点 ,获得较低的时间分辨率,较高的频谱分辨率. 这个时候就应该给大家引入小波变换了.大家可以先无道理地认为小波变换就是一个窗长度会变的傅里叶变换(虽然我一直不喜欢这个通俗的比喻...) 在正式讲小波变换前,需要先补充一些知识. 在信号分析中,我们常将信号展开成一组信号的线性组合,即有 其中,{ }为展开系数,{ }为展开函数 若展开式具有 唯一性 ,即不同的信号对应不同的展开系数 ,则该展开函数 称为基(basis)。 对基函数来说,若其内积满足: 称此基函数为 正交规范(orthonormal) 基函数.正交在于其他内积等于0,规范在于系数是1 在此基础上我们可以知道,由于每个基函数之间都是互相正交的,所以我们可以将x(t)和基函数 进行内积计算,便可以得到相应的展开系数 ,也就是: 稍微有点泛函常识的我们可以知道,这就是 将信号往给定基函数元素所张成的内积空间里面投射 比较出名的就是傅里叶级数,将信号往以 为基函数的内积空间(无穷维空间)内投射,得到的相应正交基函数的特征值(也就是展开系数 )这里的 就是傅里叶级数里面的 .大家大可看看表达式,都是一模一样的. 当然这个是反着来用的,根据每个维度的特征值来合成回x(t),也就是逆变换 这里要注意的还有一点是,所谓的基函数,其实不仅仅是一个函数,而是一些有相同特征且相互正交的函数族. 小波(wavelet)信号是一类衰减较快的波动信号,其能量有限,且相对集中在局部区域. 先来看看常用的小波函数: 和小波变换相关的还有尺度函数(父小波)(Scaling Function) 尺度函数族 定义为: 小波函数族和尺度函数族前面的系数 是为了保持基函数的能量始终为1 对于这两个后面会有更理性的认识,这里我们先直接介绍DWT和IDWT 有了小波函数和尺度函数,就相当于明确了我们的小波的基函数. 我们可以利用小波函数族 ,尺度函数族 ,来将信号进行小波展开: 同时,上式也被称为 离散小波逆变换 (IDWT) 相反地,由信号x(t)求解展开系数{ }称为 离散小波变换(Discrete Wavelet Transform, DWT) 我们常用 来表示信号的粗糙成分, 来表示信号的精细部分.详细内容会在下一篇博客继续阐述. 之前总有一段时间不想学小波,感觉这个名词有点高大上什么的,然后因为最近要涉及到相关的信息,所以不得不学一下.学完个基础之后不得不感叹的是,小波变换我觉得比傅里叶变换还要来得简单直接,演示的效果有时还蛮惊艳的. 形象易懂讲解算法I——小波变换 小波变换完美通俗讲解系列之 (一) 小波变换完美通俗讲解系列之 (二 Wavelet transform - Wikipedia A Tutorial of the Wavelet Transform Ruch, David K. And Van Fleet, Patrick J.《Wavelet Theory:An elementary Approach With Applications》 Wavelets in Engineering Applications 罗高涌 ( 这可是我们学院罗教授出的书喔 ) 购买链接如下: Wavelets in Engineering Applications
小波变换
傅里叶变换的不足: 想知道各个成分出现的时间。知道信号频率随时间变化的情况,各个时刻的瞬时频率及其幅值——这也就是时频分析。 一个简单可行的方法就是——加窗。 把整个时域过程分解成无数个等长的小过程,每个小过程近似平稳,再傅里叶变换,就知道在哪个时间点上出现了什么频率了。”这就是短时傅里叶变换。 使用STFT存在一个问题,我们应该用多宽的窗函数? 窗太窄,窗内的信号太短,会导致频率分析不够精准,频率分辨率差。窗太宽,时域上又不够精细,时间分辨率低。 用窄窗,时频图在时间轴上分辨率很高,几个峰基本成矩形,而用宽窗则变成了绵延的矮山。但是频率轴上,窄窗明显不如下边两个宽窗精确。 高频适合小窗口,低频适合大窗口。 然而STFT的窗口是固定的,在一次STFT中宽度不会变化,所以STFT还是无法满足非稳态信号变化的频率的需求。 频域中提取的特征主要有:FFT系数、熵、能谱密度、功率下降率(Power Decline Rate,PDR)等。 小波函数定义为 其中 是缩放因子,控制小波函数的伸缩; 是平移参数,控制小波函数的平移。缩放因子对应频率,平移参数对应时间。 在缩放因子为 的子空间的投影为 其中小波系数为 代表复共轭。 为了更直观地理解小波变换,先引入 Parseval 定理: 从上式不难看出,只有当小波中心频率与原始信号固有频率接近的时候,小波系数才会取得极大值。因此,小波可以看作是一个只允许频率和小波中心频率相近的信号通过的带通滤波器。通过缩放因子可以得到一系列不同的中心频率,通过平移系数则可以检测时域上不同位置的信号。这样就得到了原信号在各个时间点包含的频率信息。 STFT是给信号加窗,分段做FFT;而小波直接把傅里叶变换的基给换了——将无限长的三角函数基换成了有限长的会衰减的小波基。这样不仅能够获取频率,还可以定位到时间了 傅里叶变换把无限长的三角函数作为基函数: 基函数会伸缩、会平移(其实本质并非平移,而是两个正交基的分解)。缩得窄,对应高频;伸得宽,对应低频。然后这个基函数不断和信号做相乘。 某一个尺度(宽窄)下乘出来的结果,就可以理解成信号所包含的当前尺度对应频率成分有多少。于是,基函数会在某些尺度下,与信号相乘得到一个很大的值,因为此时二者有一种重合关系。那么我们就知道信号包含该频率的成分的多少。这两种尺度能乘出一个大的值(相关度高),所以信号包含较多的这两个频率成分,在频谱上这两个频率会出现两个峰。 小波做的改变就在于,将无限长的三角函数基换成了有限长的会衰减的小波基。 对于突变信号,傅里叶变换存在吉布斯效应,我们用无限长的三角函数怎么也拟合不好突变信号: 尺度函数 : scaling function (在一些文档中又称为父函数 father wavelet ) 小波函数 : wavelet function(在一些文档中又称为母函数 mother wavelet) 连续的小波变换 :CWT 离散的小波变换 :DWT 不同的小波基函数,是由同一个基本小波函数经缩放和平移生成的。 小波变换是将原始图像与小波基函数以及尺度函数进行内积运算,所以一个尺度函数和一个小波基函数就可以确定一个小波变换 连续小波变换 cwt(data, scales, wavelet, sampling_period=1.) 离散小波变换 pywt.dwt(data, wavelet, mode=’symmetric’, axes=-1) 经过小波变换后图像会生成低频信息和高频信息。低频信息对应于求均值,高频信息对应于求差值。 均值是局部的平均值,变化缓慢,属于低频信息,存储图片的轮廓信息,近似信息 差值是局部的波动值,变化较快,属于高频信息,存储图片的细节信息,局部信息,另外含有噪音 是高通滤波器,允许高频信息通过 是低通滤波器,允许低频信息通过 在拼接子图之前,应该先对各个子图进行处理。未处理的情况下,因为高频部分的像素值极小甚至小于0,所以高频区域呈黑色。最简单的处理方式为:将高频信息均加255,得到如下结果: 阈值函数 pywt.threshold (data, value, mode=, substitute=) 信号产生的小波系数含有信号的重要信息,将信号经小波分解后小波系数较大,噪声的小波系数较小,并且噪声的小波系数要小于信号的小波系数,通过选取一个合适的阀值,大于阀值的小波系数被认为是有信号产生的,应予以保留,小于阀值的则认为是噪声产生的,置为零从而达到去噪的目的。 小波阀值去噪的基本问题包括三个方面: 小波基的选择,阀值的选择,阀值函数的选择。 (1) 小波基的选择:通常我们希望所选取的小波满足以下条件:正交性、高消失矩、紧支性、对称性或反对称性。但事实上具有上述性质的小波是不可能存在的,因为小波是对称或反对称的只有Haar小波,并且高消失矩与紧支性是一对矛盾,所以在应用的时候一般选取具有紧支的小波以及根据信号的特征来选取较为合适的小波。 (2) 阀值的选择:直接影响去噪效果的一个重要因素就是阀值的选取,不同的阀值选取将有不同的去噪效果。目前主要有通用阀值(VisuShrink)、SureShrink阀值、Minimax阀值、BayesShrink阀值等。 (3) 阀值函数的选择:阀值函数是修正小波系数的规则,不同的反之函数体现了不同的处理小波系数的策略。最常用的阀值函数有两种:一种是硬阀值函数,另一种是软阀值函数。还有一种介于软、硬阀值函数之间的Garrote函数。 另外,对于去噪效果好坏的评价,常用信号的信噪比(SNR)与估计信号同原始信号的均方根误差(RMSE)来判断。 可以看到API给出了很多小波族,每个小波族又有很多系数可供我们去选择, “相同类的统计特征相近,不同类的统计特征相差很大” ,来挑选小波基函数。 多尺度小波变换一般是3~4层,但是要注意的是,如果实践中所用的图片太小,或者纹理并不丰富,其实用单层的小波变换就足够了。如果你用多层的小波变换,Pywalvets 仍只会返回给你一层变换的结果,因为信息量过小导致不能采样来进一步进行变换。