https://zhuanlan.zhihu.com/p/22450818?refer=dong5

最早发于回答:能不能通俗的讲解下傅立叶分析和小波分析之间的关系? - 咚懂咚懂咚的回答
现收入专栏。

从傅里叶变换到小波变换,并不是一个完全抽象的东西,可以讲得很形象。小波变换有着明确的物理意义,如果我们从它的提出时所面对的问题看起,可以整理出非常清晰的思路。

下面我就按照傅里叶-->短时傅里叶变换-->小波变换的顺序,讲一下为什么会出现小波这个东西、小波究竟是怎样的思路。(反正题主要求的是通俗形象,没说简短,希望不会太长不看。。)

一、傅里叶变换
关于傅里叶变换的基本概念在此我就不再赘述了,默认大家现在正处在理解了傅里叶但还没理解小波的道路上。(在第三节小波变换的地方我会再形象地讲一下傅里叶变换)

下面我们主要将傅里叶变换的不足。即我们知道傅里叶变化可以分析信号的频谱,那么为什么还要提出小波变换?答案就是方沁园所说的,“对非平稳过程,傅里叶变换有局限性”。看如下一个简单的信号:做完FFT(快速傅里叶变换)后,可以在频谱上看到清晰的四条线,信号包含四个频率成分。

一切没有问题。但是,如果是频率随着时间变化的非平稳信号呢?

如上图,最上边的是频率始终不变的平稳信号。而下边两个则是频率随着时间改变的非平稳信号,它们同样包含和最上信号相同频率的四个成分。
做FFT后,我们发现这三个时域上有巨大差异的信号,频谱(幅值谱)却非常一致。尤其是下边两个非平稳信号,我们从频谱上无法区分它们,因为它们包含的四个频率的信号的成分确实是一样的,只是出现的先后顺序不同。

可见,傅里叶变换处理非平稳信号有天生缺陷。它只能获取一段信号总体上包含哪些频率的成分,但是对各成分出现的时刻并无所知。因此时域相差很大的两个信号,可能频谱图一样。

然而平稳信号大多是人为制造出来的,自然界的大量信号几乎都是非平稳的,所以在比如生物医学信号分析等领域的论文中,基本看不到单纯傅里叶变换这样naive的方法。
上图所示的是一个正常人的事件相关电位。对于这样的非平稳信号,只知道包含哪些频率成分是不够的,我们还想知道各个成分出现的时间。知道信号频率随时间变化的情况,各个时刻的瞬时频率及其幅值——这也就是时频分析。

二、短时傅里叶变换(Short-time Fourier Transform, STFT)
一个简单可行的方法就是——加窗。我又要套用方沁园同学的描述了,“把整个时域过程分解成无数个等长的小过程,每个小过程近似平稳,再傅里叶变换,就知道在哪个时间点上出现了什么频率了。”这就是短时傅里叶变换。
看图:
时域上分成一段一段做FFT,不就知道频率成分随着时间的变化情况了吗!
用这样的方法,可以得到一个信号的时频图了:
——此图像来源于“THE WAVELET TUTORIAL”
图上既能看到10Hz, 25 Hz, 50 Hz, 100 Hz四个频域成分,还能看到出现的时间。两排峰是对称的,所以大家只用看一排就行了。

是不是棒棒的?时频分析结果到手。但是STFT依然有缺陷。

使用STFT存在一个问题,我们应该用多宽的窗函数?
窗太宽太窄都有问题:
窗太窄,窗内的信号太短,会导致频率分析不够精准,频率分辨率差。窗太宽,时域上又不够精细,时间分辨率低。
(这里插一句,这个道理可以用海森堡不确定性原理来解释。类似于我们不能同时获取一个粒子的动量和位置,我们也不能同时获取信号绝对精准的时刻和频率。这也是一对不可兼得的矛盾体。我们不知道在某个瞬间哪个频率分量存在,我们知道的只能是在一个时间段内某个频带的分量存在。 所以绝对意义的瞬时频率是不存在的。)

看看实例效果吧:
——此图像来源于“THE WAVELET TUTORIAL”
上图对同一个信号(4个频率成分)采用不同宽度的窗做STFT,结果如右图。用窄窗,时频图在时间轴上分辨率很高,几个峰基本成矩形,而用宽窗则变成了绵延的矮山。但是频率轴上,窄窗明显不如下边两个宽窗精确。

所以窄窗口时间分辨率高、频率分辨率低,宽窗口时间分辨率低、频率分辨率高。对于时变的非稳态信号,高频适合小窗口,低频适合大窗口。然而STFT的窗口是固定的,在一次STFT中宽度不会变化,所以STFT还是无法满足非稳态信号变化的频率的需求。

三、小波变换

那么你可能会想到,让窗口大小变起来,多做几次STFT不就可以了吗?!没错,小波变换就有着这样的思路。
但事实上小波并不是这么做的(关于这一点,方沁园同学的表述“小波变换就是根据算法,加不等长的窗,对每一小部分进行傅里叶变换”就不准确了。小波变换并没有采用窗的思想,更没有做傅里叶变换。)
至于为什么不采用可变窗的STFT呢,我认为是因为这样做冗余会太严重,STFT做不到正交化,这也是它的一大缺陷。

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

【解释】
来我们再回顾一下傅里叶变换吧,没弄清傅里叶变换为什么能得到信号各个频率成分的同学也可以再借我的图理解一下。
傅里叶变换把无限长的三角函数作为基函数:

这个基函数会伸缩、会平移(其实本质并非平移,而是两个正交基的分解)。缩得窄,对应高频;伸得宽,对应低频。然后这个基函数不断和信号做相乘。某一个尺度(宽窄)下乘出来的结果,就可以理解成信号所包含的当前尺度对应频率成分有多少。于是,基函数会在某些尺度下,与信号相乘得到一个很大的值,因为此时二者有一种重合关系。那么我们就知道信号包含该频率的成分的多少。

仔细体会可以发现,这一步其实是在计算信号和三角函数的相关性。

看,这两种尺度能乘出一个大的值(相关度高),所以信号包含较多的这两个频率成分,在频谱上这两个频率会出现两个峰。

以上,就是粗浅意义上傅里叶变换的原理。

如前边所说,小波做的改变就在于,将无限长的三角函数基换成了有限长的会衰减的小波基。
这就是为什么它叫“小波”,因为是很小的一个波嘛~


从公式可以看出,不同于傅里叶变换,变量只有频率ω,小波变换有两个变量:尺度a(scale)和平移量 τ(translation)。尺度a控制小波函数的伸缩,平移量 τ控制小波函数的平移。尺度就对应于频率(反比),平移量 τ就对应于时间。


当伸缩、平移到这么一种重合情况时,也会相乘得到一个大的值。这时候和傅里叶变换不同的是,这不仅可以知道信号有这样频率的成分,而且知道它在时域上存在的具体位置。

而当我们在每个尺度下都平移着和信号乘过一遍后,我们就知道信号在每个位置都包含哪些频率成分。

看到了吗?有了小波,我们从此再也不害怕非稳定信号啦!从此可以做时频分析啦!

做傅里叶变换只能得到一个频谱,做小波变换却可以得到一个时频谱!
↑:时域信号
↑:傅里叶变换结果

——此图像来源于“THE WAVELET TUTORIAL”
↑:小波变换结果

小波还有一些好处,比如,我们知道对于突变信号,傅里叶变换存在吉布斯效应,我们用无限长的三角函数怎么也拟合不好突变信号:
然而衰减的小波就不一样了:

以上,就是小波的意义。

-----------------------------------------------------------------------------------------------------------

以上只是用形象地给大家展示了一下小波的思想,希望能对大家的入门带来一些帮助。毕竟如果对小波一无所知,直接去看那些堆砌公式、照搬论文语言的教材,一定会痛苦不堪。
在这里推荐几篇入门读物,都是以感性介绍为主,易懂但并不深入,对大家初步理解小波会很有帮助。文中有的思路和图也选自于其中:
1. THE WAVELET TUTORIAL (强烈推荐,点击链接:INDEX TO SERIES OF TUTORIALS TO WAVELET TRANSFORM BY ROBI POLIKAR
2. WAVELETS:SEEING THE FOREST AND THE TREES
3. A Really Friendly Guide to Wavelets
4. Conceptual wavelets

但是真正理解透小波变换,这些还差得很远。比如你至少还要知道有一个“尺度函数”的存在,它是构造“小波函数”的关键,并且是它和小波函数一起才构成了小波多分辨率分析,理解了它才有可能利用小波做一些数字信号处理;你还要理解离散小波变换、正交小波变换、二维小波变换、小波包……这些内容国内教材上讲得也很糟糕,大家就一点一点啃吧~

-------------------------------------------------------------------------------------------------------------------------
一些问题的回答:
1. 关于海森堡不确定性原理
不确定性原理,或者叫测不准原理,最早出自量子力学,意为在微观世界,粒子的位置与动量不可同时被确定。但是这个原理并不局限于量子力学,有很多物理量都有这样的特征,比如能量和时间、角动量和角度。体现在信号领域就是时域和频域。不过更准确一点的表述应该是:一个信号不能在时空域和频域上同时过于集中;一个函数时域越“窄”,它经傅里叶变换的频域后就越“宽”。
如果有兴趣深入研究一下的话,这个原理其实非常耐人寻味。信号处理中的一些新理论在根本上也和它有所相连,比如压缩感知。如果你剥开它复杂的数学描述,最后会发现它在本质上能实现其实和不确定性原理密切相关。而且大家不觉得这样一些矛盾的东西在哲学意义上也很奇妙吗?

2. 关于正交化
什么是正交化?为什么说小波能实现正交化是优势?
简单说,如果采用正交基,变换域系数会没有冗余信息,变换前后的信号能量相等,等于是用最少的数据表达最大的信息量,利于数值压缩等领域。JPEG2000压缩就是用正交小波变换。
比如典型的正交基:二维笛卡尔坐标系的(1,0)、(0,1),用它们表达一个信号显然非常高效,计算简单。而如果用三个互成120°的向量表达,则会有信息冗余,有重复表达。
但是并不意味着正交一定优于不正交。比如如果是做图像增强,有时候反而希望能有一些冗余信息,更利于对噪声的抑制和对某些特征的增强。

3. 关于瞬时频率
  原问题:图中时刻点对应一频率值,一个时刻点只有一个信号值,又怎么能得到他的频率呢?
  很好的问题。如文中所说,绝对意义的瞬时频率其实是不存在的。单看一个时刻点的一个信号值,当然得不到它的频率。我们只不过是用很短的一段信号的频率作为该时刻的频率,所以我们得到的只是时间分辨率有限的近似分析结果。这一想法在STFT上体现得很明显。小波用衰减的基函数去测定信号的瞬时频率,思想也类似。(不过到了Hilbert变换,思路就不一样了,以后有机会细讲)

4. 关于小波变换的不足
这要看和谁比了。
A.作为图像处理方法,和多尺度几何分析方法(超小波)比:
对于图像这种二维信号的话,二维小波变换只能沿2个方向进行,对图像中点的信息表达还可以,但是对线就比较差。而图像中最重要的信息恰是那些边缘线,这时候ridgelet(脊波), curvelet(曲波)等多尺度几何分析方法就更有优势了。
B. 作为时频分析方法,和希尔伯特-黄变换(HHT)比:
相比于HHT等时频分析方法,小波依然没脱离海森堡测不准原理的束缚,某种尺度下,不能在时间和频率上同时具有很高的精度;以及小波是非适应性的,基函数选定了就不改了。

5. 关于文中表述的严谨性
评论中有不少朋友提到,我的一些表述不够精准。这是肯定的,并且我也是知道的。比如傅里叶变换的理解部分,我所说的那种“乘出一个大的值”的表述肯定是不够严谨的。具体我也在评论的回答中做了解释。我想说的是通俗易懂和精确严谨实在难以兼得,如果要追求严谨,最好的就是教科书上的数学表达,它们无懈可击,但是对于初学者来说,恐怕存在门槛。如果要通俗解释,必然只能侧重一个关键点,而出现漏洞。我想这也是教科书从来不把这些通俗解释写出来的原因吧——作者们不是不懂,而是怕写错。所以想深入理解傅里叶变换和小波变换的朋友还请认真学习教材,如果这篇文章能给一些初学者一点点帮助,我就心满意足了。

形象易懂讲解算法I——小波变换的更多相关文章

  1. 形象的讲解angular中的$q与promise(转)

    以下内容摘自http://www.ngnice.com/posts/126ee9cf6ddb68 promise不是angular首创的,作为一种编程模式,它出现在……1976年,比js还要古老得多. ...

  2. 原创:形象的讲解angular中的$q与promise

    promise不是angular首创的,作为一种编程模式,它出现在……1976年,比js还要古老得多.promise全称是 Futures and promises.具体的可以参见 http://en ...

  3. 通俗易懂--SVM算法讲解(算法+案例)

    1.SVM讲解 新闻分类案例 SVM是一个很复杂的算法,不是一篇博文就能够讲完的,所以此篇的定位是初学者能够接受的程度,并且讲的都是SVM的一种思想,通过此篇能够使读着会使用SVM就行,具体SVM的推 ...

  4. 通俗易懂--岭回归(L2)、lasso回归(L1)、ElasticNet讲解(算法+案例)

    1.L2正则化(岭回归) 1.1问题 想要理解什么是正则化,首先我们先来了解上图的方程式.当训练的特征和数据很少时,往往会造成欠拟合的情况,对应的是左边的坐标:而我们想要达到的目的往往是中间的坐标,适 ...

  5. ROS导航之地图costmap_2d与bresenham算法

    读者可以参读http://wiki.ros.org/costmap_2d   costmap_2d: 无论是激光雷达还是如kinect 或xtion pro深度相机作为传感器跑出的2D或3D SLAM ...

  6. simhash算法:海量千万级的数据去重

    simhash算法:海量千万级的数据去重 simhash算法及原理参考: 简单易懂讲解simhash算法 hash 哈希:https://blog.csdn.net/le_le_name/articl ...

  7. Andrew Ng机器学习算法入门(四):阶梯下降算法

    梯度降级算法简介 之前如果需要求出最佳的线性回归模型,就需要求出代价函数的最小值.在上一篇文章中,求解的问题比较简单,只有一个简单的参数.梯度降级算法就可以用来求出代价函数最小值. 梯度降级算法的在维 ...

  8. LD算法获取字符串相似度

    一个如何识别相似语句的问题,于是上网找了找,一个叫Levenshtein Distance的算法比较简单,就写了段代码实现了一下,效果还不错. 这个算法是一个俄国人Lvenshtein提出的,用于计算 ...

  9. 玩转大数据:深入浅出大数据挖掘技术(Apriori算法、Tanagra工具、决策树)

    一.本课程是怎么样的一门课程(全面介绍) 1.1.课程的背景           “大数据”作为时下最火热的IT行业的词汇,随之而来的数据仓库.数据分析.数据挖掘等等围绕大数据的商业价值的利用逐渐成为 ...

随机推荐

  1. Laya 位图字体制作(失败...)

    参考: 官网教程-位图字体的制作与使用 一.下载字体并安装字体 从站长字体下载了液晶数字字体,将TTF文件拖入C盘windows/Font文件夹,则字体会自动安装 二.下载字体制作工具 Bitmap ...

  2. 【CF700E】Cool Slogans 后缀自动机+线段树合并

    [CF700E]Cool Slogans 题意:给你一个字符串S,求一个最长的字符串序列$s_1,s_2,...,s_k$,满足$\forall s_i$是S的子串,且$s_i$在$s_{i-1}$里 ...

  3. Java虚拟机九 java.lang.String在虚拟机中的实现

    在Java中,Java的设计者对String对象进行了大量的优化,主要有三个特点: 1.不变性: 不变性是指String对象一旦生成,则不能再对它进行改变.String的这个特点可以泛化成不变(imm ...

  4. iOS - ipa安装包大小优化

    在App Store上显示的下载大小和实际下载下来的大小,我们通过下表做一个对比: iPhone型号 系统 AppStore 显示大小 下载到设备大小 iPhone6 10.2.1 91.5MB 88 ...

  5. yii---实现加一或减一

    废话少说,直接看: /** * 添加帖子的浏览数 * @author fyz */ public function addViewNum($threadId){ $list = ForumThread ...

  6. 不同修饰符使用细节(java)

    常用来修饰类.方法.变量的修饰符如下 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权限修饰符,默认访 ...

  7. ELK之在windows安装filebeat收集日志

    登录官方网站下载filebeat的windows客户端 https://www.elastic.co/downloads/beats 下载压缩包,无需解压 修改配置文件filebeat.yml 其余设 ...

  8. Oracle故障排查之oracle解决锁表问题

    --step 1:查看被阻塞会话等待事件 select sid, event, username, lockwait, sql.sql_text  from v$session s, v$sql sq ...

  9. 拓扑_dfs——找最小环

    今天在题库发现了一个wa了很久还没调过的题,这个题呢是2015年noip的day1t2,莫名感觉难度上升(其实水的一匹). 这道题输出是3,其实就是一个图中让你找最小环,尽管我不会找环,但是要是我的话 ...

  10. pandas3

    转自:http://python.jobbole.com/81212/ 介绍 也许大多数人都有在Excel中使用数据透视表的经历,其实Pandas也提供了一个类似的功能,名为 pivot_table. ...