无论是学习信号处理,还是做图像、音视频处理方面的研究,你永远避不开的一个内容,就是傅里叶变换和小波。但是这两个东西其实并不容易弄懂,或者说其实是非常抽象和晦涩的!

完全搞懂傅里叶变换和小波,你至少需要知道哪些预备知识?主页君从今天开始就将通过一些列文章告诉你他们之间的来龙去脉!本节是全部系列文章的第一节——总纲,日后我们也将按照这个思路一点一点讲述所有的知识。需要说明的是,本文主要面向计算机专业或者电子信息专业的读者,为此我们将尽量采取一些非常非常基础的知识来帮助你理解。所以,题目里面讲的“完全搞懂”并非是从物理学或者纯数学的角度去讲的,因为傅里叶变换最初是法国科学家傅里叶在研究物理学(主要是热力学)时创造出来的一套理论,如果要从这个角度去说“彻底搞懂”,肯定得需要很多物理知识、复变实变分析,之类的像天书一样的东西。这样牵扯下去,其实很多对于学计算机或者学电子信息的人来说,其实完全没有必要。我们要做的,就是利用你已经掌握的知识来构建整个体系!

金庸在他的武侠小说《天龙八部》里塑造了一个吐蕃国师的人物形象——“鸠摩智”。鸠摩智练武急功近利,为了在短期内多炼成几门功夫,往往基础不打牢,就强行修炼上乘武学。用道家的小无相功催动少林的七十二绝技,看似威力无比,其实后患无穷。其实日常学习也是这样,如果上来就记住几个公式,然后单刀直入地去啃傅里叶变换或者小波,其实也能做出点东西来,但是由于基础都是空的,所以内化的过程几乎是断裂的,缺损的。无论是傅里叶变换还是小波,它们的最基本理论全部都是数学。只是大部分学生很难建立起它们之间的联系。我们今天就从数学开始说起。

图中虚线框里的内容,都应该是在高等数学里必学的内容,这部分有啥不懂的,去问童校长应该最合适不过了。首先,你应该知道费马定理(这个很简单,说白了其实就是函数有极值的条件),通过费马定理,你可以证明罗尔定理,然后通过罗尔定理,你又可以证明拉格朗日中值定理,通过拉格朗日中值定理,你又可以继而证明柯西中值定理。证明柯西中值定理的意义在于,它可以被用来证明泰勒公式。泰勒公式当然是一个叫做泰勒的人提出来的,但是真正证明泰勒公式的人是柯西,因为柯西知道柯西中值定理,而要证明泰勒公式就需要用到柯西中值定理。泰勒公式在我们这里有两个用途,首先它可以用来证明欧拉公式,欧拉公式在傅里叶变换里面也是必须要用到的。其次,通过泰勒公式可以得到幂级数的展开。这是一个先导,因为无论是小波展开,还是傅里叶展开,如果你理解泰勒展式或者幂级数展开式,那么对应的就很容易解释,人们设计傅里叶展式和小波展式的初衷和用意了。高数里的级数主要学两种,除了幂级数以外,另外一个就是傅里叶级数。到这里你所需要的高数知识就已经足够了。

图中黄色框图里的内容都是你在数字信号处理课程里应该学的。我们在学傅里叶变换之前,肯定要在高数里先学一个傅里叶级数,但是傅里叶级数和傅里叶变换有啥关系呢?说白了,他们的本质是一样一样的,尽管它们各自公式的表达式好像差别还很大。通过傅里叶级数公式,其实你做一些化简和变量替换(关于这部分内容,如果读者有兴趣,主页君后续可以给出详细证明过程),傅里叶级数就变成傅里叶变换了,当然是连续的。然后你根据数字信号处理里面学的采样定理,就能到处傅里叶变换了,这就是DFT!但是DFT有个问题,如果按公式计算,效率太低,实用价值不高,后来人们就发明了一个快速算法,FFT!这一路下来,如果每一步,你都非常清楚,那你就已经算是对傅里叶变换理解的很到位了。

然后说说小波,小波完全可以跟傅里叶变换对比着来理解,而且事实上,在小波出现之前,人们先创造出了一种叫短时傅里叶变换的东西,这可以被认为是二者之间的桥梁。当然,这部分内容,你不知道也没关系,你甚至可以以泰勒公式和幂级数为起点来理解小波。小波级数展开对应的是傅里叶展开,连续小波对应连续傅里叶变换,DWT对应DFT。这些都非常容易理解。同样,人们(其实主要是Mallat)也开发了一种小波的快速算法,FWT。FWT就像FFT在傅里叶变换中的地位。要理解FWT,你需要知道两个基础知识,一个叫做MRA,即多分辨率分析,学习MRA对于理解小波也非常有意义。因为MRA是构建小波的一种方法。另外一个你必须要知道的东西叫做“子带编码”或者子带分解。

要想理解子带分解,你就必须知道QMF,即正交镜像滤波器,而QMF是多采样率信号处理里面的重要内容。所以你必须有多采样率信号处理知识的基础,而多采样率信号处理的基础又是数字信号处理!另外,子带编码还有一个理论基础,或者说,子带编码为啥被证明有效,这就必须要知道率失真理论的有关结论。率失真理论又是信息论的重要组成部分。所以,最后这条线路上,你的学习脉络应该是从信息论出发的(其实主要是互信息和率失真方面的内容),然后才是信号处理,然后是多抽样率处理,然后是子带编码和QMF,这些你都懂了之后,FWT就太Easy了!当然,你直接就学FWT的算法,而不去管它到底是怎么来的,也是可以的,只是就像我之前说的,你的基础基本上都是空的,你学了也只是学个招式,内功心法几乎不会,所以再往上走可能会遇到很多困难。

任何一门学科或者知识发展到现在少说都是几十年了,让我们在短短个把月之内就学完,其实很不容易。所以看起来自己要知道的东西实在太多了,而学习的时间又是这样的有限。但是也没办法,楼宇要盖的越高,地基就势必要打得越深。

另外:补充一点,后续在具体代码实现时,我们采用的语言C++,在Visual C++下完成。

未完,待续... ....

完全搞懂傅里叶变换和小波(1)——总纲<转载>的更多相关文章

  1. 完全搞懂傅里叶变换和小波(2)——三个中值定理<转载>

    书接上文,本文章是该系列的第二篇,按照总纲中给出的框架,本节介绍三个中值定理,包括它们的证明及几何意义.这三个中值定理是高等数学中非常基础的部分,如果读者对于高数的内容已经非常了解,大可跳过此部分.当 ...

  2. 一文搞懂EMAS Serverless小程序开发|电子书免费下载

    >> 快来免费下载|电子书<五天玩转 EMAS Serverless> << 点击免费下载 <五天玩转 EMAS Serverless> EMAS Se ...

  3. MATLAB(2)——小波工具箱使用简介

    作者:桂. 时间:2017-02-19  21:47:27 链接:http://www.cnblogs.com/xingshansi/articles/6417638.html 前言 本文主要介绍MA ...

  4. java线程间通信:一个小Demo完全搞懂

    版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.从一个小Demo说起 上篇我们聊到了Java多线程的同步 ...

  5. dennis gabor 从傅里叶(Fourier)变换到伽柏(Gabor)变换再到小波(Wavelet)变换(转载)

    dennis gabor 题目:从傅里叶(Fourier)变换到伽柏(Gabor)变换再到小波(Wavelet)变换 本文是边学习边总结和摘抄各参考文献内容而成的,是一篇综述性入门文档,重点在于梳理傅 ...

  6. 链表算法题二,还原题目,用debug调试搞懂每一道题

    文章简述 大家好,本篇是个人的第4篇文章. 承接第3篇文章<开启算法之路,还原题目,用debug调试搞懂每一道题>,本篇文章继续分享关于链表的算法题目. 本篇文章共有5道题目 一,反转链表 ...

  7. 一天搞懂深度学习-训练深度神经网络(DNN)的要点

    前言 这是<一天搞懂深度学习>的第二部分 一.选择合适的损失函数 典型的损失函数有平方误差损失函数和交叉熵损失函数. 交叉熵损失函数: 选择不同的损失函数会有不同的训练效果 二.mini- ...

  8. 一文搞懂RAM、ROM、SDRAM、DRAM、DDR、flash等存储介质

    一文搞懂RAM.ROM.SDRAM.DRAM.DDR.flash等存储介质 存储介质基本分类:ROM和RAM RAM:随机访问存储器(Random Access Memory),易失性.是与CPU直接 ...

  9. 真正“搞”懂http协议01—背景故事

    去年读了<图解HTTP>.<图解TCP/IP>以及<图解网络硬件>但是读了之后并没有什么深刻的印象,只是有了一层模糊的脉络,刚好最近又接触了一些有关http的相关内 ...

随机推荐

  1. 检索 COM 类工厂中 CLSID 为 {10020200-E260-11CF-AE68-00AA004A34D5} 的组件时失败,解决方法如下:

    检索 COM 类工厂中 CLSID 为 {10020200-E260-11CF-AE68-00AA004A34D5} 的组件时失败,解决方法如下: 第 一步:首先将msvcr71.dll,  SQLD ...

  2. ionicModal中的监听事件

    //添加监听事件angular.module('MyApp').directive('gotTapped', ['$ionicGesture', function($ionicGesture) { r ...

  3. IOC(控制反转和依赖注入)之Autofac

    Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上也是很高的.于是,今天抽空研究了下它.下载地址:http://co ...

  4. K2任命新的亚太区高级副总裁

    K2, 一个屡获殊荣的企业应用软件公司宣布,任命陈光明(Tan Kwang Meng, KM)为亚太区高级副总裁.这次任命是对公司持续发展的肯定,同时也是对将亚太区作为全球扩张战略的关键市场的承诺. ...

  5. jquery animate()方法使用的注意事项

    当使用 animate() 时,必须使用 Camel 标记法书写所有的属性名,比如,必须使用 paddingLeft 而不是 padding-left,使用 marginRight 而不是 margi ...

  6. Spring学习笔记之BeanFactory

    Spring bean container 的根接口,也是一个bean容器的基本功能,更深一步的接口像ListableBeanFactory 和 ConfigurableBeanFactory 都是 ...

  7. 多线程同步内功心法——PV操作上(未完待续。。。)

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...

  8. MyEclipse取消验证Js的两种方法

    MyEclipse取消验证Js的两种方法 作者: 字体:[增加 减小] 类型:转载 通过js写一个web工程的相关页面时感觉很卡,修改内存也不行下面有两种解决方法,大家可以尝试下 前言:有时我们通过j ...

  9. mysql 导入数据库文件到指定数据库

    i:\mysql\bin>mysql  -u  用户名 -p  数据库名  <   i:/test.sql // (source "c:\adsense.sql" ) ...

  10. iOS多线程之NSThread使用

    iOS中的多线程技术 我们在iOS开发项目过程中,为了解决UI界面操作不被耗时操作阻塞,我们会使用到多线程技术.在iOS开发中,我们主要会用到三种多线程操作技术:NSThread,NSOperatio ...