作者:咚懂咚懂咚
链接:https://www.zhihu.com/question/22864189/answer/40772083
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

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

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

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

下面我们主要将傅里叶变换的 不足。即我们知道傅里叶变化可以分析信号的频谱,那么为什么还要提出小波变换?答案就是 方沁园所说的,“对 非平稳过程,傅里叶变换有局限性”。看如下一个简单的信号:<img src="https://pic1.zhimg.com/da6c4b8ce1672d4997000eb08444824c_b.jpg" data-rawwidth="597" data-rawheight="284" class="origin_image zh-lightbox-thumb" width="597" data-original="https://pic1.zhimg.com/da6c4b8ce1672d4997000eb08444824c_r.jpg">做完FFT(快速傅里叶变换)后,可以在频谱上看到清晰的四条线,信号包含四个频率成分。 做完FFT(快速傅里叶变换)后,可以在频谱上看到清晰的四条线,信号包含四个频率成分。

一切没有问题。但是,如果是 频率随着时间变化的非平稳信号呢?
<img src="https://pic1.zhimg.com/def600cea95fa10e3872e88dc8059d6c_b.jpg" data-rawwidth="690" data-rawheight="612" class="origin_image zh-lightbox-thumb" width="690" data-original="https://pic1.zhimg.com/def600cea95fa10e3872e88dc8059d6c_r.jpg">
如上图,最上边的是频率始终不变的平稳信号。而下边两个则是频率随着时间改变的非平稳信号,它们同样包含和最上信号相同频率的四个成分。
做FFT后,我们发现这三个时域上有巨大差异的信号,频谱(幅值谱)却非常一致。尤其是下边两个非平稳信号,我们从频谱上无法区分它们,因为它们包含的四个频率的信号的成分确实是一样的,只是出现的先后顺序不同。

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

然而平稳信号大多是人为制造出来的,自然界的大量信号几乎都是非平稳的,所以在比如生物医学信号分析等领域的论文中,基本看不到单纯傅里叶变换这样naive的方法。
<img src="https://pic3.zhimg.com/e71310fc73e7beba589b76264564abee_b.jpg" data-rawwidth="429" data-rawheight="287" class="origin_image zh-lightbox-thumb" width="429" data-original="https://pic3.zhimg.com/e71310fc73e7beba589b76264564abee_r.jpg">上图所示的是一个正常人的事件相关电位。对于这样的非平稳信号,只知道包含哪些频率成分是不够的,我们还想知道 上图所示的是一个正常人的事件相关电位。对于这样的非平稳信号,只知道包含哪些频率成分是不够的,我们还想知道 各个成分出现的时间。知道 信号频率随时间变化的情况,各个时刻的瞬时频率及其幅值——这也就是 时频分析。

二、短时傅里叶变换(Short-time Fourier Transform, STFT)
一个简单可行的方法就是—— 加窗。我又要套用 方沁园同学的描述了,“把整个时域过程分解成无数个等长的小过程,每个小过程近似平稳,再傅里叶变换,就知道在哪个时间点上出现了什么频率了。”这就是短时傅里叶变换。
看图:
<img src="https://pic3.zhimg.com/7f4ac3c30283e657406d6661300478a2_b.jpg" data-rawwidth="844" data-rawheight="449" class="origin_image zh-lightbox-thumb" width="844" data-original="https://pic3.zhimg.com/7f4ac3c30283e657406d6661300478a2_r.jpg">时域上分成一段一段做FFT,不就知道频率成分随着时间的变化情况了吗! 时域上分成一段一段做FFT,不就知道频率成分随着时间的变化情况了吗!
用这样的方法,可以得到一个信号的时频图了:
<img src="https://pic1.zhimg.com/fec492fbcf67ddde4cb6017b62497bf4_b.jpg" data-rawwidth="649" data-rawheight="492" class="origin_image zh-lightbox-thumb" width="649" data-original="https://pic1.zhimg.com/fec492fbcf67ddde4cb6017b62497bf4_r.jpg"> ——此图像来源于“THE WAVELET TUTORIAL” ——此图像来源于“THE WAVELET TUTORIAL”
图上既能看到10Hz, 25 Hz, 50 Hz, 100 Hz四个频域成分,还能看到出现的时间。两排峰是对称的,所以大家只用看一排就行了。

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

使用STFT存在一个问题,我们应该用多宽的窗函数?
窗太宽太窄都有问题:<img src="https://pic4.zhimg.com/479dd3f809656bf154456868b65e73b3_b.jpg" data-rawwidth="627" data-rawheight="312" class="origin_image zh-lightbox-thumb" width="627" data-original="https://pic4.zhimg.com/479dd3f809656bf154456868b65e73b3_r.jpg">
<img src="https://pic3.zhimg.com/9da6c3e9704c32bfb7b53b995532878e_b.jpg" data-rawwidth="609" data-rawheight="350" class="origin_image zh-lightbox-thumb" width="609" data-original="https://pic3.zhimg.com/9da6c3e9704c32bfb7b53b995532878e_r.jpg">窗太窄,窗内的信号太短,会导致频率分析不够精准,频率分辨率差。窗太宽,时域上又不够精细,时间分辨率低。 窗太窄,窗内的信号太短,会导致频率分析不够精准,频率分辨率差。窗太宽,时域上又不够精细,时间分辨率低。
(这里插一句,这个道理可以用海森堡不确定性原理来解释。类似于我们不能同时获取一个粒子的动量和位置,我们也不能同时获取信号绝对精准的时刻和频率。这也是一对不可兼得的矛盾体。我们不知道在某个瞬间哪个频率分量存在,我们知道的只能是在一个时间段内某个频带的分量存在。 所以绝对意义的瞬时频率是不存在的。)

看看实例效果吧:<img src="https://pic1.zhimg.com/565a3c57d43c8f2f78a5b1dc0de66e34_b.jpg" data-rawwidth="608" data-rawheight="292" class="origin_image zh-lightbox-thumb" width="608" data-original="https://pic1.zhimg.com/565a3c57d43c8f2f78a5b1dc0de66e34_r.jpg">
<img src="https://pic3.zhimg.com/c7d2d230a8c4766569c5a77fac901eea_b.jpg" data-rawwidth="604" data-rawheight="295" class="origin_image zh-lightbox-thumb" width="604" data-original="https://pic3.zhimg.com/c7d2d230a8c4766569c5a77fac901eea_r.jpg"> <img src="https://pic2.zhimg.com/39822d6589c4486a0a91a148e0a3e571_b.jpg" data-rawwidth="614" data-rawheight="281" class="origin_image zh-lightbox-thumb" width="614" data-original="https://pic2.zhimg.com/39822d6589c4486a0a91a148e0a3e571_r.jpg"> ——此图像来源于“THE WAVELET TUTORIAL” ——此图像来源于“THE WAVELET TUTORIAL”
上图对同一个信号(4个频率成分)采用不同宽度的窗做STFT,结果如右图。用窄窗,时频图在时间轴上分辨率很高,几个峰基本成矩形,而用宽窗则变成了绵延的矮山。但是频率轴上,窄窗明显不如下边两个宽窗精确。

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

三、小波变换

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

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

【解释】
来我们再回顾一下傅里叶变换吧,没弄清傅里叶变换为什么能得到信号各个频率成分的同学也可以再借我的图理解一下。
傅里叶变换把无限长的三角函数作为基函数:
<img src="https://pic4.zhimg.com/be914c25f4886601caf2324b855b2b9f_b.jpg" data-rawwidth="732" data-rawheight="504" class="origin_image zh-lightbox-thumb" width="732" data-original="https://pic4.zhimg.com/be914c25f4886601caf2324b855b2b9f_r.jpg">
这个基函数会 伸缩、会平移(其实本质并非平移,而是两个正交基的分解)。缩得窄,对应高频;伸得宽,对应低频。然后这个基函数不断和信号做相乘。某一个尺度(宽窄)下乘出来的结果,就可以理解成信号所包含的当前尺度对应频率成分有多少。于是,基函数会在某些尺度下,与信号相乘得到一个很大的值,因为此时二者有一种 重合关系。那么我们就知道信号包含该频率的成分的多少。

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

<img src="https://pic2.zhimg.com/8fbc3a5f07a5ab0f0a90b65bc621ae21_b.jpg" data-rawwidth="452" data-rawheight="311" class="origin_image zh-lightbox-thumb" width="452" data-original="https://pic2.zhimg.com/8fbc3a5f07a5ab0f0a90b65bc621ae21_r.jpg"> <img src="https://pic3.zhimg.com/95cfa4aa2b2ea493cf07dbd4384d2526_b.jpg" data-rawwidth="509" data-rawheight="297" class="origin_image zh-lightbox-thumb" width="509" data-original="https://pic3.zhimg.com/95cfa4aa2b2ea493cf07dbd4384d2526_r.jpg">看,这两种尺度能乘出一个大的值(相关度高),所以信号包含较多的这两个频率成分,在频谱上这两个频率会出现两个峰。 看,这两种尺度能乘出一个大的值(相关度高),所以信号包含较多的这两个频率成分,在频谱上这两个频率会出现两个峰。

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

如前边所说,小波做的改变就在于,将无限长的三角函数基换成了有限长的会衰减的小波基。
<img src="https://pic3.zhimg.com/94b5f53d29d655e0a4d90fa867027eda_b.jpg" data-rawwidth="675" data-rawheight="477" class="origin_image zh-lightbox-thumb" width="675" data-original="https://pic3.zhimg.com/94b5f53d29d655e0a4d90fa867027eda_r.jpg">这就是为什么它叫“小波”,因为是很小的一个波嘛~ 这就是为什么它叫“小波”,因为是很小的一个波嘛~

<img src="https://pic1.zhimg.com/f3342ad8f9f814beecf82b29b0576ef0_b.jpg" data-rawwidth="389" data-rawheight="71" class="content_image" width="389">
从公式可以看出,不同于傅里叶变换,变量只有频率ω,小波变换有两个变量:尺度a(scale)和平移量 τ(translation)。 尺度a控制小波函数的 伸缩平移量 τ控制小波函数的 平移尺度就对应于 频率(反比), 平移量 τ就对应于 时间

<img src="https://pic2.zhimg.com/c4aa4c1cc6fdc1feb47be1001fa67301_b.jpg" data-rawwidth="592" data-rawheight="341" class="origin_image zh-lightbox-thumb" width="592" data-original="https://pic2.zhimg.com/c4aa4c1cc6fdc1feb47be1001fa67301_r.jpg">
当伸缩、平移到这么一种重合情况时,也会相乘得到一个大的值。这时候和傅里叶变换不同的是,这 不仅可以知道信号有这样频率的成分,而且知道它在时域上存在的具体位置。

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

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

做傅里叶变换只能得到一个 频谱,做小波变换却可以得到一个 时频谱
<img src="https://pic2.zhimg.com/27adabe9c43e9716543ac6e08a983505_b.jpg" data-rawwidth="277" data-rawheight="208" class="content_image" width="277"> ↑:时域信号 ↑:时域信号
<img src="https://pic1.zhimg.com/f0511af35a25dcbfc760959bec38b6cc_b.jpg" data-rawwidth="404" data-rawheight="302" class="content_image" width="404">↑:傅里叶变换结果 ↑:傅里叶变换结果

<img src="https://pic1.zhimg.com/cfae89c24cc167c028f02368ee509a68_b.jpg" data-rawwidth="524" data-rawheight="403" class="origin_image zh-lightbox-thumb" width="524" data-original="https://pic1.zhimg.com/cfae89c24cc167c028f02368ee509a68_r.jpg"> ——此图像来源于“THE WAVELET TUTORIAL” ——此图像来源于“THE WAVELET TUTORIAL”
↑:小波变换结果

小波还有一些好处,比如,我们知道对于突变信号,傅里叶变换存在 吉布斯效应,我们用无限长的三角函数怎么也拟合不好突变信号:
<img src="https://pic3.zhimg.com/c6041e8710f31ab327e215467d2c58d2_b.jpg" data-rawwidth="691" data-rawheight="474" class="origin_image zh-lightbox-thumb" width="691" data-original="https://pic3.zhimg.com/c6041e8710f31ab327e215467d2c58d2_r.jpg">然而衰减的小波就不一样了: 然而衰减的小波就不一样了:
<img src="https://pic3.zhimg.com/d03e5344001f6fb2dc10be4a7bd2af92_b.jpg" data-rawwidth="677" data-rawheight="522" class="origin_image zh-lightbox-thumb" width="677" data-original="https://pic3.zhimg.com/d03e5344001f6fb2dc10be4a7bd2af92_r.jpg">

以上,就是小波的意义。

傅里叶变化,短时傅里叶分析,小波变换相关推荐

  1. 傅里叶变换短时傅里叶变换小波变换

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

  2. 语音信号的短时傅里叶分析

    语音信号的短时傅里叶分析 文章目录 语音信号的短时傅里叶分析 概述 短时傅里叶变换 短时傅里叶的取样率 时域取样率 频域取样率 总取样率 语音信号的短时综合 滤波器组求和法 快速傅里叶变换求和法 语谱 ...

  3. 浅谈傅里叶——5. 短时傅里叶的缺点与卷积的基本概念

    在<浅谈傅里叶 4>里,我引入了卷积的概念来简要的解释了傅里叶的改进方法--短时傅里叶.它类似一种滑动的滤波器,只不过与我们熟知的与对空间滤波.频域滤波不同,这是一个类似时域滤波的滤波器, ...

  4. 傅里叶变化(一)—— 复数

    [参考资料] 1.万门大学:傅立叶变换.拉普拉斯变换与小波变换 [傅里叶变换系列博客] 1.傅里叶变化(一)-- 复数 2.傅里叶变换(二)-- 卷积 复数的定义: z=a+ib(a,b∈R)z=a+ ...

  5. 图像处理:二维傅里叶变化的平移性_matlab实现

    傅里叶变化的平移性: matlab代码验证过程实现: %% 研究傅里叶变化 的 平移特性 %空间域 乘以exp ,频率域移动clc;clear I = imread('rice.jpg'); I = ...

  6. 傅里叶变化的本质:复数的实部和虚部的对应关系

    之前做计算光学成像,需要用到图像的相位信息.但是设计到傅里叶变化的实部和虚部的问题的时候,发现教科书上一般来讲,只会介绍一句: 如果f(x,y)是实函数,则它的傅里叶变化就是关于原点共轭对称的: F( ...

  7. matlab 傅里叶平移,图像处理:二维傅里叶变化的平移性_matlab实现

    傅里叶变化的平移性: matlab代码验证过程实现: %% 研究傅里叶变化 的 平移特性 %空间域 乘以exp ,频率域移动 clc;clear I = imread('rice.jpg'); I = ...

  8. 049万能图像处理小助手1.1_傅里叶变化_椒盐噪声_直方图均衡等图片批量处理

    视频演示和demo仓库找049期 银色子弹zg的个人空间-银色子弹zg个人主页-哔哩哔哩视频 直接上效果图 049万能图像处理小助手1.1_傅里叶变化_椒盐噪声_直方图均衡等图片批量处理 代码界面 一 ...

  9. 傅里叶变化与卷积和互相关操作的转换

    已知有二维信号f(x,y),g(x,y),其对应的傅里叶变化结果为F(x,y),G(x,y). 本篇文章不对公式进行推导,只是运用.有兴趣的话可以自行百度. 1.卷积与傅里叶的转换 FT{f(x,y) ...

最新文章

  1. 已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问。...
  2. 【C++ 语言】面向对象 ( 函数重载 | 运算符重载 | 运算符重载两种定义方式 | 拷贝构造方法 | RVO 优化 | NRVO 优化 )
  3. Linux性能相关工具
  4. P2 Matlab计算基础-《Matlab/Simulink与控制系统仿真》程序指令总结
  5. python编写剪刀石头布游戏_闲着也是闲着:PYTHON 编写剪刀石头布游戏
  6. 力士乐伺服电机编码器调零_力士乐伺服电机故障与维修排除备份构成
  7. 使用ThreadPoolExecutor并行化独立的单线程任务
  8. Android之Bundle类
  9. 那些年我们踩过的一些坑之 ClickHouse
  10. Python基础语法和数据类型最全总结
  11. vue = 什么意思_Vue导入模块import xxx from '@/xxx'中的@是什么含义?
  12. 抖音店播 就是我们说的商家自播品牌自播
  13. 使用/调用 函数的时候, 前面加不加 对象或 this?
  14. 【动态规划区间dp】蓝桥2019:最优包含
  15. 人情味,让你的内容脱颖而出
  16. 【人脸识别】基于matlab GUI Gabor+SVM比较PCA+SVM人脸识别【含Matlab源码 685期】
  17. 输入一段字符串,记录当中有多少数字,大写字母,小写字母
  18. VBA变量和函数名中文拼音输入提示
  19. sphinxPHP api全文检索的例子
  20. 台式计算机读不到u盘怎么回事,电脑读不出u盘怎么办

热门文章

  1. AHB总线介绍及其时序图
  2. ORA-01918: user hr does not exist 解决办法
  3. android是硬件还是软件,浅谈Android软硬件巧妙整合的开发技巧
  4. Xilinx 的FFT IP核使用方法(配置为FFT 、IFFT两种模式)
  5. 4.2 CUDA Reduction 一步一步优化
  6. python 里面的 整除(// )、除(/)和取余%
  7. 小程序定位,接入腾讯位置服务
  8. 什么是Hbuilder?
  9. XML(3)XDocument与XmlDocument递归读取xml文件
  10. 【太虚AR_v0.1】使用教程 | 视频播放