zoukankan      html  css  js  c++  java
  • 傅里叶分析讲解二

    引用:https://www.jianshu.com/p/4d4db620dc9f

    1, 什么是傅里叶级数

    什么是级数?
    来自百度百科:级数是指将数列的项依次用加号连接起来的函数。典型的级数有正项级数、交错级数、幂级数、傅里叶级数等。级数理论是分析学的一个分支;它与另一个分支微积分学一起作为基础知识和工具出现在其余各分支中。二者共同以极限为基本工具,分别从离散与连续两个方面,结合起来研究分析学的对象,即变量之间的依赖关系──函数。

    级数是指将数列的项依次用加号连接起来的函数。举例就是:
    sum_{n=1}^infty 1/n^2=1/1^2+1/2^2+1/3^2+......+1/n^2
        这种由很多项相加的形式就是级数。

        对于函数就是如下这个形式:
    f(x)=u_1(x)+u_2(x)+...+u_n(x)

    如何用级数表达一个周期函数

        在工程中,我们经常会遇到各种各样的周期性的波形。这些波形很难找到一个函数去表达他,或者原函数无法很好的去分析波的特征。

     
    image.png

        所以我们需要找到一个函数g(x)去近似原函数f(x),而且这个g(x)有很好的特性,方便去做分析。

        法国数学家傅里叶就发现,任何周期函数都可以用正弦函数和余弦函数构成的无穷级数来表示。
        看一个动图来理解下这句话。


     
    Fourier_series_square_wave_circles_animation

        右边的波形就是由左边几个基础波形(三角函数)合成的。

        下面给出傅里叶级数的数学公式。
    f(x)= frac{a_0}{2}+sum_{n=1}^infty (a_ncos(frac{2pi nx}{T}) +b_nsin(frac{2pi nx}{T}) )

    原函数f(x)就由无数个sin,cos组成的。这个公式理解起来也很简单,frac{a_0}{2}是个常数项,因为正弦和余弦函数都是在0点位置上下波动,想要让其脱离0点,就必须加入frac{a_0}{2}这个偏移项,当然你也可以理解为frac{a_0}{2}cos(0x)
    sum_{n=1}^infty (a_ncos(frac{2pi nx}{T}) +b_nsin(frac{2pi nx}{T}) )便是无数个sin和cos的组合,其中a_n,b_n就相当于上面动图中的frac{4}{pi },frac{4}{3pi },frac{4}{5pi },frac{4}{7pi } 代表着振幅,也就是圆半径的大小。frac{2pi n}{T}就相当于动图中的	heta前的系数1,3,5,7代表着频率,也就是圆转一圈用的速度。so,是不是很容易理解。
        frac{2pi n}{T}代表这频率,那其中的T代表着什么呢?T就是函数f(x)的周期,frac{2pi n}{T}的作用就是构建一个周期为T的波形,只是随着n的增大,波的频率越来越高。例如sin(x),sin(2x)都是周期2pi的函数,只是sin(2x)的最小周期不在是2pi,所以其频率就变大了。

     
    image.png

        这里强调下,傅里叶级数是针对周期函数的,对于非周期的函数就是傅里叶变换了。

        很多博主在解读傅里叶级数的时候,上来就说时域,频阈,复频域,欧拉公式。其实那些都是在不同场景下的不同的表现形式,本质都是一样的。先理解了上面的公式,以此为基础进行展开,会更加容易理解。

    2,如何求解

        还记得我们的目标吗?找出一个函数g(x)去近似原函数f(x)g(x)样子已经有了:
    f(x)= frac{a_0}{2}+sum_{n=1}^infty (a_ncos(frac{2pi nx}{T}) +b_nsin(frac{2pi nx}{T}) )

        我们只需要求出a_0,a_n,b_n就可以得到g(x)

        所以这里有个前提,我们在看下需要求解的波形:

     
    image.png

        对于原函数f(x)是什么样的我们并不知道,但我们知道f(x)在每个x处的取值,毕竟这个波是我们自己采样得到的。

    C_1= frac{a_0}{2}+sum_{n=1}^infty (a_ncos(frac{2pi nx}{T}) +b_nsin(frac{2pi nx}{T}) )
    C_2= frac{a_0}{2}+sum_{n=1}^infty (a_ncos(frac{2pi nx}{T}) +b_nsin(frac{2pi nx}{T}) )
    C_3= frac{a_0}{2}+sum_{n=1}^infty (a_ncos(frac{2pi nx}{T}) +b_nsin(frac{2pi nx}{T}) )
    ......
    C_n= frac{a_0}{2}+sum_{n=1}^infty (a_ncos(frac{2pi nx}{T}) +b_nsin(frac{2pi nx}{T}) )

        所以求解g(x)最简单得方法就是,构建n个g(x)=C_n方程等式,求解一个n元一次方程,如上面所示。这里C是常数,n得数量由自己定义。

        当然上面是小学生的解法,大家不要当真。
        在给大家介绍傅里叶级数的解之前,我们先看下周期为2pi的傅里叶级数,令T=2pi带入:
    f(x)= frac{a_0}{2}+sum_{n=1}^infty (a_ncos(nx) +b_nsin(nx) )
    其对应的解为:
    a_0=frac{1}{pi }int_{-pi}^pi f(x)dx
    a_n=frac{1}{pi }int_{-pi}^pi f(x)cos(nx)dx
    b_n=frac{1}{pi }int_{-pi}^pi f(x)fin(nx)dx

        想要求出这几个解,我们要先了解下三角函数的正交性,而理解三角函数的正交最好就是从周期为2pi的函数开始。

    什么是正交?在线性代数中,正交就是两个向量垂直,如下图(A)。

     
    正交

    egin{bmatrix}x_1 \y_1 \end{bmatrix} 和egin{bmatrix}x_2 \y_2 \end{bmatrix} 正交,就表现为x_1*x_2+y_1*y_2=0,也就是两个向量的内积等于0

    而在函数上的正交就表现为积分的形式:
    int_a^b f(x)*g(x)dx=0
    其中int_a^b f(x)*g(x)dx 就是f(x),g(x)的内积,当其为零的时候就说明两个函数在a,b区间内正交。

    回到傅里叶级数,下面就是傅里叶级数中所有的三角函数集合。
    {{0,1,sin(x),cos(x),sin(2x),cos(2x).....sin(nx),cos(nx) }}

    任意两个三角函数一定条件下在 -pipi之间是正交的,详细如下:
    int_{-pi} ^pisin(nx)cos(mx)dx=0
    int_{-pi} ^pisin(nx)sin(mx)dx=0 quadquad n
eq m
    int_{-pi} ^picos(nx)cos(mx)dx=0 quadquad n
eq m
    int_{-pi} ^pisin(nx)sin(mx)dx=pi quadquad n=m
    int_{-pi} ^picos(nx)cos(mx)dx=pi quadquad n=m

    关于其证明网上有很多,这里就不细说了。

    下面看如何利用上面的性质来接a_0,a_n,b_n

    将函数两边同时积分

    int_{-pi}^{pi}f(x)dx=int_{-pi}^{pi}frac{a_0}{2}dx+int_{-pi}^{pi}sum_{n=1}^infty a_ncos(nx)dx+int_{-pi}^{pi}sum_{n=1}^infty b_nsin(nx)dx

    frac{a_0}{2},a_n,b_n移到前面。
    int_{-pi}^{pi}f(x)dx=frac{a_0}{2}int_{-pi}^{pi}dx+a_nint_{-pi}^{pi}sum_{n=1}^infty cos(nx)dx+b_nint_{-pi}^{pi}sum_{n=1}^infty sin(nx)dx
    其中 int_{-pi}^{pi}sum_{n=1}^infty cos(nx)dx,int_{-pi}^{pi}sum_{n=1}^infty sin(nx)dx 可以看成 int_{-pi}^{pi}sum_{n=1}^infty 1*cos(nx)dx,int_{-pi}^{pi}sum_{n=1}^infty 1*sin(nx)dx,根据前面的正交性,得到这两项都等于0,于是上面的函数就等于
    int_{-pi}^{pi}dx=frac{a_0}{2}int_{-pi}^{pi}dx=frac{a_0}{2}2pi

    于是:
    a_0=frac{1}{pi}int_{-pi}^{pi}f(x)dx

    下面求解下a_n

    将两边乘上cos(mx),然后两边同时积分

    int_{-pi}^{pi}f(x)cos(mx)dx=int_{-pi}^{pi}frac{a_0}{2}cos(mx)dx+int_{-pi}^{pi}sum_{n=1}^infty a_ncos(nx)cos(mx)dx+int_{-pi}^{pi}sum_{n=1}^infty b_nsin(nx)cos(mx)dx

    frac{a_0}{2},a_n,b_n移到前面。
    int_{-pi}^{pi}f(x)cos(mx)dx=frac{a_0}{2}int_{-pi}^{pi}cos(mx)dx+a_nint_{-pi}^{pi}sum_{n=1}^infty cos(nx)cos(mx)dx+b_nint_{-pi}^{pi}sum_{n=1}^infty sin(nx)cos(mx)dx

    同样根据正交性int_{-pi}^{pi}cos(mx)dx quad, quad int_{-pi}^{pi}sum_{n=1}^infty sin(nx)cos(mx)dx 等于0. 而int_{-pi}^{pi}sum_{n=1}^infty cos(nx)cos(mx)dx 只有n=m的项不为0,其他的也会为0,所以:

    int_{-pi}^{pi}f(x)cos(nx)dx=a_nint_{-pi}^{pi} cos^2(nx)dx

    在正交性那块我给出了 int_{-pi}^{pi} cos^2(nx)dx=pi,所以:
    a_n=frac{1}{pi}int_{-pi}^{pi}f(x)cos(nx)dx

    关于b_n求法是一样得,这里就不细说了。

    上面便是傅里叶级数得求解过程,但是这里我们定义得频率是2pi

    见贤思齐,见不贤而自省
  • 相关阅读:
    linux安装nginx
    git配置多个SSH密钥
    webpack加载器安装node-sass失败的解决方法
    Vue-cli webpack打包之后index.html缺少引号的问题
    算法:一个数组中所有元素的最小公倍数
    JS 实现一个睡眠函数sleep
    剑指offer 牛客67道题集合
    剑指offer
    剑指offer
    剑指offer
  • 原文地址:https://www.cnblogs.com/Sweepingmonk/p/11582249.html
Copyright © 2011-2022 走看看