一、实验目的
1、理解傅里叶变换的MATLAB实现方法;
2、掌握系统频率响应特性的计算方法和特性曲线的绘制方法,理解具有不同频率响应特性的滤波器对信号的滤波作用。
3、掌握用MATLAB语言进行系统频响特性分析的方法。
二、实验原理
1、傅立叶变换的MATLAB实现
信号f(t)的傅里叶变换与反变换公式为:
傅里叶变换存在的充分条件是:
在MATLAB中有两种实现傅里叶变换的方法,一种是利用MATLAB中的专用函数直接求解,另一种是傅里叶变换的数值计算实现法。
(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)
MATLAB中实现傅里叶反变换的函数
f =ifourier( F ) 对F(w)进行傅里叶反变换,其结果为f(t)
f=ifourier(F,u) 对F(w)进行傅里叶反变换,其结果为f(u)
f=ifourier( F,v,u ) 对F(v)进行傅里叶反变换,其结果为f(u)
注意:
(1)在调用函数fourier( )及ifourier( )之前,要用syms命令将所有需要用到的变量(如t,u,v,w)定义成符号变量,或用符号定义符sym将其定义为符号表达式。
(2)采用fourier( )及fourier( )得到的返回函数,仍然为符号表达式。在对其作图时要用ezplot( )函数,而不能用plot()函数。
(3)fourier( )及fourier( )函数的应用有很多局限性,如果在返回函数中含有δ(ω)等函数,则ezplot( )函数无法作出图。用fourier( )函数对某些信号进行变换时,其返回函数如果包含一些不能直接表达的式子,也无法作图。另外,在很多场合,f(t)不能表示成符号表达式,此时只能用数值计算法进行傅氏变换。
例1:求 的傅立叶变换
matlab程序如下
clear all
syms t
F=fourier(exp(-2*abs(t)))
例2:求门函数f(t)=ε(t+1)-ε(t-1)的傅里叶变换,并画出幅度频谱图。
matlab程序如下
clear all
t0=-3;t1=3;t=t0:0.02:t1; % 定义时间范围
w0=-6*pi;w1=6*pi;w=w0:0.02:w1; % 定义频率范围
f=sym('heaviside(t+1)-heaviside(t-1)') % 定义符号函数f(t)
F=fourier(f) % 求f(t)的傅里叶变换
F=simple(F) % 化简F(jw)的表达式
f1=subs(f,t,'t'); % 将t数组代入f(t)后用f1表示
fmin=min(f1)-0.2;fmax=max(f1)+0.2; % 求f1的最大和最小值
Fv=subs(F,w,'w'); % 将w数组代入F(jw)后用Fv表示
F1=abs(Fv); % 求F(jw)的模
P1=angle(Fv); % 求F(jw)的相角
subplot(3,1,1),plot(t,f1); % 在第一幅图上画f(t)
ylabel('G2(t)'); grid on;
axis([t0,t1,fmin,fmax]);
Fmin=min(F1)-0.05; Fmax=max(F1)+0.05;
subplot(3,1,2);
plot(w,F1,'color','k'); % 在第二幅图上画|F(jw)|
ylabel('|F(jw)|');grid on;
axis([w0,w1,Fmin,Fmax]);
subplot(3,1,3);
plot(w,P1*180/pi,'color','k'); % 在第三幅图上画相位频谱
ylabel('相位(度)'); grid on;
运行程序结果图如下
(2) 傅里叶变换的数值计算实现法
数值计算方法实现连续时间信号的傅里叶变换,实质上是借助于MATLAB的强大数值计算功能进行的一种近似计算。其实现原理如下:
对于连续时间信号f(t),其傅里叶变换为:
其中τ为取样间隔,如果f(t)是时限信号,或者当|t|大于某个给定值时,f(t)的值已经衰减得很厉害,可以近似地看成是时限信号,则上式中的n取值就是有限的,假定为N,有:
若对频率变量ω进行取样,得:
通常取:
,其中ω0是要取的频率范围,或信号的频带宽度。采用matlab
实现上式时,其要点是要生成f(t)的N个样本值f (nτ)的向量,以及向量
,两向量的内积(即两矩阵的乘积)完成上式的傅里叶变换的数值计算。
注意:
时间取样间隔τ的确定,依据是τ 必须小于奈奎斯特(Nyquist)取样间隔。如果f(t)不是严格的带限信号,则根据实际计算的精度要求来确定一个适当的频率ω0为信号的带宽。
例3:用数值计算法实现上面门函数f(t)=ε(t+1)-ε(t-1)的傅里叶变换,并画出幅度频谱图。
分析:该信号的频谱F(jω)=2Sa(ω),第一个过零点频率为π,一般将此频率认为是信号的带宽。但考虑到F(jω)的形状(为抽样函数),假如将精度提高到该值的50倍,即取ω0=50ωB,F0=ω0 /2π则据此确定的取样间隔为:τ≤1/2F0 = 0.02
matlab程序如下
clear all
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=-M:M; w=k*W1/M; %频域采样数为M, w为频率正半轴的采样点
Fw=f t*exp(-j*t'*w)*R; %求傅氏变换F(jw)
FRw=abs(Fw); %取振幅
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,FRw) ;grid on; %画出振幅频谱的波形
xlabel ('w') ; ylabel ('F(w)');
运行程序结果如下
2、用matlab计算连续时间LTI系统的频率响应
频率特性是指系统在正弦信号激励下的稳态响应随频率变化的情况,包括响应的幅度随频率的变化情况和响应的相位随频率的变化情况两个方面。
f (t)、y(t)分别为系统的激励和响应,h(t)是系统的单位冲激响应,三者的关系如下:
时域:
频域:
或:
H(jω)为系统的频域数学模型,它实际上就是系统的单位冲激响应h(t)的傅里叶变换。即:
其中,׀H(jω)׀为幅度频率相应,反映信号经过系统之后,信号各频率分量的幅度变化情况,为相位特性,反映信号经过系统后,信号各频率分量在相位变换情况。
当系统的激励,则其响应为
若输入信号为正弦信号,即f(t) = sin(0t),则系统响应为
系统对某一频率分量的影响体现为,信号的幅度被׀H(jω)׀加权,信号的相位被移相。
关键是确定系统的频率响应。
matlab里面求系统频率响应的函数为freqs(),该函数可求出系统频率响应的数值解,并可绘出系统的幅频及相频响应曲线。
当系统的频率响应H(jω)是jω的有理多项式时,
matlab里面求系统频率响应的函数为freqs,该函数可直接计算系统的频率响应的数值解,并可绘出系统的幅频及相频响应曲线。其调用格式如下
(1)h=freqs(b,a,w) 该调用格式中,b和a分别对应于(7-7)式的向量[b1,b2,…,bm]和[a1,a2,…,an],w为形如w1:p:w2的冒号运算定义的系统频率响应的频率范围,w1为频率起始值,w2为频率终止值,p 为频率取样间隔。向量h为返回在向量w所定义的频率点上,系统频率响应的样值。
(2)[h,w]=freqs(b,a)
该调用格式将计算默认频率范围内200个频率点的系统频率响应的样值,并赋值给返回变量h,200个频率点记录在w中。
(3)[h,w]=freqs(b,a,n)
该调用格式将计算默认频率范围内n个频率点上系统频率响应的样值,并赋值给返回变量h,n个频率点记录在w中。
(4)freqs(b,a)
该格式并不返回系统频率响应的样值,而是以对数坐标的方式绘出系统的幅频响应和相频响应曲线。
举例说明如下:
a=[1 2 1]; b=[0 1]; h=freqs(b,a,0:0.5:2*pi);%计算0~2π频率范围内以间隔0.5取样的系统频率响应的样值;
例4:某连续时间LTI系统的微分方程如下
编写MATLAB程序绘制系统的幅度响应、相位响应、频率响应的实部和频率响应的虚部。
matlab程序如下
clear all
b=[1];
a=[1 3 2];
[H,w]=freqs(b,a);
Hm=abs(H);
phai=angle(H);
Hr=real(H);
Hi = imag(H);
subplot(2,2,1)
plot(w,Hm), grid on, title('Magnitude response'),
xlabel('Frequency in rad/sec')
subplot(2,2,3)
plot(w,phai); grid on; title('Phase response'); xlabel('Frequency in rad/sec')
subplot(2,2,2)
plot(w,Hr); grid on; title('Real part of frequency response'),
xlabel('Frequency in rad/sec')
subplot(2,2,4)
plot(w,Hi); grid on; title('Imaginary part of frequency response'),
xlabel('Frequency in rad/sec')
运行结果如下:
例5:已知一RC电路如图所示,系统的输入电压为f(t),输出信号为电阻两端的电压y(t),当RC=0.04,f(t)=cos5t+cos100t, 试求该系统的零状态响应y(t)
由图知其频率响应为
余弦信号cos(ω0t)通过LTI系统的零状态响应为
matlab程序如下
clear all
RC=0.04;
t=linspace(-2,2,1024);
w1=5;w2=100;
H1=j*w1/(j*w1+1/RC);
H2=j*w2/(j*w2+1/RC);
f=cos(5*t)+cos(100*t);
y=abs(H1)*cos(w1*t+angle(H1))+ abs(H2)*cos(w2*t+angle(H2));
subplot(2,1,1);
plot(t,f); ylabel('f(t)'); xlabel('Time(s)');
subplot(2,1,2);
plot(t,y); ylabel('y(t)'); xlabel('Time(s)');
三、实验内容
1.已知三个LTI系统的微分方程如下
系统1:
系统2:
系统3:
用matlab绘制幅度响应、相位响应、频率响应的实部和频率响应的虚部曲线图。
并分析系统具有什么滤波特性?
系统1:
程序如下:
clear all
b=[1];
a=[1 1 25];
[H,w]=freqs(b,a);
Hm=abs(H);
phai=angle(H);
Hr=real(H);
Hi = imag(H);
subplot(2,2,1)
plot(w,Hm), grid on, title('·ù¶ÈÏìÓ¦'),
xlabel('Frequency in rad/sec')
subplot(2,2,3)
plot(w,phai); grid on; title('ÏàλÏìÓ¦'); xlabel('Frequency in rad/sec')
subplot(2,2,2)
plot(w,Hr); grid on; title('频率响应的实部'),
xlabel('Frequency in rad/sec')
subplot(2,2,4)
plot(w,Hi); grid on; title('频率响应的虚部'),
xlabel('Frequency in rad/sec')
运行结果如下:
系统2:
程序如下:
clear all
b=[1 1];
a=[1 1];
[H,w]=freqs(b,a);
Hm=abs(H);
phai=angle(H);
Hr=real(H);
Hi = imag(H);
subplot(2,2,1)
plot(w,Hm), grid on, title('幅度响应'),
xlabel('Frequency in rad/sec')
subplot(2,2,3)
plot(w,phai); grid on; title('相位响应'); xlabel('Frequency in rad/sec')
subplot(2,2,2)
plot(w,Hr); grid on; title('频率响应的实部'),
xlabel('Frequency in rad/sec')
subplot(2,2,4)
plot(w,Hi); grid on; title('频率响应的虚部'),
xlabel('Frequency in rad/sec')
运行结果如下:
系统3:
程序如下:**
clear all
b=[262];
a=[10 48 148 306 401 262];
[H,w]=freqs(b,a);
Hm=abs(H);
phai=angle(H);
Hr=real(H);
Hi = imag(H);
subplot(2,2,1)
plot(w,Hm), grid on, title('幅度响应'),
xlabel('Frequency in rad/sec')
subplot(2,2,3)
plot(w,phai); grid on; title('相位响应'); xlabel('Frequency in rad/sec')
subplot(2,2,2)
plot(w,Hr); grid on; title('频率响应的实部'),
xlabel('Frequency in rad/sec')
subplot(2,2,4)
plot(w,Hi); grid on; title('频率响应的虚部'),
xlabel('Frequency in rad/sec')
运行结果如下:
2. 分别用傅里叶变换的数值计算法和调用专用函数编写MATLAB程序,计算
f(t)= 3e-2tε(t)的傅里叶变换。
程序如下:
clear all
syms t
F=fourier(3*exp(-2*t)*heaviside(t))
运行结果如下:
F =
3/(2 + w*1i)
3.已知一RC电路如图所示 系统的输入电压为f(t),输出信号为电阻两端的电压y(t).当R1=10kΩ , R2=30kΩ C=100µF,f(t)=cos50t+1, 试求该系统的零状态响应y(t)
程序如下:
clear all
RC=1;
t=linspace(-2,2,1024);
w1=50;
H1=j*w1/(j*w1+1/RC);
f=cos(50*t)+1;
y=abs(H1)*cos(w1*t+angle(H1))
subplot(2,1,1);
plot(t,f); ylabel('f(t)'); xlabel('Time(s)');
subplot(2,1,2);
plot(t,y); ylabel('y(t)'); xlabel('Time(s)');
运行结果如下:
四、 实验报告要求
1.简述实验目的和实验原理;
2.写出其对应的matlab程序;
3.计算相应的冲激响应、零状态响应及卷积积分的理论值,并与实验结果进行比较。
4.上机调试程序的方法及实验中的心得体会。
本次上级实验,我掌握了连续时间信号与系统的频域分析方法,从频域的角度对信号与系统的特性进行分析;掌握了连续时间信号傅里叶变换与傅里叶逆变换的实现方法;掌握了连续时间傅里叶变换的特点及应用;掌握了连续时间傅里叶变换的数值计算方法及绘制信号频谱的方法。熟悉了
(1).syms命令:定义符号变量
调用格式:
symsx,定义x为符号变量,可以直接使用。
symsxy,定义x和y为符号变量,可以直接使用。
(2).ezplot函数:实现一元函数的绘图。相比plot函数要制定自变量范围,ezplot 无需
数据准备,可以直接画图,尤其适用于符号函数。