大家好,又见面了,我是你们的朋友全栈君。
注:本文为博主参考书籍和他人文章并加上自己的理解所编,作为学习笔记使用并将其分享出去供大家学习。若涉及到引用您的文章内容请评论区告知!如有错误欢迎指正!
参考文章:https://zhuanlan.zhihu.com/p/19763358
p.s.本文无论是cos还是sin,都统一用“正弦波”(Sine Wave)一词来代表简谐波。
一、什么是傅里叶变换
时域及频域
在讲解傅里叶变换之前,我们需要先来了解一下时域和频域的概念。
从我们出生,我们看到的世界都以时间贯穿,股票的走势、人的身高、汽车的轨迹都会随着时间发生改变。这种以时间作为参照来观察动态世界的方法我们称其为时域分析。而我们也想当然的认为,世间万物都在随着时间不停的改变,并且永远不会静止下来。但如果我告诉你,用另一种方法来观察世界的话,你会发现世界是永恒不变的,你会不会觉得我疯了?我没有疯,这个静止的世界就叫做频域。
我们举一个例子:假如一段音乐的曲调类似于某种正弦波的形式,那么从时域来看它的曲调时高时低在不停地变化着,而当我们从频域的角度看则可以认为它只是静止在那里的一个音符(本人不懂音乐,这样写纯粹为了帮助理解)。
这里 借用别人的一句话:
你眼中看似落叶纷飞变化无常的世界,实际只是躺在上帝怀中一份早已谱好的乐章。
所以实际上时域是以时间为横坐标,时域分析就是观察一件事物随时间的变化规律。而频域则是以频率为横坐标,频域分析(频谱分析)就是在观察一件事物在不同频率上的分布情况。
为什么要进行频域分析
信号不只和时间有关,还和频率有关,在不同频率下信号的响应是不一样的,所以就要知道信号随着频率是怎么变化的。
还有信号的计算,在时间域内往往要解微分方程,而用傅立叶和拉普拉斯变换到复频域后就变成了代数方程,求解起来很方便。
从频谱图上可以看到幅值和相位随着频率变化是如何响应的
也可以求出系统的截止频率。
无需求解微分方程,图解(频率特性图)法,间接揭示系统性能并指明改进性能的方向和易于实验分析.可推广应用于某些非线性系统(如含有延迟环节的系统)以及可方便设计出能有效抑制噪声的系统。
傅里叶分析
那我们不禁会产生一个疑问,如果我们需要分析的这个信号是没有规律即不是正弦信号的话,我们该如何从频域的角度去做分析呢?
这时我们的傅里叶同学提出来:任何连续周期信号都可以由一组适当的正弦曲线组合而成。虽然正弦曲线无法组合成一个带有棱角的信号。但是,我们可以用正弦曲线来非常逼近地表示它,逼近到两种表示方法不存在能量差别。
这里引用别人的一张图:
随着正弦波数量逐渐的增长,他们最终会叠加成一个标准的矩形。
不仅仅是矩形,你能想到的任何波形都是可以如此方法用正弦波叠加起来的,前提是要正弦波足够的多。
为什么我们要用正弦曲线来代替原来的曲线呢?如我们也还可以用方波或三角波来代替呀,分解信号的方法是无穷多的,但分解信号的目的是为了更加简单地处理原来的信号。
用正余弦来表示原信号会更加简单,因为正余弦拥有原信号所不具有的性质:正弦曲线保真度。一个正余弦曲线信号输入后,输出的仍是正余弦曲线,只有幅度和相位可能发生变化,但是频率和波的形状仍是一样的。且只有正余弦曲线才拥有这样的性质,正因如此我们才不用方波或三角波来表示。
傅里叶变换使一种线性的积分变换,这种变换是从时间转换为频率的变换或其相互转换。那么为什么要使用傅里叶变化呢?它可以很容易的将信号分解为频域里各种不同频率的信号,又由于频域分析具有很多时域所不具有的特点,故可以比较方便的对原信号进行分析。
分解的思路
1.常数项
对于某些常数函数或者含有其他附加量的原函数,还需要附加常数项。
2.周期不变
假设原函数的周期为T,我们通过怎样的合理分解能使的分解出的各函数可以仍然合并出一个周期为T的函数呢?
我们通过思考,比如说T/2的周期也为T。很显然对于一般的,如果f(x)的周期为T,那么
这些函数的周期都为T。我们将这些函数进行加减得到的结果函数周期仍然为T。
3.振幅调整
通过上面的分析,我们得到了一堆周期为T的函数。接下来我们就需要用这一对的函数的某些来逼近原函数,比如先用一个周期刚好为T的函数(基波/一次谐波)来与原函数作比较,假设该函数比原函数看起来要低一些,那我我们可以试图给这个函数进行放大,即前面加上一个大于1的系数。此时如果某些地方超出了原函数,我们就需要减去一个较小周期的函数。这样经过不断地加加减减就会越来越接近原函数了。
4.总结
综上,我们可以构造一个三角函数之和:
其中C称为f(x)的直流分量,an和bn分别为余弦函数和正弦函数的赋值增益。(这个式子就是后边要讲的傅里叶级数的一般形式的转换函数)
二、傅里叶变换的类型
按原始信号的不同可以将傅里叶变换分为四类:
1、非周期性连续信号 傅立叶变换(FT)
2、周期性连续信号 傅立叶级数(FS)
3、非周期性离散信号 离散时域傅立叶变换(DTFT)
4、周期性离散信号 离散傅立叶变换(DFT)
如上,容易发现:函数在时(频)域的离散对应于其像函数在频(时)域的周期性。反之连续则意味着在对应域的信号的非周期性。也就是说,时间上的离散性对应着频率上的周期性。同时,注意,离散时间傅里叶变换,时间离散,频率不离散,它在频域依然是连续的。
阅读建议:下面的顺序是为了和上面的列举有所对应,阅读的话建议先阅读傅里叶级数然后再阅读连续傅里叶变换。
1、连续傅里叶变换(FT)
傅里叶变换的频谱
通过和傅里叶级数的图比较,大家应该可以理解如何从离散谱变成了连续谱的了吧?原来离散谱的叠加,变成了连续谱的累积。所以在计算上也从求和符号变成了积分符号。
欧拉公式
在进行下面的讲解之前,我们需要复习一下之前高中学过的数学知识:欧拉公式
虚数i这个概念大家在高中就接触过,但那时我们只知道它是-1的平方根,可是它真正的意义是什么呢?
这里有一条数轴,在数轴上有一个红色的线段,它的长度是1。当它乘以3的时候,它的长度发生了变化,变成了蓝色的线段,而当它乘以-1的时候,就变成了绿色的线段,或者说线段在数轴上围绕原点旋转了180度。
我们知道乘-1其实就是乘了两次 i使线段旋转了180度,那么乘一次 i 呢——答案很简单——旋转了90度。
同时,我们获得了一个垂直的虚数轴。实数轴与虚数轴共同构成了一个复数的平面,也称复平面。这样我们就了解到,乘虚数i的一个功能——旋转。
现在,就有请宇宙第一耍帅公式欧拉公式隆重登场——
这个公式在数学领域的意义要远大于傅里叶分析,但是称它为宇宙第一耍帅公式是因为它的特殊形式——当x等于Pi的时候。
这个公式关键的作用,是将正弦波统一成了简单的指数形式。我们来看看图像上的涵义:
欧拉公式所描绘的,是一个随着时间变化,在复平面上做圆周运动的点,随着时间的改变,在时间轴上就成了一条螺旋线。如果只看它的实数部分,也就是螺旋线在左侧的投影,就是一个最基础的余弦函数。而右侧的投影则是一个正弦函数。
指数形式的傅里叶变换
有了欧拉公式的帮助,我们便知道:正弦波的叠加,也可以理解为螺旋线的叠加在实数空间的投影。
那么我们就可以很容易的从实数域扩展到复数域。
这个像大海螺一样的图,为了方便观看,仅仅展示了其中正频率的部分,负频率的部分没有显示出来。
如果你认真去看,海螺图上的每一条螺旋线都是可以清楚的看到的,每一条螺旋线都有着不同的振幅(旋转半径),频率(旋转周期)以及相位。而将所有螺旋线连成平面,就是这幅海螺图了。
连续形式的傅里叶变换其实是傅里叶级数 (Fourier series)的推广,因为积分其实是一种极限形式的求和算子而已。一般情况下,若“傅里叶变换”一词不加任何限定语,则指的是“连续傅里叶变换”。连续傅里叶变换将平方可积的函数①f(t)表示成复指数函数的积分或级数形式②。
这是将频域的函数F(ω)表示为时域的函数f(t)的积分形式。
①平方可积函数:平方可积函数是绝对值平方的积分为有限值的实值或副值可测函数,又称二次积分函数。一个等价的定义是,函数本身的平方(而非它的绝对值)是勒贝格可积的。想要使其为真,实部的正和负的部分的积分都必须是有限的,虚部也是如此。若,则我们说f在实直线(-∞,+∞)上是平方可积的。平方可积一词也可以用于有限区间。
②级数是指将数列的项依次用加号连接起来的函数。级数理论是分析学的一个分支;它与另一个分支微积分一起作为基础知识和工具出现在其余各分支中。二者共同以极限为基本工具,分别从离散与连续连个方面,结合起来研究分析学的对象,即变量之间的依赖关系——函数。S=∑u(n)称为级数的部分和,u(n)称为级数的通项。
连续傅里叶变换的逆变换为:
即将时域的函数f(t)表示为频域的函数F(ω)的积分。
一般可称函数f(t)为原函数,而称函数F(ω)为傅里叶变换的像函数,原函数和像函数构成一个傅里叶变换对。
除此之外,还有其它型式的变换对,以下两种型式亦常被使用。在通信或是信号处理方面,常以来代换,而形成新的变换对:
一种对连续傅里叶变换的推广称为分数傅里叶变换(Fractional Fourier Transform)。分数傅里叶变换(fractional Fourier transform,FRFT)指的就是傅里叶变换(Fourier transform,FT)的广义化。
分数傅里叶变换的物理意义即做傅里叶变换 a 次,其中 a 不一定要为整数;而做了分数傅里叶变换之后,信号或输入函数便会出现在介于时域(time domain)与频域(frequency domain)之间的分数域(fractional domain)。
当f(t)为偶函数(或奇函数)时,其正弦(或余弦)分量将消亡,而可以称这时的变换为余弦变换(cosine transform)或正弦变换(sine transform)。
这个很好理解,不过这里还是给出它的证明过程:我们可以先设f(t)=e^jωt,那么f(-t)=e^-jωt。根据欧拉公式我们可以得到f(t)= e^jωt=cos(ωt)+jsin(ωt)。根据(f(t)+ f(-t))/2= cos(ωt),若f(t)为偶函数则得到f(t)= cos(ωt);根据(f(t)-f(-t))/2=jsin(ωt)若f(t)为奇函数则得到f(t)= jsin(ωt)。
2、傅里叶级数(FS)
傅里叶级数的频谱
还是上图的正弦波累加成矩形波,我们换一个角度来看看:
在这几幅图中,最前面黑色的线就是所有正弦波叠加而成的总和,也就是越来越接近矩形波的那个图形。而后面依不同颜色排列而成的正弦波就是组合为矩形波的各个分量。这些正弦波按照频率从低到高从前向后排列开来,而每一个波的振幅都是不同的。一定有细心的读者发现了,每两个正弦波之间都还有一条直线,那并不是分割线,而是振幅为0的正弦波!也就是说,为了组成特殊的曲线,有些正弦波成分是不需要的。
这里,不同频率的正弦波我们称为频率分量。
如果我们把第一个频率最低的频率分量看作“1”,我们就有了构建频域的最基本单元。对于我们最常见的有理数轴,数字“1”就是有理数轴的基本单元。时域的基本单元就是“1秒”,如果我们将一个角频率为的正弦波cos(t)看作基础,那么频域的基本单元就是。
有了“1”,还要有“0”才能构成世界,那么频域的“0”是什么呢?cos(0t)就是一个周期无限长的正弦波,也就是一条直线!所以在频域,0频率也被称为直流分量,在傅里叶级数的叠加中,它仅仅影响全部波形相对于数轴整体向上或是向下而不改变波的形状。
正弦波就是一个圆周运动在一条直线上的投影。
所以频域的基本单元也可以理解为一个始终在旋转的圆。圆的半径取决于振幅的大小,圆的转速取决于频率频率大小。
介绍完了频域的基本组成单元,我们就可以看一看一个矩形波,在频域里的模样了:
可以看出有些项的振幅是0,也就对应了图中的彩色直线。振幅为0的正弦波。
傅里叶级数的相位谱
通过时域到频域的变换,我们得到了一个从侧面看的频谱,但是这个频谱并没有包含时域中全部的信息。因为频谱只代表每一个对应的正弦波的振幅是多少,而没有提到相位。基础的正弦波A.sin(wt+θ)中,振幅,频率,相位缺一不可,不同相位决定了波的位置,所以对于频域分析,仅仅有频谱(振幅谱)是不够的,我们还需要一个相位谱。那么这个相位谱在哪呢?我们看下图,这次为了避免图片太混论,我们用7个波叠加的图。
鉴于正弦波是周期的,我们需要设定一个用来标记正弦波位置的东西。在图中就是那些小红点。小红点是距离频率轴最近的波峰,而这个波峰所处的位置离频率轴有多远呢?为了看的更清楚,我们将红色的点投影到下平面,投影点我们用粉色点来表示。当然,这些粉色的点只标注了波峰距离频率轴的距离,并不是相位。
这里需要纠正一个概念:时间差并不是相位差。如果将全部周期看作2Pi或者360度的话,相位差则是时间差在一个周期中所占的比例。我们将时间差除周期再乘2Pi,就得到了相位差。
在完整的立体图中,我们将投影得到的时间差依次除以所在频率的周期,就得到了最下面的相位谱。所以,频谱是从侧面看,相位谱是从下面看。
对于周期函数,其傅里叶级数是存在的:(注:以下公式均假设原周期函数的周期为2π,关于傅里叶级数的更详细的解释会出现在后期的深入傅里叶级数一篇文章中)
其中Fn为复幅度。对于实值函数,函数的傅里叶级数可以写成:
其中an和bn是实频率分量的幅度。
3、离散时域傅里叶变换(序列的傅里叶变换 DTFT)
离散傅里叶变换是离散时域傅里叶变换(DTFT)的特例(有时作为后者的近似)。DTFT在时域上离散,在频域上则是周期的。DTFT可以被看作是傅里叶级数的逆变换。
4、离散傅里叶变换(DFT)
离散傅里叶变换(DFT),是连续傅里叶变换在时域和频域上都离散的形式,且时域和频域都是周期性的。在形式上,变换两端(时域和频域上)的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。即使对有限长的离散信号作DFT,也应当将其看作经过周期延拓成为周期信号再作变换。在实际应用中通常采用快速傅里叶变换以高效计算DFT。
为了在科学计算和数字信号处理等领域使用计算机进行傅里叶变换,必须将函数xn定义在离散点而非连续域内,且须满足有限性或周期性条件。这种情况下,使用离散傅里叶变换(DFT),将函数xn表示为下面的求和形式:
其中Xk是傅里叶幅度。直接使用这个公式计算的计算复杂度为O(n*n),而快速傅里叶变换(FFT)可以将复杂度改进为O(n*lgn)。(后面会具体阐述FFT是如何将复杂度降为O(n*lgn)的。)计算复杂度的降低以及数字电路计算能力的发展使得DFT成为在信号处理领域十分实用且重要的方法。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160842.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...