写给小白的小波变换原理分析

  • 1、前言
  • 2、傅里叶变换扫盲
  • 3、一个傅里叶变换所不能解决的问题
    • 3.1 问题介绍
    • 3.2 短时傅里叶变换STFT
  • 4、小波变换
    • 4.1 小波变换的原理
    • 4.2 小波变换工作流程
    • 4.3 小波变换的时间与频率分辨率

1、前言

如果你想搞懂小波,你可以不用看前言介绍。

我目前是一个学生,并不是一个数学家,我觉得啊,人对技术是需要主观上的理解,如果有一天我去问一个数学家,小波变换balabala…,他一定会用小波变换的公式来指导我学习的(太可怕了,我觉得这就是一场折磨),然而并不是所有人都需要这种学习方式。

所以我觉得,我当然需要公式,只不过我想让这些公式恰如其分的来帮助我理解小波变换,但凡不能帮助我理解的努力,我都会视它为无用功,这些无用功可能是老师的讲解、无聊的数学公式、流程化的变换步骤,直到有一天,我看到了适合我理解它的资料,然后我鼓起勇气,打算写下自己的理解。

2、傅里叶变换扫盲

傅里叶变换目的:测量信号的频率成分

工作原理:把无限长的三角函数作为基函数,在每个不同尺度下进行伸缩和拉伸,分别不断与信号相乘,计算信号与三角函数的相关性。

傅里叶变换的特质
(1)从频域角度出发,傅里叶变换提供了信号的频率信息,意味着它告诉我们信号中每个频率存在多少,但是并没有告诉这些频率分量何时存在,当信号为平稳信号(信号频率变化不随着时间发生变化,及固定信号)时,因此无需知道这些信息;

(2)从时域角度出发,当信号是固定的时,所有频域成分始终存在,所以我们也无需知道频域成分何时存在

缺点:对时域信息无保留,无法得知它在时域上存在的位置

举一个例子说明:有一个平稳信号,存在信号的4种叠加,10HZ 25HZ 50HZ 100HZ的频率,信号绘制如下

通过四种信号的叠加最终产生的信号,出现了这样一个问题“如果在某一个时间对最终产生的信号进行检测,那么得到的最终结果到底是多少Hz?”

回答是这四种Hz都存在与每一个任意时刻。

接下来我们经过傅里叶变换

可以看到,上面的图横轴代表频率,纵轴代表存在的时间。

接下来还有另外一组实验:这时候有另一信号,调制信号,非平稳信号,0至300 ms的间隔为100 Hz正弦波,300至600 ms的间隔为50 Hz正弦波,600至800 ms的间隔为25 Hz正弦波,最后800至1000 ms的间隔为10 Hz正弦波。

经过傅里叶变换之后再得到下图

我们可以看到,实验1中的平稳信号通过傅里叶变换之后得到的结果,与实验2非平稳信号得到的结果十分类似。为什么会这样呢?两束完全不同的信号,即平稳的叠加信号与非平稳的调制信号通过傅里叶变换之后,得到的东西竟然这么相似,这该怎么解释得清楚呢?

通过观察我们知道
实验一:10HZ、25HZ 50HZ 100HZ这四种频域在时域的每一个瞬间都存在;
实验二:10HZ、25HZ 50HZ 100HZ这四种频域只在特定的时间段出现,而且每一段时间只对应着一种频率

而最终的结论是:傅里叶变化只负责统计,它说不清楚某个频域存在对时应的时间!!!

现在,我们来看傅里叶变换的公式:
X(f)=∫−∞∞x(t)⋅e−2jπftdtX(f) = \int_{-\infty}^{\infty} x(t) \cdot e^{-2 j \pi f t} dtX(f)=∫−∞∞​x(t)⋅e−2jπftdt
解释一下:x(t)x(t)x(t)是信号的时域表示,后面是一个指数项,也可以被理解为一个放大器(这个放大器能让相乘后大的值更大,小的值更小),这个放大器也叫基函数,傅里叶变换把无限长的三角函数作为基函数,它长这样:

放大器里有一个fff(频率),这个指数项(放大器)也可以被写为:
cos(2πft)⋅sin(2πft)cos(2 \pi f t) \cdot sin(2 \pi f t)cos(2πft)⋅sin(2πft)

虽然fff是会变的,但也不妨碍把这个指数项(放大器)理解为一个常数项,程序在时域信号x里,遍历不同频率fff,得到的结果在乘以指数项(它是什么并不重要),最后,可以看到时域信号与放大器相乘,对这个信号存在的所有时间积分,最终完成了傅里叶变换。

做一个总结:
(1)傅里叶变换的指数项,能让得到的大结果更大,微小的结果更小,这样就很容易在频谱图里区分出来,到底哪些频率出现的多一些。
(2)如果这个信号的频率分量中没有包含f,那么结果就是最后的乘积为0。

你看,我反复强调这个放大器不重要,是因为我不懂它,而且,我也没必要懂它。

3、一个傅里叶变换所不能解决的问题

3.1 问题介绍

就是上面这个问题,我想再强调一下这个问题“为什么一个调制信号(非平稳信号),和一个确定信号(平稳信号)”经过同样的傅里叶变换之后,得到的结果惊人相似?

一般来说,傅里叶变换处理的信号是平稳信号(也就是周期信号),前面提到了,如果个信号被我们发现是一个平稳信号:

(1)从时域的角度出发,我们干嘛还要知道哪一个瞬间出现了多少Hz的信号呢?没有必要,这些对于平稳信号来说,什么瞬间出现什么信号已经是确定的了;

(2)从频域的角度出发,虽然傅里叶变换会告诉我们不同信号出现的对应频域,但是并没有告诉我们出现这些信号时所对应的时间,但是重要的是,它也无需告诉,因为这是一个平稳的信号,意味着特定频率只出现在特定时间。

3.2 短时傅里叶变换STFT

那么如果是一个非平稳信号呢?那不完蛋了吗?

如何把频域信息和时域信息相关联呢?

有人出了一招来解决这个问题,对一般的傅里叶变换加上时间窗口,在每个不同的窗口内计算出傅里叶变换的值,这不就大致是这样的:


这样做可以,但是也有好多的缺陷,框如果太窄,时间是可以分得清楚,但是分辨不出频率,框如果太宽,频域可是分的清楚,但是分不清时间,这样做可太难了。

之后,小波才出来了。

4、小波变换

之前就有人想到了,不是嫌时间窗口傻傻分不清时域和频域吗?那么让这个时间窗口的大小动起来,多做几次,不断积分,不就OK了么?这种想法的思路和小波如出一辙,但是小波可不是这么实现的。

4.1 小波变换的原理

想要解决的问题:如何把时域信息与频域信息组合到一起先看看STFT是怎么做的?
STFT公式:
STFTX(ω)(t,f)=∫t[x(t)⋅ω∗(t−t′)]⋅e−j2πftdtSTFT_X^{(\omega)}(t,f) = \int_t \left[ x(t) \cdot \omega^*(t - t') \right] \cdot e^{-j 2 \pi f t} dtSTFTX(ω)​(t,f)=∫t​[x(t)⋅ω∗(t−t′)]⋅e−j2πftdt
其中,x(t)x(t)x(t)是时域信号,后面相乘的那一项是一个窗口,后面还是我们的老朋友放大器,对信号存在的所有时间进行积分。
小波公式:
CWTxψ(τ,s)=Ψxψ(τ,s)=1∣s∣∫x(t)ψ∗(t−τs)dtCWT_x^\psi(\tau,s) = \Psi_x^\psi(\tau,s) = \frac{1}{\sqrt{|s|}} \int x(t) \psi^* \left( \frac{t - \tau}{s} \right) dtCWTxψ​(τ,s)=Ψxψ​(τ,s)=∣s∣​1​∫x(t)ψ∗(st−τ​)dt
小波公式里改变的东西有两个,尺度aaa平移量τ\tauτ,尺度决定着这个小波的宽度,平移量决定时间,最前面的那个常量表示将得到的每一个结果都归一化。

4.2 小波变换工作流程

(1)首先需要一个母小波(就像傅里叶变换里确定的基函数,但是这个基函数并不像傅里叶变换一样在时域无穷延申),确定初始的母小波比例尺,小波从高频开始分析,朝低频进行,S的第一个值对应压缩程度最高的小波,随着比例尺扩大,小波也将扩大;

(2)每一个确定比例的母小波,都要依照公式,在所有时间进行积分,也就是说,在时间上移动小波,将积分结果乘以常数(1s\frac{1}{\sqrt{s}}s​1​)归一化;

(3)每个刻度和每个时间间隔,将计算平面内的一个点;

(4)重复步骤2-3,直到遍历完成S的区域(1-0.05),最终生成小波的三维图像;

4.3 小波变换的时间与频率分辨率


用不同的比例+不同的时间,对母小波进行改造,改造的结果分别对信号积分。

参考资料:
https://www.zhihu.com/question/22864189/answer/40772083
http://users.rowan.edu/~polikar/WTtutorial.html

写给小白的小波变换原理分析相关推荐

  1. 手写简易版链表及原理分析

    好多人都觉得为什么要自己写这样的数据结构,变成里面不是有吗?为什么要去写,有这个疑问,其实这个疑问这我的脑海中也存在了很长一段时间,本人是学习java编程的,直接看java的集合框架不行吗?这个时候如 ...

  2. select epoll原理分析

    select原理分析 1.   从用户空间拷贝fd_set到内核空间: 2.   注册回调函数__pollwait: 3.   遍历所有fd,对全部指定设备做一次poll(这里的poll是一个文件操作 ...

  3. NOR Flash擦写和原理分析

    http://www.cnblogs.com/jason-lu/archive/2013/03/13/2957399.html NOR Flash擦写和原理分析 NOR Flash擦写和原理分析 一. ...

  4. C语言C++编程学习:排序原理分析

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  5. 人工智能小白日记 语音情感分析探索之2 CNN相关及实验

    人工智能小白日记 语音情感分析探索之2 CNN相关及实验 前言 正文内容 1 关于CNN 2 在tensorflow上搭建CNN 2-1 CNN MNIST分类器 2-1-1 输入层 2-1-2 卷积 ...

  6. 阻容降压原理分析及实际用法

    将交流市电转换为低压直流的常规方法是采用变压器降压后再整流滤波,当受体积和成本等因素的限制时,最简单实用的方法就是采用电容降压式电源. 阻容降压原理分析及实际用法 1.阻容降压简介 1.1什么是阻容降 ...

  7. java signature 性能_Java常见bean mapper的性能及原理分析

    背景 在分层的代码架构中,层与层之间的对象避免不了要做很多转换.赋值等操作,这些操作重复且繁琐,于是乎催生出很多工具来优雅,高效地完成这个操作,有BeanUtils.BeanCopier.Dozer. ...

  8. Select函数实现原理分析

    转载自 http://blog.chinaunix.net/uid-20643761-id-1594860.html select需要驱动程序的支持,驱动程序实现fops内的poll函数.select ...

  9. spring ioc原理分析

    spring ioc原理分析 spring ioc 的概念 简单工厂方法 spirng ioc实现原理 spring ioc的概念 ioc: 控制反转 将对象的创建由spring管理.比如,我们以前用 ...

最新文章

  1. 新兴AI解决方案将越来越依赖于嵌入式视觉技术
  2. 使用Nautilus脚本增加新功能
  3. JAVA socket编程实例 转载
  4. 电气论文:基于遗传算法加非线性规划的水火电力系统经济调度(有程序和数据)
  5. AIX系统卸载oracle
  6. java调用 火眼臻睛,连接创新,发现未来,臻识科技受邀CCF-GAIR,论道浪潮之巅...
  7. 【bfs】重力球(luogu 7473/NOI Online 2021 普及组 T3)
  8. linux获取ip地址的接口,获取Linux上接口的IP地址
  9. python调用菜单响应事件_Python处理菜单消息操作示例【基于win32ui模块】
  10. TensorFlow HOWTO 1.1 线性回归
  11. 路由器与交换机的区别【知识普及】
  12. 简单理解JavaScript中的闭包
  13. 计算机图形学_GAMES101-现代计算机图形学课程 全笔记
  14. 【Microsoft Azure 的1024种玩法】六十三.通过全局 VNet 对等互连实现同一区域不同网段的虚拟网络实时打通
  15. 关于OPCUA的配套规范
  16. Centos8 磁力链BT地址
  17. OPPO 12系统 无TalkBack设置 功能锁定 手撕
  18. 2022留学生落户上海怎么办理社区公共户?
  19. NC | 西湖大学鞠峰组在聚氯乙烯塑料微生物降解方向取得新突破
  20. Windows-驱动-解决Thinkpad e470c在Win8.1下WiFi无法连接的问题

热门文章

  1. 中医内科主治医师要考英语计算机,中医内科主治医师考试人机对话是怎么操作的?图解来了!...
  2. 如何修改kali Linux的默认系统语言
  3. 当传统IT架构力不从心 太古可口可乐决定上云
  4. 消息中的wParam和lParam
  5. 清奈市Zoho研发总部工作回忆
  6. 微信小程序实现与后台PHP交互
  7. 数字机顶盒的结构和技术发展趋势
  8. 海南岛1/7陆域面积开展热带雨林国家公园体制试点
  9. [docker] 启动docker的container(或者说image的实例)
  10. matlab精细模型的特点,认知模板说、模型说、特征说的优缺点