傅里叶之级数的初步认识

       关于傅里叶变换的理解和应用一直没有理解透彻,知其然不知其所以然。于是在使用过程当中心里老是不踏实,总担心哪里会出错。所以抽空理解一下傅里叶级数的理论知识。

1,周期为2π的函数f(x)能够展开成三角级数的形式:f(x)=\frac{_{a0}}{2}+\frac{_{b0}}{2}+\sum_{k=1}^{\infty }(a_kcoskx+b_ksinkx),其中a0,a1,a2...,b0,b1,b2...叫做函数f(x)的傅里叶系数。其中

a_0=\frac{1}{\pi }\int _{-\pi}^{\pi}f(x)dx

a_k=\frac{1}{\pi }\int _{-\pi}^{\pi}f(x)coskxdx

b_0=0

b_k=\frac{1}{\pi }\int _{-\pi}^{\pi}f(x)sinkxdx

2,在长度为2π的区间上,三角函数系具有正交性,如下:

\int _{-\pi}^{\pi}cosnxdx=\frac{1}{n}*[sinnx]_{-\pi}^{\pi}=0 (n=1,2,3,...)

\int _{-\pi}^{\pi}sinnxdx=-\frac{1}{n}*[cosnx]_{-\pi}^{\pi}=0(n=1,2,3,...)

\int _{-\pi}^{\pi}sinmxcosnxdx=\frac{1}{2}\int[sin(m+n)x+sin(m-n)x]dx=0(m,n=1,2,3,...)

\int _{-\pi}^{\pi}cosmxcosnxdx=\frac{1}{2}\int[cos(m+n)x+cos(m-n)x]dx=\frac{1}{2}[\frac{sin(m+n)x}{m+n}+\frac{sin(m-n)x}{m-n}]_{-\pi}^{\pi}=0(m,n=1,2,3,...;m~=n)

\int _{-\pi}^{\pi}sinmxsinnxdx=\frac{1}{2}\int[cos(m+n)x-cos(m-n)x]dx=\frac{1}{2}[\frac{sin(m+n)x}{m+n}-\frac{sin(m-n)x}{m-n}]_{-\pi}^{\pi}=0(m,n=1,2,3,...;m~=n)


\int _{-\pi}^{\pi}cos^{2}nxdx=\frac{1}{2}\int _{-\pi}^{\pi}[cos2nx+1]dx=\frac{1}{2}[\pi+\pi]=\pi (n=1,2,3,...)

\int _{-\pi}^{\pi}sin^{2}nxdx=\frac{1}{2}\int _{-\pi}^{\pi}[-cos2nx+1]dx=\frac{1}{2}[\pi+\pi]=\pi (n=1,2,3,...)

3,有了三角函数系的正交性质,第一步对函数f(x)两端求积分可知:

\int _{-\pi}^{\pi}f(x)dx=\frac{a0+b0}{2}\int _{-\pi}^{\pi}1dx=(a0+b0){\pi} 

 

第二步对函数f(x)两边乘以coskx或sinkx后求取积分,可知

\int _{-\pi}^{\pi}f(x)coskxdx=a_k{\pi}​​​​​​​ (k=1,2,3,...)

\int _{-\pi}^{\pi}f(x)sinkxdx=b_k{\pi}​​​​​​​ (k=1,2,3,...)

 

4,总结,公式真的很难打出来呀。令b_0=0,则a_0=\frac{1}{\pi }\int _{-\pi}^{\pi}f(x)dx。所以傅里叶系数如下:

a_k=\frac{1}{\pi }\int _{-\pi}^{\pi}f(x)coskxdx (k=0,1,2,...)

b_k=\frac{1}{\pi }\int _{-\pi}^{\pi}f(x)sinkxdx(k=0,1,2,...)

5,实战,根据上述的公式进行函数拟合。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
F0=5;
T0=1/F0;
w0=2*pi*F0;
Fs=48000;%模拟采样频率
cycle=9;
[fdata,x,fdata0,x0] =tri_gen(Fs,F0,cycle);
subplot(3,1,1);
plot(x,fdata,'color','r');
xlabel('时间/s');
ylabel('幅度'); 
N_x =length(x);%全时域采样点数目
N_x0=length(x0);%单周期采样点数目
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%依次求取直流分量和谐波分量
%数字域里面的积分相当于求和
Harmonic=3;%求9次谐波分量
a=zeros(Harmonic,1);
b=zeros(Harmonic,1);
for n=1:Harmonic
    for m=1:N_x0
        a(n)=a(n) + fdata0(m)*cos((n-1)*w0*x0(m));
        b(n)=b(n) + fdata0(m)*sin((n-1)*w0*x0(m));
    end
    delta_x0 =T0/N_x0;
    a(n)    =a(n)*delta_x0;
    b(n)    =b(n)*delta_x0;
    a(n)    =2*a(n)/T0;
    b(n)    =2*b(n)/T0;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%利用谐波数据拟合原始信号
fdout=zeros(1,N_x);
    for m=1:N_x
        for k=1:Harmonic
            ak_coskx=a(k)*cos((k-1)*w0*x(m));
            bk_sinkx=b(k)*sin((k-1)*w0*x(m));
            if(k==1)
                ak_coskx=ak_coskx/2;
                bk_coskx=bk_sinkx/2;
            end
            fdout(m)=fdout(m) + ak_coskx + bk_sinkx;
        end
    end
    
subplot(3,1,2);
plot(x,fdout,'color','b');
xlabel('时间/s');
ylabel('幅度'); 
legend('2次谐波拟合');

subplot(3,1,3);
plot(x,fdata,'color','r');hold on;
plot(x,fdout,'color','b');
xlabel('时间/s');
ylabel('幅度'); 
legend('2次谐波拟合');

 

function [tri_out,x,tri_out0,x0] =tri_gen(Fs,F0,Num)
    T0      =1/F0;
    tick    =1/Fs;%模拟采样间隔
    x0=-T0/2:tick:T0/2-tick;%单周期时间值
    tri_out0=x0.*x0;%单周期函数值
    x=-T0/2*Num:tick:T0/2*Num-tick;
    tri_out=repmat(tri_out0,1,Num);    
end
 

依次画出2次谐波,4次谐波,32次谐波的曲线图,可以看到32次谐波拟合基本和原图像重合了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值