完全搞懂傅里叶变换和小波(1)——总纲<转载>

时间:2023-11-12 10:07:02

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

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

完全搞懂傅里叶变换和小波(1)——总纲<转载>

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

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

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

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

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

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

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

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