信号与系统实验报告
中南大学
信号与系统试验报告
姓名: 学号:
专业班级:自动化
实验一 基本信号的生成
1.实验目的
学会使用MATLAB产生各种常见的连续时间信号与离散时间信号; 通过MATLAB中的绘图工具对产生的信号进行观察,加深对常用信号的
理解;
熟悉MATLAB的基本操作,以及一些基本函数的使用,为以后的实验奠定
基础.
2.实验内容
⑴ 运行以上九个例子程序,掌握一些常用基本信号的特点及其MATLAB实现方法;改变有关参数,进一步观察信号波形的变化. ⑵ 在 k[10:10] 范围内产生并画出以下信号:
a) f1[k][k]; b) f2[k][k+2]; c) f3[k][k-4]; d) f4[k]2[k+2][k-4].
源程序:
k=—10:10;
f1k=[zeros(1,10),1,zeros(1,10)]; subplot(2,2,1) stem(k,f1k)
title(’f1[k]')
f2k=[zeros(1,8),1,zeros(1,12)]; subplot(2,2,2) stem(k,f2k)
title('f2[k]’)
f3k=[zeros(1,14),1,zeros(1,6)]; subplot(2,2,3) stem(k,f3k)
title(’f3[k]’) f4k=2*f2k-f3k; subplot(2,2,4) stem(k,f4k) title('f4[k]’)
⑶ 在 k[0:31]范围内产生并画出以下信号:
a) f1[k]sin4kcos4k; b) f2[k]cos24k; c) f3[k]sin4kcos8k。
请问这三个信号的基波周期分别是多少? 源程序:
k=0:31;
f1k=sin(pi/4*k)。*cos(pi/4*k); subplot(3,1,1) stem(k,f1k) title('f1[k]') f2k=(cos(pi/4*k)).^2; subplot(3,1,2) stem(k,f2k)
title('f2[k]')
f3k=sin(pi/4*k).*cos(pi/8*k); subplot(3,1,3) stem(k,f3k)
title(’f3[k]’)
其中f1[k]的基波周期是4, f2[k]的基波周期是4, f3[k]的基波周期是16.
实验二 信号的基本运算
1.实验目的
学会使用MATLAB完成信号的一些基本运算;
了解复杂信号由基本信号通过尺度变换、翻转、平移、相加、相乘、差
分、求和、微分及积分等运算来表达的方法;
进一步熟悉MATLAB的基本操作与编程,掌握其在信号分析中的运用特点
与使用方式。
2.实验内容
⑴ 运行以上三个例题程序,掌握信号基本运算的MATLAB实现方法;改变有关参数,考察相应信号运算结果的变化特点与规律。 ⑵ 已知信号f(t)如下图所示:
给定信号f(t)21.81.61.41.2f(t)10.80.60.40.20-4-3-2-1 0t1234a) 用MATLAB编程复现上图; %作业题2 a: t=—6:0。001:6; ft1=tripuls(t,6,0.5); subplot(2,1,1) plot(t,ft1) title(’f(t)')
b) 画出f(22t)的波形; %b
t=—6:0。001:6;
ft1=tripuls(2*(1—t),6,0.5); %subplot(1,1,1) plot(t,ft1) title('f(2*(1-t)’)
(t)c) 画出dfdt的波形;
%c
h=0。001;t=-6:h:6; yt=tripuls(t,6,0.5); y1=diff(yt)*1/h; plot(t(1:length(t)—1),y1)
title(’df(t)/dt’)
d) 画出f()d的波形.
t%d
t=-6:0。1:6; for x=1:length(t)
y2(x)=quad('tripuls(t,6,0.5)',—3,t(x)); end plot(t,y2)
title(’integral of f(t)')
实验三 系统的时域分析
1.实验目的
学习并掌握连续时间系统的零状态响应、冲激响应和阶跃响应的MATLAB
求解方法;
学习并掌握离散时间系统的零状态响应、冲激响应和阶跃响应的MATLAB
求解方法;
进一步深刻理解连续时间系统和离散时间系统的系统函数零极点对系
统特性的影响;
学习并掌握卷积的MATLAB计算方法。 2.实验内容
⑴ 运行以上五个例题程序,掌握求解系统响应的MATLAB分析方法;改变模型参数,考察系统响应的变化特点与规律. ⑵ 设离散系统可由下列差分方程表示:
y[k]-y[k-1]+0.9y[k-2]f[k]
计算k[20:100]时的系统冲激响应。 源程序:
k=—20:100; a=[1 -1 0。9]; b=[1];
h=impz(b,a,k); stem(k,h);
xlabel(’Time(sec)’) ylabel('y(t)')
⑶ 设h[k](0.9)ku(k),输入f[k]u[k]u[k10],求系统输出y[k]f[k]h[k]。 (取k[10:50])
源程序:
k=—10:50;
uk=[zeros(1,10),ones(1,51)]; u1k=[zeros(1,20),ones(1,41)]; hk=0.9.^k。*uk; fk=uk—u1k; yk=conv(hk,fk);
stem(0:length(yk)—1,yk);
⑷ 已知滤波器的传递函数:
H(z)0.221 10.8z输入信号为f(t)2sin(0.05t)(t),(t)为随机信号。试绘出滤波器的输出信
号波形。(取t[0:100])
源程序:
R=101;
d=rand(1,R)-0。5; t=0:100;
s=2*sin(0。05*pi*t); f=s+d;
subplot(2,1,1);
plot(t,d,'g-.’,t,s,'b-—’,t,f,'r-'); xlabel(’Time index t');
legend('d[t]','s[t]’,’f[t]'); title(’处理前的波形’) b=[0.22 0];a=[1 —0。8]; y=filter(b,a,f); subplot(2,1,2);
plot(t,s,’b—-',t,y,'r-’); xlabel('Time index t'); legend('s[t]’,’y[t]'); title('滤波器输出波形’)
实验四 周期信号的频域分析
1.实验目的
掌握周期信号傅立叶级数分解与合成的计算公式
掌握利用MATLAB实现周期信号傅立叶级数分解与综合方法 理解并掌握周期信号频谱特点
2.实验内容
1、仿照例程,实现下述周期信号的傅立叶级数分解与合成: f(t)
1
O -4 -3 1
要求:
(a)首先,推导出求解a0,an,bn的公式,计算出前10次系数;
(b)利用MATLAB求解a0,an,bn的值,其中an,bn求解前10次系数,并给出
利用这些系数合成的信号波形.
(a)设周期信号f(t)的周期为T1,角频率12f1信号可以展开成傅立叶级数. (1)三角形式傅立叶级数
f(t)a0a1cos1tb1sin1ta2cos2tb2sin2t...ancosntbnsinnt...4 5 t 2,且满足狄里赫利条件,则该周期T1a0ancos(n1t)bnsin(n1t)n1n1
1a0T12anT12bnT1T12T12T12T12T1f(t)dtf(t)cosn1tdtf(t)sinn1tdt
2T12
(2)指数形式傅立叶级数
f(t)Fnenjn1t,n0,1,2,3, Fn1T1f(t)eT12T12jnt1dt
(b)求解a0,an,bn及合成信号波形所用程序:
function [A_sym,B_sym]=CTFShchsym
% 采用符号计算求一个周期内连续时间函数f的三角级数展开系数,再用这些
% 展开系数合成连续时间函数f。傅立叶级数 % 函数的输入输出都是数值量 % Nf=6 谐波的阶数 % Nn 输出数据的准确位数
% A_sym 第1元素是直流项,其后元素依次是1,2,3..。次谐波cos项展开系数 % B_sym 第2,3,4,.。.元素依次是1,2,3..。次谐波sin项展开系数 % tao=1 tao/T=0。2 syms t n k x T=4; tao=T/4; a=-1。5; if nargin〈4 Nf=10; end
if nargin〈5 Nn=32; end
x=time_fun_x(t);
A0=int(x,t,a,T+a)/T; %求出三角函数展开系数A0
As=2/T*int(x*cos(2*pi*n*t/T),t,a,T+a); %求出三角函数展开系数As Bs=2/T*int(x*sin(2*pi*n*t/T),t,a,T+a); %求出三角函数展开系数Bs A_sym(1)=double(vpa(A0,Nn)); %获取串数组A0所对应的ASC2码数值数组
for k=1:Nf
A_sym(k+1)=double(vpa(subs(As,n,k),Nn)); %获取串数组A所对应的ASC2码数值数组 B_sym(k+1)=double(vpa(subs(Bs,n,k),Nn)); %获取串数组B所对应的ASC2码数值数组 end ; if nargout==0 c=A_sym; disp(c); %输出c为三角级数展开系数:第1元素是直流项,其后元素依次是1,2,3。。。次谐波cos项展开系数 d=B_sym;
disp(d); %输出d为三角级数展开系数: 第2,3,4,.。。元素依次是1,2,3..。次谐波sin项展开系数
t=-3*T:0。01:3*T;
f0=c(1); %直流
f1=c(2).*cos(2*pi*1*t/T)+d(2).*sin(2*pi*1*t/T); % 基波 f2=c(3).*cos(2*pi*2*t/T)+d(3)。*sin(2*pi*2*t/T); % 2次谐波 f3=c(4).*cos(2*pi*3*t/T)+d(4).*sin(2*pi*3*t/T); % 3次谐波 f4=c(5)。*cos(2*pi*4*t/T)+d(5).*sin(2*pi*4*t/T); % 4次谐波 f5=c(6)。*cos(2*pi*5*t/T)+d(6).*sin(2*pi*5*t/T); % 5次谐波 f6=c(7)。*cos(2*pi*6*t/T)+d(7).*sin(2*pi*6*t/T); % 6次谐波 f7=c(8)。*cos(2*pi*7*t/T)+d(8).*sin(2*pi*7*t/T); % 7次谐波
f8=c(9).*cos(2*pi*8*t/T)+d(9)。*sin(2*pi*8*t/T); % 8次谐波
f9=c(10).*cos(2*pi*9*t/T)+d(10)。*sin(2*pi*9*t/T); % 9次谐波 f10=c(11)。*cos(2*pi*10*t/T)+d(11).*sin(2*pi*10*t/T); % 10次谐波 f11=f0+f1+f2; % 直流+基波+2次谐波
f12=f11+f3; % 直流+基波+2次谐波+3次谐波
f13=f12+f4+f5+f6; % 直流+基波+2次谐波+3次谐波+4次谐波+5次谐波+6次谐波 f14=f13+f7+f8+f9+f10; %0~10次 subplot(2,2,1)
plot(t,f0+f1),hold on
y=time_fun_e(t); %调用连续时间函数—周期矩形脉冲 plot(t,y,'r:')
title('直流+基波’)
axis([—8,8,—0.5,1。5]) subplot(2,2,2)
plot(t,f12),hold on y=time_fun_e(t); plot(t,y,'r:’)
title('1—3次谐波+直流') axis([-8,8,-0。5,1。5]) subplot(2,2,3) plot(t,f13),hold on y=time_fun_e(t); plot(t,y,'r:’)
title('1-6次谐波+直流’) axis([—8,8,—0.5,1.5]) subplot(2,2,4) plot(t,f14),hold on y=time_fun_e(t); plot(t,y,’r:')
title(’1-10次谐波+直流’)
axis([—8,8,-0。5,1。5]) hold off end
function y=time_fun_e(t)
% 该函数是CTFShchsym.m的子函它由符号函数和表达式写成 a=1。5; T=4; h=1; tao=T/4;
t=-3*T:0.01:3*T;
e1=1/2+1/2。*sign(t—0.5+tao/2); e2=1/2+1/2.*sign(t—0。5—tao/2);
y=h。*(e1—e2); %连续时间函数-周期矩形脉冲
function x=time_fun_x(t)
% 该函数是CTFShchsym。m的子函数。它由符号变量和表达式写成。 h=1;
x1=sym(’Heaviside(t)’)*h; x=x1-sym(’Heaviside(t—1)’)*h;
2、已知周期为T=4的三角波,在第一周期(-2〈t<2)内表示成:x(t)1t,试用MATLAB求该信号的傅立叶级数,并绘制它的频谱图.将它的频谱与方波的频谱图做比较。
function [A_sym,B_sym]=CTFSshbpsym(T,Nf)
% 采用符号计算求[0,T]内时间函数的三角级数展开系数。 % 函数的输入输出都是数值量 % Nn 输出数据的准确位数
% A_sym 第1元素是直流项,其后元素依次是1,2,3。。.次谐波cos项展开系数 % B_sym 第2,3,4,.。。元素依次是1,2,3...次谐波sin项展开系数 % T T=m*tao, 信号周期 % Nf 谐波的阶数
% m (m=T/tao)周期与脉冲宽度之比,如m=4,8,16,100等
% tao 脉宽:tao=T/m syms t n y
if nargin〈3
Nf=input(’please Input 所需展开的最高谐波次数:Nf=’); end
T=input('please Input 信号的周期T='); if nargin<5 Nn=32; end
y=time_fun_s(t);
A0=2/T*int(y,t,0,T/2);
As=2/T*int(y*cos(2*pi*n*t/T),t,0,T/2); Bs=2/T*int(y*sin(2*pi*n*t/T),t,0,T/2); A_sym(1)=double(vpa(A0,Nn)); for k=1:Nf
A_sym(k+1)=double(vpa(subs(As,n,k),Nn)); B_sym(k+1)=double(vpa(subs(Bs,n,k),Nn)); end
if nargout==0
An=fliplr(A_sym); %对A_sym阵左右对称交换 An(1,k+1)=A_sym(1); %A_sym的1*k阵扩展为1*(k+1)阵 An=fliplr(An); %对扩展后的S1阵左右对称交换回原位置 Bn=fliplr(B_sym); %对B_sym阵左右对称交换
Bn(1,k+1)=0; %B_sym的1*k阵扩展为1*(k+1)阵 Bn=fliplr(Bn); %对扩展后的S3阵左右对称交换回原位置
FnR=An/2-i*Bn/2; % 用三角函数展开系数A、B值合成付里叶指数系数 FnL=fliplr(FnR); N=Nf*2*pi/T; k2=-N:2*pi/T:N;
Fn=[FnL,FnR(2:end)];
%subplot(3,3,3)
%x=time_fun_e(t); % 调用连续时间函数-周期矩形脉冲
subplot(2,1,1)
stem(k2,abs(Fn)); %画出周期矩形脉冲的频谱(T=M*tao) title('连续时间函数周期三角波脉冲的双边幅度谱') axis([—80,80,0,0。12]) line([—80,80],[0,0],’color','r') line([0,0],[0,0。12],’color',’r’) end
function x=time_fun_e(t)
% 该函数是CTFSshbpsym。m的子函数。它由符号变量和表达式写成。 % t 是时间数组 % T 是周期 duty=tao/T=0。2 T=5;
t=—2*T:0.01:2*T; tao=T/5;
x=rectpuls(t,tao); %产生一个宽度tao=1的矩形脉冲 subplot(2,2,2) plot(t,x) hold on
x=rectpuls(t-5,tao); %产生一个宽度tao=1的矩形脉,中心位置在t=5处 plot(t,x) hold on
x=rectpuls(t+5,tao); %产生一个宽度tao=1的矩形脉,中心位置在t=-5处 plot(t,x)
title('周期为T=5,脉宽tao=1的矩形脉冲') axis([—10,10,0,1.2])
function y=time_fun_s(t) syms t
y=1—abs(t);
x1=sym('Heaviside(t+2)');
x=x1—sym('Heaviside(t—2)’); y=y*x; ezplot(t,y,[-10,10]) grid
因篇幅问题不能全部显示,请点此查看更多更全内容