吐槽
最近为了搞毕业设计,学习了一些《信号与系统》的知识,看的我好痛苦:证明的过程绕来绕去,然后就把结论给证明出来了。其中隐含了一些高等数学、线性代数、复变函数、数学分析的知识,隐含的知识有一点多。我感觉我是在学习魔法。所以,想着把学有所得的东西写下来吧。
我感觉把信号从时域转到频域以后,我来到了一个光怪陆离的世界。我只是在总结这一个光怪陆离世界的一些规律,把它写出来方便后来人理解。
序
之前以为傅里叶变换就是一个连续函数,可以拆分为多个、函数的叠加.后来才发现不是这样子的,我理解的是只是傅里叶级数。傅里叶变换,《信号与系统》一共介绍了四种,分别是:
- 傅里叶级数:从连续到离散的变换
- 傅里叶变换:从连续到连续的变换
- 离散傅里叶变换:从离散到连续的变换
- 离散傅里叶级数:从离散到离散的变换
今天,我先来介绍前面两种,对它进行公式推导。我尽可能写的通俗易懂,尽可能让大家理解。大家不能理解也没有关系。我为了理解傅里叶变换,花了大量时间学习了高等数学、线性代数、复变函数,才明白其中一些背景知识的。也许学习总有一个过程吧,不能一蹴而就、一步登天。受限与我的表达能力,受到了知识诅咒的我,也许真的很难找到一种角度,从很零基础的角度娓娓道来傅里叶变换,但是我会尽力而为。
大家也不要被这满篇数学给吓到。其实我做的事情很低端,一点儿也不高端。文章的核心思想就一个:构造一个理论,把时域的函数转到频域去。其他看起来面目狰狞的函数公式、满篇的数学其实都是纸老虎。把握核心思想就可以了。
让我们开始吧!
假设
//一些隐含的假设就写在这里,后期记得删掉
- 我是为了项目《声场》学习的《信号与系统》。所以接下来我会站在计算机的角度理解它
- 是一个被设计的常数。一般来讲越小越好。但是越小性能消耗越严重
- 最小正周期被称之为基波周期。
- 函数是周期函数。最小正周期是。当你调整是,最小正周期变为
基础知识
正交基函数
存在以下事实:
(注:推导的时候注意:)
其中,
上面六条积分等式可以概括为这样子的一句话:
从以下多个函数中任取两个不重复的函数,相乘,然后再从0到积分,其结果都为0.
傅里叶级数
什么是傅里叶级数?
傅里叶级数讲的是,对于任意一个函数,可以拆分为多个sin、cos函数的叠加:
其中都是系数
不要被这个公式吓到!从感性上理解,就是”“对于任意一个函数,可以用很多个、函数的相加的形式来表示”。只不过、的系数和系数不同罢了。
怎么确定系数B0?
公式(1)可以改写为:
其中是系数,,是一个被设计的常数。
对公式(2)两边积分,可以得到:
由于有:,于是
设。
其中
- 对于,由微积分的知识,易知:
- 对于,由正交性可知,易知: (注:)
- 对于,由正交性可知,易知: (注:)
所以,
至此,系数被确定了
怎么确定系数Bk?
注意事项
- 是一个由开始的正整数
- 你可以认为,是从里面任取的一个正整数。比如说
- 取完任意一个正整数,比如说后,与函数相乘然后再积分:
- 是一个由开始的,连续变化的正整数
同样的,对于任意函数:
对公式(2)两边乘以
然后对公式两边积分,可得:
公式太长了。公式是由三个部分构成的。先把公式拆分为三个部分。设
其中
对于,由正交性可知,
对于,已知:
把这个展开,可以得到:
(注意这里)
结合分析可知,只有当时,才有数值.其余项积分为0.
于是:
对于,把这个展开,可以得到:
由于,所以每一项都为0
于是:
总结一下:。。于是,可以得到:
怎么确定系数Ck?
同样的,对于任意函数:
对公式(2)两边乘以,然后积分,可得:
设
其中
对于,由正交性可知,
对于,由正交性可知,
对于,已知:
把这个展开,可以得到:
结合分析可知,只有当时,才有数值.其余项积分为0.
于是:
总结一下:。。于是,可以得到:
总结
,
其中,每一项的系数可由以下公式确定:
傅里叶级数的复数表达形式
傅里叶公式一共有四条,公式比较多如果用复数来表达,四条公式可以浓缩为2条。
其中,
傅里叶级数的复数表达形式,与原始公式的关系为:
或者,可以写为:
接下来,我来证明一下。我将从右边推到左边。
与傅里叶级数公式对照,可得:
于是可得:
于是原公式得证。
傅里叶变换
温馨提示
- 傅里叶级数是从连续到离散的变换,而傅里叶变换是从连续到连续的变换
- 傅里叶变换可以理解为是将傅里叶级数推广到非周期的函数。趋近于0,周期趋近于无穷,
公式推导
首先,我们定义:
注:上面两个公式的等价的。意思是积分不一定要从0开始,只要积满一个周期就可以了。
已知傅里叶级数的复数表达公式,结合上面的定义,可得:
把代入
可得:
非周期函数可以理解为是一个无穷大的函数。无穷大,由于,所以无穷小。
所以:
(这里绕不过来,建议去看看积分的定义)
总结:
非周期的函数的傅里叶变换:
被称为傅里叶变换公式:
其记号为(就是一种写法,下同):
被称为傅里叶反变换公式
其记号为:
其中
被称为时域、时间域
被称为频域、频率域
至此,两种傅里叶变换:傅里叶级数、傅里叶变换推导完毕。
再见!
离散傅里叶变换(Discrete Fourier Transform,DFT)公式如下:
其中,为原始信号的离散采样值,为傅里叶变换后的频域信号,为采样点数,为虚数单位,为频域的离散采样点。公式中的为旋转因子,可以通过快速傅里叶变换(FFT)算法来高效计算。DFT可以将原始信号从时域转换到频域,从而分析信号的频率成分和能量分布,是信号处理领域中重要的工具。
已知离散傅里叶变化的公式为:
假设已知在上个不同的取值,比如,已知:
的值,则我们可以求得.
这是因为,由离散傅里叶变化公式,可得:
上述公式的矩阵化表述为:
其中,
对于取上两两不相等的数字,可以证明,将矩阵A改写为行列式R,如果行列式R不为0(可以证明该行列式是范德蒙行列式),则对于公式
来说,已知A、C,可以求B。其含义为。第一,就是可以求。第二,就是A可逆。进一步的,如果求出来所有的,就可以利用离散傅里叶变换求出在所有上的数值。
所以,尽管是一个连续的函数,但是其值在个离散点上完全确定。所以,对于一个点序列,我们可以构建一个离散到离散的傅里叶变换,用N个离散的点来代表其频域。
我们选择如下的(这是前人的想法,可以降低算法时间复杂度):
这就是离散傅里叶级数(DFS):
其正变换和反变换公式如下:
正变换公式:
反变换公式:
其中,为虚数单位,为原始信号的离散采样值,为采样点数,为频域的离散采样点,为傅里叶变换后的频域信号。正变换将原始信号从时域转换为频域,而反变换则将频域信号还原回时域。
在矩阵的计算中,涉及到大量的重复计算。如果进一步利用矩阵计算时的中间信息,则可以进一步降低算法的时间复杂度。实验表明,一个8点的离散傅里叶级数算法,可以拆分为两个4点的离散傅里叶级数算法计算结果的线性叠加。同时,一个4点的离散傅里叶级数算法,可以拆分为两个2点的离散傅里叶级数算法计算结果的线性叠加。那么,对于一个长度为N的序列,比如当时,也可以不断拆分下去,充分利用已知的计算信息来计算(编程中的“递归”思想),进一步降低算法复杂度。这就是大名鼎鼎的快速傅里叶算法。论述该算法合理性,其篇幅过长,这里按下不表。