傅立叶级数/变换及其应用

    对于级数的概念,可以参考《泰勒级数及其应用》。在《高等数学》中,我们学习了傅立叶级数。傅立叶级数要求函数是周期的。对于非周期的函数,《复变函数与积分变换》中提出了傅立叶变换,使得傅立叶定理的适用范围更加大。前面的傅立叶级数和傅立叶变换都是针对连续函数,对于离散的情况,《数字图像处理与分析》中提出了离散傅立叶变换,使得傅立叶变换在图像处理中的得到广泛的应用。

    傅立叶级数:法国数学家傅里叶发现,任何周期函数都可以用正弦函数余弦函数构成的无穷级数来表示(选择正弦函数与余弦函数作为基函数是因为它们是正交的),后世称为傅里叶级数(法文:série de Fourier,或译为傅里叶级数)一种特殊的三角级数

    三角级数是任何具有下述形式的级数:

----------(1)

    当具有以下形式时,该级数称为傅立叶级数

-----------(2)

或者

-------------(3)
    其中是可积函数,式(2)和式(3)不同的地方在其积分区间的始末位置,但是其积分区间长度都是一个周期。

    傅立叶级数的存在性:一个定义在上周期为的函数,如果它在一个周期上可积,则一定能作出的傅立叶级数。但是的傅立叶级数不一定收敛,更不一定收敛于!那么,傅立叶级数在什么条件下收敛呢?

    傅立叶级数收敛定理(Dirichlet定理):设是周期为的周期函数,如果它满足

(1)在一个周期内连续,或者只有有限个第一类间断点,

(2)在一个周期内至多只有有限个极值点,

    则的傅立叶级数在整个数轴上处处收敛,并且

(1)当x是的连续点时,级数收敛于

(2)当x是的间断点时,级数收敛于


    上面讨论的函数周期的,当周期不是而是,那将会怎么样呢?

    在《高等数学》中指出,只要作变量代换或者,就可以使得周期为变为周期为的函数。可以将展开为傅立叶级数,其系数为:

------------(4)

    其实,在《复变函数与积分变换》中,指出了更为一般的形式:

-------------(5)

    其中

----------------------------(6)

     傅立叶级数复指数形式:在前面的讨论中,使用的都是三角函数的形式。在《复变函数与积分变换》中,给出了傅立叶级数的另外一种形式——复指数形式。通过复指数形式,可以将傅立叶级数推导至傅立叶变换

    欧拉公式如下所示

------------(7)

    根据公式(7),可得:

----------(8)

    将式(8)代入式(5)得:

------(9)

    令

-------------(10)

    得

---------------(11)

    其中,根据式(10)可以得:

------------(12)

    傅立叶级数工程应用

    在工程应用中,通常使用时间来作自变量,因此将式(5)的改为,得:

-------------------(13)

    为了使得物理意义更加明显,令

----------------(14)

-------------(15)

则式(13)改变为

------------(16)

    同理,将式(12))的改为,得:

-----------------------(17)

    傅立叶级数物理意义

    式(16)说明,周期信号可以分解为简谐波之和,这些简谐波的角频率分别为一个基频倍。反映了角频率为的谐波在中所占的份额,称为振幅反映了角频率为的谐波沿时间轴移动的大小,称为相位

    在《电路》的非正弦周期电流、电压、信号等的分析中,常常将其展开为傅立叶级数,也就是进行谐波分析。在《电路》中,将式(16)第一项称为恒定分量,或者直流分量;第二项称为1次谐波,或者基波分量,其周期或频率与原周期函数相同;其它各项统称为高次谐波

    在《电路》中还指出,以为横坐标,为纵坐标作图,即是幅度频谱图。同理,以为横坐标,为纵坐标,作图,即是相位频谱图。

    另外需要注意的是,时间通常不会有负数,实际中式(6)中的积分区间为。但是,在数学计算中,可以将其区间用来代替,这样计算更方便。如式(20)。其实,在《电路》一书中,就是这么做的!这样就将工程实际抽象数学统一了。

---------------(18)

    对于复指数形式,

------------------------(19)

    因此的模与幅角反映了信号中频率为的简谐波的振幅相位,其中振幅被平均分配到正负频率上。负频率的出现则完全为了数学表示方便,它与正频率一起构成同一个简谐波。因此被称为的离散频谱为离散幅度频谱为离散相位频谱。这和式(16)的物理意义是统一的。但是这里的大小是的一半!


实例分析1

   是周期为的周期函数,它在上的表达式如式(20)所示,将其展开成傅立叶级数。

-----------------------------(20)

解:

    由于上只有一个第一类间断点,并且没有极值点,所以满足Direchlet条件

    根据式(2)得

------(21)

------------(22)

------------------------(23)

------------------------(24)

    从而,的傅立叶级数展开式为

----------(25)

   复指数形式为

------------------(26)

    Matlab编程1:由于Matlab中没有专门的傅立叶级数函数,因此需要自己编程实现,如下所示。

%求的函数

function an=fourieran(f,T,n) 
syms x 
w=2*pi/T;
an=2*int(f*cos(n*x),x,-T/2,T/2)/T; 

%求的函数

function bn=fourierbn(f,T,n) 
syms x
w=2*pi/T;
bn=2*int(f*sin(n*w*x),x,-T/2,T/2)/T; 

%求式(6)傅立叶级数展开的前15项

clear
clc
syms x n 
f=x/abs(x); %式(13)的一种委婉表达
T=2*pi;
a0=fourieran(f,2*pi, 0);  %先求a0,再求a1~a15
for n=1:15      
    a(n)=fourieran(f,T, n); 
end
for n=1:15       %求b1~b15
    b(n)=fourierbn(f,T, n); 
end

    求得结果:

a0=0

a=[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

b=[ 4/pi, 0, 4/(3*pi), 0, 4/(5*pi), 0, 4/(7*pi), 0, 4/(9*pi), 0, 4/(11*pi), 0, 4/(13*pi), 0, 4/(15*pi)]

    结果分析:对比Matlab程序的运行结果和式(25),发现两者系数是一致的。这说明Matlab编程正确。

    说明:本程序适合周期为的函数,而不仅仅适合周期为的函数!

 

实例分析2

   将实例分析1的函数的自变量用替换,则就是《电路》中的方波信号。如下图所示:

                                                   图1 方波函数

    在实例分析1中,已经计算出了的值,在此基础上,根据式(18)就可以计算出,而。将Matlab编程1的第3个文件的代码修改补充为如下:

Matlab编程2

clear
clc
syms x n 
% f=x^2+x^3  
f=x/abs(x);
T=2*pi;
w0=2*pi/T;
t=[-5:0.01:5];
a0=fourieran(f,2*pi, 0); 
for n=1:15      
    a(n)=fourieran(f,T, n); 
end
for n=1:15      
    b(n)=fourierbn(f,T, n); 
end
%计算相位
for n=1:15      
    g(n)=-atan(b(n)/a(n)); %由于b(n)/a(n)<0,因此g取负值,在前面加“-”。
end
%计算振幅
for n=1:15      
    A(n)=sqrt(a(n)*a(n)+b(n)*b(n)); 
end
figure(1)
f=A(1)*cos(1*w0*t+g(1))*0;
for n=1:2:15      
   fn=A(n)*cos(n*w0*t+g(n));
   f=f+fn;
   plot(t,fn); 
   hold on;
end
plot(t,f,'r');
% t=[-5:0.01:5];
hold on
plot(t,square(t));
plot(t,0,'k');
hold on
plot(0,t,'k');
set(gcf,'color','w');
xlabel('t')
ylabel('f(t)')
title('15次谐波合成曲线')
figure(2)
subplot(1,2,1);
bar(double(A))
title('幅度频谱')
ylabel('An');
xlabel('nw0');
subplot(1,2,2);
bar(double(g))
title('相位频谱')
ylabel('g');
xlabel('nw0');
set(gcf,'color','w');

    运行程序,得到图2、图3的结果:


                                                   图2 5次谐波合成曲线


                                                          图3 15次谐波合成曲线


                                                    图4 矩形波频谱

    在前面,我们讨论了周期函数的傅立叶级数,那么非周期函数应该怎样展开呢?

    对于非周期函数,虽不能进行傅立叶级数展开,但是可以进行傅立叶变换

   为了表示周期函数与非周期函数的区别,用表示周期函数表示非周期函数,并且用替换,则式(11)和式(12)重写为如下形式

--------------------------(27)

    将非周期函数看作是由周期函数时转化来的,由式(27)得


---------------(28)

    令,则式(28)可改为

-------------------------(29)

    这是一个和式的极限,按照积分的定义,在一定条件下,式(29)可写为

------------------------(30)

    注意:代替了!

    傅立叶积分定理:如果上的任一有限区间满足Dirichlet条件,且在上绝对可积,即,则式(30)成立。式(30)被称为傅立叶积分公式

    令式(30)中间的积分为

---------------------(31)

    将式(31)代入式(30),得

---------------------(32)

    式(31)和式(32)就是传说中的傅立叶变换傅立叶反变换

    傅立叶变换物理意义

    对比式(32)和式(27),由于是离散频谱,因此是连续频谱幅度频谱相位频谱。在《复变函数与积分变换》一书中还提到也称为频谱密度函数。至于这个密度函数和《概率论》中的密度函数是否为同一概念,还有待追究。

    说明:由于式(32)和式(27)都是复数形式,因此其物理意义不明显,但是他们都是直接或者间接的源于式(16),因此具体的物理意义还要看回式(16)。通常我们需要求的是式(31),但它是一个复数结果,如果不明白它的物理意义,那么就不知如何对得到的结果进行合理的分析。

    在《数字图像处理与分析》一书中,还提出了如下的傅立叶变换与反变换形式:

---------------------------(33)

    此外,还将一维函数的傅立叶变换推广到了二维函数,如果满足Dirichlet条件,则它的傅立叶变换与反变换为

------------------(34)


    实例分析3

    求矩形脉冲函数)的傅立叶变换及傅立叶积分表达式。

解:

--------------------------(35)

   振幅频谱为

---------------------------------------(36)

    相位频谱为

--------------------(37)

    Matlab编程3

    Matlab中没有直接傅立叶变换函数,因此需要自己编程实现。(注意:Matlab中自带了离散傅立叶变换的函数)

clear 
clc
syms x t d
f=0.5*((x+1)/abs(x+1)-(x-1)/abs(x-1)); %题目中的模拟
F=exp(-i*x*t);%式(33)中第一行最右边一个积分中的积分函数
Fw=int(F,t,-1,1);  %积分,这里设定积分区间为[-1,1]
figure(1)
ezplot(f) % 画原函数图
axis([-5 5 0, 2]);
ylabel('f(t)');
xlabel('t');
set(gcf,'color','w');
% figure(2)
ezplot(abs(Fw),-10,10) %画幅度频谱图
ylabel('|F(w)|');
xlabel('w');
grid on
set(gcf,'color','w');

    运行结果:


                                                                        图5 原函数图


                                                             图6 幅度频谱图

    结果分析:对比图6和图4,可以发现图4是离散的,图6是连续的,傅立叶级数和傅立叶变换频谱的最大区别,其它的都一样。

    上面讨论了连续的傅立叶变换,接下来就到了离散的傅立叶变换了!

    在图像处理中,很少使用时间作为自变量,而更多使用的是;同时频率也不再使用,而更多使用的是。其实这和《高等数学》的习惯是一致的。将式(33)重写为如下形式:

-------------------------(38)

    根据式(38),可以将连续的傅立叶变换转化为离散的傅立叶变换(DFT):

-----------------------(39)

或者

--------------------(40)

或者

----------------------------(41)

    说明:

(1)的采样点个数;

(2)关于前的系数可以是,只要的系数之乘积要为即可!

    同理,对于根据式(34)可得二维的离散傅立叶变换和反变换为:

--------------------------(42)

或者

----------------------------(43)

或者

--------------------(44)

    说明:

(1)方向的采样个数,方向的采样点个数;

(2)关于前的系数可以是,只要的系数之乘积要为即可!

    在《MATLAB数字图像处理》一书中,还给出了另外一种形式: 

-----------------------------(45) 

    二维离散傅立叶变换物理意义

    式(42)、式(43)、式(44)以及式(45)中的频域变量单位为弧度/采样单元。其中,式(42)、式(43)、式(44)中。二维离散傅立叶反变换说明可以表示为无限多项不同频率的复指数之和,而不同频率点所占的比例有幅度决定!


   Matlab编程4

    对于离散傅立叶变换,Matlab已经自带了函数fft、fft2。这里为了加深对离散傅立叶变换的理解,依据式(44)编写离散傅立叶变换程序如下。

clear 
clc
I=imread('pic.jpg'); %二维离散傅立叶变换通常使用在图像分析中,因此这里使用图像来作为实例
imshow(I);
I=rgb2gray(I); %在进行二维离散傅立叶变换前,必须先进行灰度化
I=double(I);
[M,N]=size(I);
 for u=1:M %以下就是根据式(44)进行编程。为什么是式(44)而不是式(42)呢?因为经过对比发现,式(44)的计算结果和fft2一致!
     for v=1:N
        temp=0; %一个临时变量,用于累加
        for x=1:M
            for y=1:N
                temp=temp+I(x,y)*exp(-i*2*pi*((u-1)*(x-1)/M+(v-1)*(y-1)/N));
            end
        end
        myfft(u,v)=temp;
    end
end

    结果分析

    经过测试,发现上述程序的结果和使用fft2函数得到的结果是一样的。但是,上面程序运行速度非常的慢,运行了30多分钟,还没有计算完毕!而使用fft2,计算过程是瞬间的事情。fft,就是快速傅立叶变换




参考资料

《高等数学》_广东科技出版社

《复变函数与积分变换》_第三版_华中科技大学数学系_高等教育出版社

《数字图像处理与分析》_北京航空航天大学出版社

《电路》_第5版_高等教育出版社

《概率论》_第二版_中国农业出版社

《MATLAB数字图像处理》_第2版_机械工业出版社

三角级数_维基百科

傅立叶级数_百度百科

傅立叶变换_百度百科

离散傅里叶变换_百度百科

MATLAB积分方法

傅立叶变换的物理意义

图像傅立叶变换(二维傅立叶变换fourier, 二维DFT, 2d-fft)的原理和物理意义

快速傅里叶变换FFT的Matlab实现

实现快速傅立叶变换的程序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OneSea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值