信号与系统
班级:
学号:
姓名:
实验三    连续时间信号的频域分析
一、 实验目的
1.熟悉傅里叶变换的性质
2.熟悉常见信号的傅里叶变换
3.了解傅里叶变换的MATLAB实现方法
二、 实验原理
傅里叶变换是信号分析 的最重要的内容之一。从已知信号求出相应的频谱函数的数学表示为:
的傅里叶变换存在的充分条件是在无限区间内绝对可积,即满足下式:
但上式并非傅里叶变换存在的必要条件。在引入广义函数概念之后,使一些不满足绝对可积条件的函数也能进行傅里叶变换。
    傅里叶反变换的定义为:
      在这一部分的学习中,大家都体会到了这种数学运算的麻烦。在MATLAB语言中有专门对信号进行正反傅里叶变换的语句,使得傅里叶变换很容易在MATLAB中实现。在MATLAB中实现傅里叶变换的方法有两种,一种是利用MATLAB中的Symbolic Math Toolbox提供的专用函数直接求解函数的傅里叶变换和傅里叶反变换,另一种是傅里叶变换的数值计算实现法。下面分别介绍这两种实现方法的原理。
1.直接调用专用函数法
在MATLAB中实现傅里叶变换的函数为:
        F=fourier( f )      对f(t)进行傅里叶变换,其结果为F(w)
        F=fourier(f,v)      对f(t)进行傅里叶变换,其结果为F(v)
        F=fourier( f,u,v )  对f(u)进行傅里叶变换,其结果为F(v)
傅里叶反变换
        f=ifourier( F )      对F(w)进行傅里叶反变换,其结果为f(x)
         f=ifourier(F,U)    对F(w)进行傅里叶反变换,其结果为f(u)
        f=ifourier( F,v,u )  对F(v)进行傅里叶反变换,其结果为f(u)
matlab求傅里叶变换
    由于MATLAB中函数类型非常丰富,要想了解函数的意义和用法,可以用mhelp命令。如在命令窗口键入:mhelp fourier回车,则会得到fourier的意义和用法。
 注意:
(1)在调用函数fourier( )及ifourier( )之前,要用syms命令对所有需要用到的变量(如t,u,v,w)等进行说明,即要将这些变量说明成符号变量。对fourier( )中的f及ifourier( )中的F也要用符号定义符sym将其说明为符号表达式。
(2)采用fourier( )及fourier( )得到的返回函数,仍然为符号表达式。在对其作图时要用ezplot( )函数,而不能用plot()函数。
(3)fourier( )及fourier( )函数的应用有很多局限性,如果在返回函数中含有δ(ω)等函数,则ezplot( )函数也无法作出图来。另外,在用fourier( )函数对某些信号进行变换时,其返回函数如果包含一些不能直接表达的式子,则此时当然也就无法作图了。这是fourier( )函数的一个局限。另一个局限是在很多场合,尽管原时间信号f(t)是连续的,但却不能表示成符号表达式,此时只能应用下面介绍的数值计算法来进行傅氏变换了,当然,大多数情况下,用数值计算法所求的频谱函数只是一种近似值。
  求门函数的傅里叶变换,并画出幅度频谱图
MATLAB程序如下:
syms t w                                              %定义两个符号变量t,w
Gt=sym('Heaviside(t+1)-Heaviside(t-1)');    %产生门宽为2的门函数
Fw=fourier(Gt,t,w);                                %对门函数作傅氏变换求F(jw)
FFw=maple('convert',Fw,'piecewise');          %数据类型转换,转为分段函数,此处可以去掉
FFP=abs(FFw);                                      %求振幅频谱| F(jw)|
ezplot(FFP,[-10*pi 10*pi]);grid;                  %绘制函数图形,并加网格
axis([-10*pi 10*pi 0 2.2])                        %限定坐标轴范围
运行结果:Fw= exp(i*w)*(pi*Dirac(w)-i/w)-exp(-i*w)*(pi*Dirac(w)-i/w)
% Dirac(w)为δ(ω),即傅立叶变换结果中含有奇异函数,故绘图前需作函数类型转换
FFw= -i*exp(i*w)/w+i*exp(-i*w)/w        % FFw为复数
          FFP= abs(-i*exp(i*w)/w+i*exp(-i*w)/w)    %求FFw的模值
  求函数的傅里叶反变换f(t)
    MATLAB程序如下:
syms t w                                %定义两个符号变量t,w
Fw=sym('1/(1+w^2)');                %定义频谱函数F(jw)
ft=ifourier(Fw,w,t);                  %对频谱函数F(jw)进行傅氏反变换
运行结果:
ft =
1/2*exp(-t)*Heaviside(t)+1/2*exp(t)*Heaviside(-t)
2、傅里叶变换的数值计算实现法
严格说来,如果不使用symbolic工具箱,是不能分析连续时间信号的。采用数值计算方法实现连续时间信号的傅里叶变换,实质上只是借助于MATLAB的强大数值计算功能,特别是其强大的矩阵运算能力而进行的一种近似计算。傅里叶变换的数值计算实现法的原理如下:
对于连续时间信号f(t),其傅里叶变换为:
其中τ为取样间隔,如果f(t)是时限信号,或者当|t|大于某个给定值时,f(t)的值已经衰减得很厉害,可以近似地看成是时限信号,则上式中的n取值就是有限的,假定为N,有:
                   
若对频率变量ω进行取样,得:
 
通常取:,其中是要取的频率范围,或信号的频带宽度。采用MATLAB实现上式时,其要点是要生成f(t)的N个样本值的向量,以及向量,两向量的内积(即两矩阵的乘积),结果即完成上式的傅里叶变换的数值计算。
注意:时间取样间隔τ的确定,其依据是τ必须小于奈奎斯特(Nyquist)取样间隔。如果f(t)不是严格的带限信号,则可以根据实际计算的精度要求来确定一个适当的频率为信号的带宽。
  用数值计算法实现上面门函数的傅里叶变换,并画出幅度频谱图.
    分析: 该信号的频谱为,其第一个过零点频率为π,一般将此频率认为是信号的带宽。但考虑到的形状(为抽样函数),假如将精度提高到该值的50倍,即取,则据此确定的Nyquist取样间隔为:
MATLAB程序如下:
R=0.02;                                %取样间隔τ=0.02
t=-2:R:2;                              % t为从-2到2,间隔为0.02的行向量,有201个样本点
ft=[zeros(1,50),ones(1,101),zeros(1,50)];   % 产生f(t)的样值矩阵(即f(t)的样本值组成的行向量)
W1=10*pi;                                %取要计算的频率范围
M=500; k=0:M; w=k*W1/M;        %频域采样数为M, w为频率正半轴的采样点
Fw=ft*exp(-j*t'*w)*R;                  %求傅氏变换F(jw)             
FRw=abs(Fw);                          %取振幅
W=[-fliplr(w),w(2:501)] ;                %由信号双边频谱的偶对称性,利用fliplr(w)形成负半轴的点,% w(2:501)为正半轴的点,函数fliplr(w)对矩阵w行向量作180度反转
FW=[fliplr(FRw),FRw(2:501)];        %形成对应于2M+1个频率点的值
Subplot(2,1,1) ; plot(t,ft) ;grid;          %画出原时间函数f(t)的波形,并加网格
xlabel('t') ; ylabel('f(t)');                  %坐标轴标注
title('f(t)=u(t+1)-u(t-1)');                  %文本标注
subplot(2,1,2) ; plot(W,FW) ;grid on;    %画出振幅频谱的波形,并加网格
xlabel ('W') ; ylabel ('F(W)');             %坐标轴标注
title('f(t)的振幅频谱图');                  %文本标注
运行结果如下:
三、 实验内容
1.编程实现下列信号的幅度频谱
(1)  求出的频谱函数F1(),请将它与上面门宽为2的门函数的频谱进行比较,观察两者的特点,说明两者的关系。
MATLAB程序如下:
syms t w                                              %定义两个符号变量t,w
Gt=sym('Heaviside(2*t+1)-Heaviside(2*t-1)');    %产生门宽为2的门函数
Fw=fourier(Gt,t,w);                                %对门函数作傅氏变换求F(jw)
FFw=maple('convert',Fw,'piecewise');            %数据类型转换,转为分段函数,此处可以去掉
FFP=abs(FFw);                                      %求振幅频谱| F(jw)|

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。