信号与系统实验报告.docx
《信号与系统实验报告.docx》由会员分享,可在线阅读,更多相关《信号与系统实验报告.docx(26页珍藏版)》请在冰豆网上搜索。
信号与系统实验报告
信号与系统
实验报告
学院:
学号:
姓名:
实验一基本信号的生成
1.实验目的
●学会使用MATLAB产生各种常见的连续时间信号与离散时间信号;
●通过MATLAB中的绘图工具对产生的信号进行观察,加深对常用信号的理解;
●熟悉MATLAB的基本操作,以及一些基本函数的使用,为以后的实验奠定基础。
3.实验内容
⑴运行以上九个例子程序,掌握一些常用基本信号的特点及其MATLAB实现方法;改变有关参数,进一步观察信号波形的变化。
⑵在
范围内产生并画出以下信号:
a)
;
%program2.1
;
k=-10:
10;
delta=[zeros(1,10),1,zeros(1,10)];
%或者:
delta=[(k-0)==0];
stem(k,delta)
b)
;
k=-10:
50;
uk=[zeros(1,10),ones(1,51)];
hk=(0.9).^k.*uk;
fk=[zeros(1,10),ones(1,10),zeros(1,41)];
yk=conv(fk,hk);
N=length(yk);
stem(0:
N-1,yk)
c)
;
%program2.3
;
k=-10:
10;
delta=[zeros(1,14),1,zeros(1,6)];
%或者:
delta=[(k-4)==0];
stem(k,delta)
d)
。
%program2.4
。
k=-10:
10;
y1=[zeros(1,8),1,zeros(1,12)];
y2=[zeros(1,14),1,zeros(1,6)];
y=2*y1-y2;
stem(k,y)
⑶在
范围内产生并画出以下信号:
a)
;
%program3.1
k=0:
31;
fk1=sin(pi/4*k);
fk2=cos(pi/4*k);
fk=fk1.*fk2;
stem(k,fk)
b)
;
%program3.2
k=0:
31;
fk1=cos(pi/4*k);
fk2=cos(pi/4*k);
fk=fk1.*fk2;
stem(k,fk)
c)
。
%program3.3
k=0:
31;
fk1=sin(pi/4*k);
fk2=cos(pi/8*k);
fk=fk1.*fk2;
stem(k,fk)
实验二信号的基本运算
1.实验目的
●学会使用MATLAB完成信号的一些基本运算;
●了解复杂信号由基本信号通过尺度变换、翻转、平移、相加、相乘、差分、求和、微分及积分等运算来表达的方法;
●进一步熟悉MATLAB的基本操作与编程,掌握其在信号分析中的运用特点与使用方式。
2.实验内容
⑴运行以上三个例题程序,掌握信号基本运算的MATLAB实现方法;改变有关参数,考察相应信号运算结果的变化特点与规律。
⑵已知信号
如下图所示:
a)用MATLAB编程复现上图;
%programexa_5.m,tripuls
t=-4:
0.001:
4;
ft=2*tripuls(t,6,0);
plot(t,ft)
b)画出
的波形;
%programexa_5.m,tripuls
t=-4:
0.001:
4;
ft=2*tripuls(2-2*t,6,0);
plot(t,ft)
c)画出
的波形;
functionyt=functri(t)
yt=2*tripuls(t,6,0);
%program2.3
h=0.001;t=-4:
h:
4;
y1=diff(functri(t))*1/h;
plot(t(1:
length(t)-1),y1)
title('df(t)/dt')
d)画出
的波形。
%program2.4
t=-4:
0.1:
4;
forx=1:
length(t)
y2(x)=quad('functri',-4,t(x));
end
plot(t,y2)
title('integraloff(t)')
实验三系统的时域分析
1.实验目的
●学习并掌握连续时间系统的零状态响应、冲激响应和阶跃响应的MATLAB求解方法;
●学习并掌握离散时间系统的零状态响应、冲激响应和阶跃响应的MATLAB求解方法;
●进一步深刻理解连续时间系统和离散时间系统的系统函数零极点对系统特性的影响;
●学习并掌握卷积的MATLAB计算方法。
2.实验内容
1.设离散系统可由下列差分方程表示:
计算
时的系统脉冲响应。
k=-20:
100;
a=[1-10.9];
b=[1];
h=impz(b,a,k);
stem(k,h)
2.设
,输入
,求系统输出
。
(取
)
k=-10:
50;
uk=[zeros(1,10),ones(1,51)];
hk=(0.9).^k.*uk;
fk=[zeros(1,10),ones(1,10),zeros(1,41)];
yk=conv(fk,hk);
N=length(yk);
stem(0:
N-1,yk)
3.已知滤波器的传递函数:
输入信号为
为随机信号。
试绘出滤波器的输出信号波形。
(取
)
k=0:
100;
r=rand(1,101);
f=2*sin(0.05*pi*k)+r;
b=[1-0.8];
a=[0.22];
y=filter(b,a,f);
plot(k,f,'b--',k,y,'r-');
实验四周期信号的频域分析
1.实验目的
●掌握周期信号傅立叶级数分解与合成的计算公式
●掌握利用MATLAB实现周期信号傅立叶级数分解与综合方法
●理解并掌握周期信号频谱特点
2.实验内容
1.仿照例程,实现下述周期信号的傅立叶级数分解与合成:
要求:
(a)首先,推导出求解
,
,
的公式,计算出前10次系数;
(b)利用MATLAB求解
,
,
的值,其中
,
求解前10次系数,并给出利用这些系数合成的信号波形。
function[A_sym,B_sym]=abc
symstnkxT=5;
tao=0.2*T;
a=0.5;
ifnargin<4
Nf=6;
end
ifnaigin<5
Nn=32;
end
x=time_fun_x(t);
A0=int(x,t,-a,T-a)/T;
As=2/T*int(x*cos(2*pi*n*t/T),t,-a,T-a);
Bs=2/T*int(x*sin(2*pi*n*t/T),t,-a,T-a);
A_sym(k+1)=double(vpa(subs(As,n,k),Nn));
B_sym(k+1)=double(vpa(subs(Bs,n,k),Nn));
ifnaigin==0
c=A_sym;
disp(c);
d=B_sym;
disp(d);
t=-8*a:
0.01:
T-a;
(b)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=1tao/T=0.2
symstnkx
T=4;
tao=T/4;
a=-1.5;
ifnargin<4
Nf=10;
end
ifnargin<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码数值数组
fork=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;
ifnargout==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),holdon
y=time_fun_e(t);%调用连续时间函数-周期矩形脉冲
plot(t,y,'r:
')
title('直流+基波')
axis([-8,8,-0.5,1.5])
subplot(2,2,2)
plot(t,f12),holdon
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),holdon
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),holdon
y=time_fun_e(t);
plot(t,y,'r:
')
title('1-10次谐波+直流')
axis([-8,8,-0.5,1.5])
holdoff
end
functiony=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);%连续时间函数-周期矩形脉冲
functionx=time_fun_x(t)
%该函数是CTFShchsym.m的子函数。
它由符号变量和表达式写成。
h=1;
x1=sym('Heaviside(t)')*h;
x=x1-sym('Heaviside(t-1)')*h;
源程序修改:
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=1tao/T=0.2
symstnkx
T=5;
tao=0.2*T;
a=0.5;
ifnargin<4
Nf=6;
end
ifnargin<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码数值数组
fork=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
ifnargout==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=-8*a:
0.01:
T-a;
f0=c
(1);%直流
f1=c
(2).*cos(2*pi*1*t/5)+d
(2).*sin(2*pi*1*t/5);%基波
f2=c(3).*cos(2*pi*2*t/5)+d(3).*sin(2*pi*2*t/5);%2次谐波
f3=c(4).*cos(2*pi*3*t/5)+d(4).*sin(2*pi*3*t/5);%3次谐波
f4=c(5).*cos(2*pi*4*t/5)+d(5).*sin(2*pi*4*t/5);%4次谐波
f5=c(6).*cos(2*pi*5*t/5)+d(6).*sin(2*pi*5*t/5);%5次谐波
f6=c(7).*cos(2*pi*6*t/5)+d(7).*sin(2*pi*6*t/5);%6次谐波
f7=f0+f1+f2;%直流+基波+2次谐波
f8=f7+f3;%直流+基波+2次谐波+3次谐波
f9=f8+f4+f6;%直流+基波+2次谐波+3次谐波+4次谐波+6次谐波
subplot(2,2,1)
plot(t,f0+f1),holdon
y=time_fun_e(t);%调用连续时间函数-周期矩形脉冲
plot(t,y,'r:
')
title('周期矩形波的形成—直流+基波')
axis([-4,4.5,-0.5,1.5])
subplot(2,2,2)
plot(t,f7),holdon
y=time_fun_e(t);
plot(t,y,'r:
')
title('周期矩形波的形成—直流+基波+2次谐波')
axis([-4,4.5,-0.5,1.5])
subplot(2,2,3)
plot(t,f8),holdon
y=time_fun_e(t);
plot(t,y,'r:
')
title('直流+基波+2次谐波+3次谐波')
axis([-4,4.5,-0.5,1.5])
subplot(2,2,4)
plot(t,f9),holdon
y=time_fun_e(t);
plot(t,y,'r:
')
title('基波+2次谐波+3次谐波+4次谐波+6次谐波')
axis([-4,4.5,-0.5,1.5])
end
functiony=time_fun_e(t)
%该函数是CTFShchsym.m的子函它由符号函数和表达式写成
a=0.5;
T=5;
h=1;
tao=0.2*T;
t=-8*a:
0.01:
T-a;
e1=1/2+1/2.*sign(t+tao/2);
e2=1/2+1/2.*sign(t-tao/2);
y=h.*(e1-e2);%连续时间函数-周期矩形脉冲
functionx=time_fun_x(t)
%该函数是CTFShchsym.m的子函数。
它由符号变量和表达式写成。
h=1;
x1=sym('Heaviside(t+0.5)')*h;
x=x1-sym('Heaviside(t-0.5)')*h;
2.已知周期为T=4的三角波,在第一周期(-2,试用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项展开系数
%TT=m*tao,信号周期
%Nf谐波的阶数
%m(m=T/tao)周期与脉冲宽度之比,如m=4,8,16,100等
%tao脉宽:
tao=T/m
symstny
ifnargin<3
Nf=input('pleaseInput所需展开的最高谐波次数:
Nf=');
end
T=input('pleaseInput信号的周期T=');
ifnargin<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));
fork=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
ifnargout==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
functionx=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)
holdon
x=rectpuls(t-5,tao);%产生一个宽度tao=1的矩形脉,中心位置在t=5处
plot(t,x)
holdon
x=rectpuls(t+5,tao);%产生一个宽度tao=1的矩形脉,中心位置在t=-5处
plot(t,x)
title('周期为T=5,脉宽tao=1的矩形脉冲')
axis([-10,10,0,1.2])
functiony=time_fun_s(t)
symst
y=1-abs(t);
x1=sym('Heaviside(t+2)');
x=x1-sym('Heaviside(t-2)');
y=y*x;
ezplot(t,y,[-10,10])
grid
源程序修改:
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项展开系数
%TT=m*tao,信号周期
%Nf谐波的阶数
%m(m=T/t