哈尔滨阿城网站建设,免费申请版权,数据库营销,优化推广网站推荐从傅里叶变换到小波变换#xff0c;并不是一个完全抽象的东西#xff0c;可以讲得很形象。小波变换有着明确的物理意义#xff0c;如果我们从它的提出时所面对的问题看起#xff0c;可以整理出非常清晰的思路。
下面我就按照傅里叶--短时傅里叶变换--小波变换的顺…从傅里叶变换到小波变换并不是一个完全抽象的东西可以讲得很形象。小波变换有着明确的物理意义如果我们从它的提出时所面对的问题看起可以整理出非常清晰的思路。
下面我就按照傅里叶--短时傅里叶变换--小波变换的顺序讲一下为什么会出现小波这个东西、小波究竟是怎样的思路。
1. 傅里叶变换
我们都知道傅里叶变换可以把一个信号从时域变换到频域。但是我们必须要理解为什么傅里叶变换可以把信号从时域转为频域呢
傅里叶变换的形式为 PS傅里叶变换还存在系数有的文章写的是 有的文章写的是 两个系数只要满足正变换系数乘上逆变换系数等于 即可。这是为了保证经过一次正变换和反变换之后得到的信号与原信号幅值相同与我们接下来的讨论关系不大。
我们知道根据欧拉公式 。也就是说傅里叶变换的本质就是将原始信号乘上一组三角函数正余弦之后在整个时间域上积分。就这么简单傅里叶变换FT的正交性可以参考知乎文章从傅里叶变换进阶到小波变换一 - 知乎
关于离散傅里叶变换DFT本质都是一样的抓住离散性和有限性两个特点即可。离散性是指积分变成了累加有限性是指积分/累加区间不是 (−∞,∞) 了而是一个有限区间了。
我们知道傅里叶变化可以分析信号的频谱那么为什么还要提出小波变换答案就是“对非平稳过程傅里叶变换有局限性”。看如下一个简单的信号 做完FFT快速傅里叶变换后可以在频谱上看到清晰的四条线信号包含四个频率成分。
一切没有问题。但是如果是频率随着时间变化的非平稳信号呢 如上图最上边的是频率始终不变的平稳信号。而下边两个则是频率随着时间改变的非平稳信号它们同样包含和最上信号相同频率的四个成分。 做FFT后我们发现这三个时域上有巨大差异的信号频谱幅值谱却非常一致。尤其是下边两个非平稳信号我们从频谱上无法区分它们因为它们包含的四个频率的信号的成分确实是一样的只是出现的先后顺序不同。
可见傅里叶变换处理非平稳信号有天生缺陷。它只能获取一段信号总体上包含哪些频率的成分但是对各成分出现的时刻并无所知。因此时域相差很大的两个信号可能频谱图一样。
然而平稳信号大多是人为制造出来的自然界的大量信号几乎都是非平稳的所以在比如生物医学信号分析等领域的论文中基本看不到单纯傅里叶变换这样naive的方法。 上图所示的是一个正常人的事件相关电位。对于这样的非平稳信号只知道包含哪些频率成分是不够的我们还想知道各个成分出现的时间。知道信号频率随时间变化的情况各个时刻的瞬时频率及其幅值——这也就是时频分析。
2. 短时傅里叶变换Short-time Fourier Transform, STFT
一个简单可行的方法就是——加窗。“把整个时域过程分解成无数个等长的小过程每个小过程近似平稳再傅里叶变换就知道在哪个时间点上出现了什么频率了。”这就是短时傅里叶变换。 看图 时域上分成一段一段做FFT不就知道频率成分随着时间的变化情况了吗 用这样的方法可以得到一个信号的时频图了 图上既能看到10Hz, 25 Hz, 50 Hz, 100 Hz四个频域成分还能看到出现的时间。两排峰是对称的所以大家只用看一排就行了。
是不是棒棒的时频分析结果到手。但是STFT依然有缺陷。
使用STFT存在一个问题我们应该用多宽的窗函数 窗太宽太窄都有问题 窗太窄窗内的信号太短会导致频率分析不够精准频率分辨率差。窗太宽时域上又不够精细时间分辨率低。 这里插一句这个道理可以用海森堡不确定性原理来解释。类似于我们不能同时获取一个粒子的动量和位置我们也不能同时获取信号绝对精准的时刻和频率。这也是一对不可兼得的矛盾体。我们不知道在某个瞬间哪个频率分量存在我们知道的只能是在一个时间段内某个频带的分量存在。 所以绝对意义的瞬时频率是不存在的。
看看实例效果吧 上图对同一个信号4个频率成分采用不同宽度的窗做STFT结果如右图。用窄窗时频图在时间轴上分辨率很高几个峰基本成矩形而用宽窗则变成了绵延的矮山。但是频率轴上窄窗明显不如下边两个宽窗精确。
所以窄窗口时间分辨率高、频率分辨率低宽窗口时间分辨率低、频率分辨率高。对于时变的非稳态信号高频适合小窗口低频适合大窗口。然而STFT的窗口是固定的在一次STFT中宽度不会变化所以STFT还是无法满足非稳态信号变化的频率的需求。
3. 连续小波变换CWT
那么你可能会想到让窗口大小变起来多做几次STFT不就可以了吗没错小波变换就有着这样的思路。 但事实上小波并不是这么做的,不能认为“小波变换就是根据算法加不等长的窗对每一小部分进行傅里叶变换”。小波变换并没有采用窗的思想更没有做傅里叶变换。 至于为什么不采用可变窗的STFT呢我认为是因为这样做冗余会太严重STFT做不到正交化这也是它的一大缺陷。
于是小波变换的出发点和STFT还是不同的。STFT是给信号加窗分段做FFT而小波直接把傅里叶变换的基给换了——将无限长的三角函数基换成了有限长的会衰减的小波基。这样不仅能够获取频率还可以定位到时间了~
【解释】 来我们再回顾一下傅里叶变换吧没弄清傅里叶变换为什么能得到信号各个频率成分的同学也可以再借我的图理解一下。 傅里叶变换把无限长的三角函数作为基函数 这个基函数会伸缩、会平移其实本质并非平移而是两个正交基的分解。缩得窄对应高频伸得宽对应低频。然后这个基函数不断和信号做相乘。某一个尺度宽窄下乘出来的结果就可以理解成信号所包含的当前尺度对应频率成分有多少。于是基函数会在某些尺度下与信号相乘得到一个很大的值因为此时二者有一种重合关系。那么我们就知道信号包含该频率的成分的多少。
仔细体会可以发现这一步其实是在计算信号和三角函数的相关性。 看这两种尺度能乘出一个大的值相关度高所以信号包含较多的这两个频率成分在频谱上这两个频率会出现两个峰。 以上就是粗浅意义上傅里叶变换的原理。
如前边所说小波做的改变就在于将无限长的三角函数基换成了有限长的会衰减的小波基。 这就是为什么它叫“小波”因为是很小的一个波嘛~ 从公式可以看出不同于傅里叶变换变量只有频率ω小波变换有两个变量尺度ascale和平移量 τtranslation。尺度a控制小波函数的伸缩平移量 τ控制小波函数的平移。尺度就对应于频率反比平移量 τ就对应于时间。 当伸缩、平移到这么一种重合情况时也会相乘得到一个大的值。这时候和傅里叶变换不同的是这不仅可以知道信号有这样频率的成分而且知道它在时域上存在的具体位置。 而当我们在每个尺度下都平移着和信号乘过一遍后我们就知道信号在每个位置都包含哪些频率成分。
看到了吗有了小波我们从此再也不害怕非稳定信号啦从此可以做时频分析啦
做傅里叶变换只能得到一个频谱做小波变换却可以得到一个时频谱
时域信号 傅里叶变换结果 小波变换结果 我们来看绿色的小峰对应小的 s(scale) 也就是高的频率。他们的时间分辨率很好 s 的区间很小根据s,f 的倒数关系对应的 f 的区间就很大因此频率分辨率不好。
粉色的高峰对应高的s(scale) 也就是低的频率 s的区间很大根据s,f 的倒数关系对应的 f 的区间就很小因此频率分辨率很好时间分辨率不好有混叠。
这也就再一次说明了CWT是动态分辨率的这也是CWT相对于STFT的优势所在。
小波还有一些好处比如我们知道对于突变信号傅里叶变换存在吉布斯效应我们用无限长的三角函数怎么也拟合不好突变信号 然而衰减的小波就不一样了 4. 离散小波变换DWT
4.1 连续小波变换的确点
实际采样信号往往具有两个特点1、离散性就是采集数据不连续很容易理解采集信号肯定是一个一个数据采集的2、有限性虽然理想的CWT是从 (−∞,∞) 进行积分的但是实际信号往往是在一个区间内 (a,b) 的。如下图所示。 所以由于CWT需要一个连续信号但是实际采样信号往往是离散的我们无法直接对实际信号进行CWT。
或许你想我们对实际采样信号进行插值连续化不就可以使得其连续了吗
是的。将实际采样信号插值连续化之后是可对它进行CWT的。
但是我们也都知道我们的帮手——计算机是无法处理连续问题的。计算机只能处理离散问题。如果计算机要进行CWT就意味着需要计算机做无穷次运算计算机计算能力再强也是做不到的。
因此为了使得计算机可以进行小波变换我们需要引入离散小波变换DWT。
4.2 离散小波变换DWT的Mallet算法
DWT有很多种实现方式我们在这里介绍Mallet算法它是DWT的以一种经典的快速算法也比较易懂。
动态分辨率图高频部分窄窗高的时域分辨率低的频域分辨率低频部分宽窗低的时域分辨率高的频域分辨率。
我们是利用小波母函数的挤压和拉伸来实现动态分辨率的
当小波母函数被挤压的时候频率就高此时窗子窄时域分辨率就好根据海森堡测不准原理频域分辨率就差
当小波母函数被拉伸的时候频率就低此时窗子宽时域分辨率就差根据海森堡测不准原理频域分辨率就好。 也就是说我们控制的是不同频率对应的窗长即时域分辨率频率分辨率是通过海森堡测不准原理得到的从而达到了动态分辨率。
那么如果我们这次不控制窗长即时域分辨率转而控制频域分辨率能否达到动态分辨率呢答案是可以这就是Mallet算法要解决的问题。
半子带滤波
我们知道小波母函数本质上是一种带通滤波器。那么假设可以通过小波母函数构造得到两个滤波器至于怎么得到后续会介绍一下包括一个高通滤波器和一个低通滤波器。
假设信号中的最高频率为 。那么高通滤波器的作用就是得到 (,) 的部分低通滤波器的作用就是得到 (0,) 的部分。如下图所示 我们将这个过程称为一次半子带滤波。
下采样与上采样
我们定义一个N倍下采样过程将采样点N倍稀释。如下就是一个2倍下采样过程将采样点稀释2倍即每2个点采样数据点就去除一个点。 N倍上采样过程将采样点数量增加N倍。一般通过补0或者插值的方法实现上采样。
离散小波分解
我们将一次半子带滤波一次2倍下采样称为一层小波分解。如下图所示图中的“箭头2”表示一次2倍下采样。 假设原采样信号有 N 个点信号最高频率为 根据采样定律 为采样频率的一半。
经过一次高通滤波后得到了 (,)的部分也是 N 个点再经过一次2倍下采样变成了 N/2 个点我们将这N/2个点称为小波分解的高频系数为什么叫作系数会在后面解释。
经过一次低通滤波后得到了 (0,) 的部分也是 N 个点再经过一次2倍下采样变成了 N/2 个点我们将这N/2个点称为小波分解的低频系数。
也就是说经过一层小波分解的信号它的总长度加起来还是 N 是不变的。
现在我们已经对 (0,),N 个点的原信号进行了第一层小波分解得到了(,),N/2 个点的高频系数和(0,),N/2 个点的低频系数。
那么我们保持 (,),N/2 个点的高频系数不变把(0,),N/2 个点的低频系数作为信号再进行一次小波分解。于是可以得到 (,),N/4 个点的高频系数和 (0,),N/4 个点的低频系数。
这个过程被称为第2层小波分解。我们验证一下经过2层小波分解的信号它的总长度加起来还是N 是不变的。
依此类推我们可以进行第三层第四层小波分解如图所示直到第 层小波分解。在第 层小波分解由于不断的下采样低频系数和高频系数都只剩1个数了小波分解无法进行下去了。
因此小波分解的原始信号个数一般也需要是2的幂次。不过在各种数学计算软件里如果输入不是2的幂次它会自动帮你补零到2的幂次。 我们取4层小波分解的结果来看一下。 在频域上我们得到的是 (,) (,)(,)(,)(0,)频域区间的系数。
在时域上由于不断的2倍下采样不断地丢弃数据所以最后一层分解得到的(,)(0,)的时域分辨率最差第一层分解保留的(,) 时域分辨率最好。
那么我们得到的分辨率就是这样子的 这不就是上一篇文章我们讲过的小波变换得到的动态分辨率吗
是的这就是离散小波变换的快速算法之一——Mallet算法通过不断的半子带滤波和下采样控制不同频率成分的频域分辨率进而达到动态分辨率。
最后用一张比较经典的图再来演示一下小波分解的过程。 为采样信号的最高频率。g(n) 代表高通滤波器 ℎ(n) 代表低通滤波器“箭头2”表示2倍下采样。 再来举个例子形象地说明一下DWT的使用吧。
希望对于一个采样率为1000HZ的非稳态信号进行小波分解下图为包含了256个采样点即256ms的原始采样信号。 1、首先选择小波分解的层次。
可以根据对最低频率区间的要求来选择小波分解的层数。比如我之前做项目的时候采样率为1000HZ那么信号的最高频率为 Fs500Hz 。我认为对于频率低于20HZ的成分不需要再进一步区分了。因此我选择层小波分解得到的最低一层的频率区间为 (0,) 即为 (0,16)Hz 这就够用了。
2、接下来进行5层小波分解得到小波分解系数。
如下图中图1依然是原始采样信号 图2到图6为第1层到第5层小波分解的高频系数图7为第5层小波分解的低频系数。如图所示这些小波分解系数对应着不同的频率区间。 这就是DWT了又称为小波分解。
这里提一下小波分解是可逆的即可以通过不同频率区间的小波分解系数进行重构得到不同频率区间的重构信号。
3、所以最后进行小波重构得到重构信号。
如下图中图1依然是原始采样信号图2到图7为通过不同频率区间的小波系数进行重构得到的重构信号。将图2到图7加起来就可以得到重构原始信号其和原始采样信号的误差称为重构误差。 4.3 尺度函数和小波函数
如果我们需要对一段信号进行小波分析那么就要明确2个问题
1.用于检波的小波长什么样? 2.小波应该如何进行缩放(以检测更高的频率信号)? 因此,基于上面两点,我们就需要明确2个函数,它们分别叫: 小波函数----顾名思义,用于描述小波长什么样,同时它有时也叫母小波函数。 尺度函数----顾名思义,用于描述小波应该如何进行缩放,当然有母就有父,它也叫父尺度函数。
离散小波变换的父小波 scaling function
尺度函数被定义为 其中, j,k 都是整数其中这个 j表示这个尺度函数宽度j 越大尺度函数越窄对应的小波频率越高 k可以视作尺度函数平移的位置越大表示移动的越到后面为了更直观的说明笔者使用了 Haar 尺度函数生成以下几张图
我们先来看看 ,它长这样 我们再来看看 ,可以看到,k变成了1,因此它是 平移后的结果,长这样: 接下来就是 根据公式,他应该是: 也就是 而 是 平移后的结果,因此是这样: 当然还有 ,,.... 依次类推,你可能已经注意到了,低级的尺度函数可以是高级尺度函数的组合,例如: 如果我们用一个递归的思想来表示这个尺度函数,那么,函数可以写成: 就是尺度函数可以表示为高一级尺度的线性组合,其中,这个 又称作展开系数。
尺度函数应该满足以下条件
1.尺度函数对于其整数平移是正交的。说人话就是小波就那么一小段分析时一段一段平移,相乘积分后是0。 2.尺度函数以低尺度张成的函数控件嵌套在以高尺度张成的函数空间中,即 说人话就是看下图, f(x) 函数比 g(x) 函数要更宽(刚好一倍),我们可以说 g(x) 可以用来组合表示 f(x) 也就是说, g(x) 的尺度空间比 f(x) 的空间更高,也就是说高尺度空间可以用来表示低尺度空间,在几何中就是这样一个包含关系。 3.在每个尺度上唯一可表示的函数是f(x)0 4.所有可度量的,平方可积的函数都可以表示为尺度函数在 j−∞ 时的线性组合,即 (说人话:还记得傅里叶变换么,用无穷多不同频率去叠加拟合原信号,把正弦波换成小波,不还是一个意思,就像你用一个积木去组个拼接一个形状,大的轮廓用大积木,小的细节用小积木,如果拼不出细节,只是你的积木不够小) 离散小波变换的母小波 Wavelet function
当我们确定了尺度函数以后,我们就可以开始构造小波函数了,小波函数和尺度函数同样类似,它的定义如下: *若令 表示小波函数张成的函数空间, 表示小波函数张成的函数空间,则 说人话啥意思呢,你可以想啊,现在我们用尺度的去拟合原信号时,因为原信号中包含了当前尺度函数无法组成的成分,比如那些当前尺度空间更高阶的细节成分,因此,细节的信息没了,这个时候怎么办呢,当然是要把它找回来啊,那么在哪找呢,诶,小波函数的张成函数空间,就是用来干这个的,可以这么说,尺度函数和小波函数各为互补,尺度函数用来表示原信号的大致轮廓(低频信息),而小波函数则用来表示原信号的细节信息(高频信息),当它们组合在一起后,就是当前尺度空间的样子了。
好的回到正题因为上面的这层关系小波函数可以写作高一级尺度函数的加权和 其中又称为小波函数系数,它与尺度函数系数有如下关系: 最后,根据上述推论,我们可以将函数 写作其小波级数展开形式: 其中 与 称为近似系数和细节系数(就像傅里叶级数展开式中的系数一样,是我们重点要求的系数)
其定义有: 4.4 Haar 小波
作为小波分析中最简单的小波,尽管 haar 小波在大多数的震荡信号中并不常用,但 haar小波毫无疑问是作为小波理论最经典,最亲民,最适合作为教程来进行讲解的小波。
实际上在上文中开始讲解小波变换的范例中已经大量引用了haar小波的内容现在我们着重讨论 haar 小波并用haar 小波作为例子计算 的变换结果,首先和所有的小波分析一样,我们首先有搞懂 haar 小波的尺度函数及小波函数,haar小波的尺度函数定义如下: Haar小波的小波函数定义如下: 现在,我们对其进行haar小波级数展开,也就是求 与 ,我们设初始尺度 j00 ,依据上一章给出的展开式系数,我们求以下系数(计算过程分别代入): 然后将它代入展开式中 参考
从傅里叶变换进阶到小波变换一 - 知乎
如何通俗地讲解傅立叶分析和小波分析间的关系 - 知乎
https://feihu.eng.ua.edu/NSF_TUES/w7_2.pdf
小波导论(二)(introduction to wavelet transform) - 知乎