一、 实验题目:常见离散信号的MATLAB 产生和图形显示
二、 实验目的:加深对离散系统的差分方程、冲激响应和卷积分
析方法的理解。 三、 实验原理:离散系统:
在MATLAB 中,可以用函数y=Filter(p,d,x) 求解差分方程,也可以用函数 y=Conv(x,h)计算卷积。
四、实验内容:
编制程序求解下列两个系统的单位冲激响应和阶跃响应,并绘出其图形。
y[n]0.75y[n 1]0.125y[n 2] x[n]x[n 1] y[n] 0.25{x[n 1]x[n 2]x[n 3]x[n 4]}
实验要求:给出理论计算结果和程序计算结果并讨论。
(一) y[n]0.75y[n 1]0.125y[n 2] x[n]x[n 1]
理论计算
对等式的两边取Z变换,移项得
Y(Z)Z2ZH(Z)X(Z)(Z1)(Z1)42
根据部分分式展开法和Z变换的性质共同求得
1n1n1n11n1h(n)[2()()]u(n)[2()()]u(n1)2424理论计算值为:
h(n)=
1.0000 -1.7500 1.1875 -0.6719 0.3555 -0.1826 0.0925 -0.0466 0.0234 -0.0117 0.0059 -0.0029 0.0015 -0.0007 0.0004 -0.0002 0.0001 0.0000
程序计算
程序:
>> clear;
>> n=[-20:20]; >> b=[1,-1];
>> a=[1,0.75,0.125];
>> x1=(n==0);
>> y1=filter(b,a,x1) y1 =
Columns 1 through 10
0 0 0 0 0
Columns 11 through 20
0 0 0 0 0
Columns 21 through 30
1.0000 -1.7500 0.0234 -0.0117
Columns 31 through 40
0.0059 -0.0029 0.0000 -0.0000 Column 41 0.0000
210-1-2 0 0 0 0 0
0 0 0 0 0
1.1875 -0.6719 0.3555 -0.1826 0.0925 -0.0466
0.0015 -0.0007 0.0004 -0.0002 0.0001 -0.0000
051015202530354045
阶跃响应: 程序:>> clear; n=[-20:20]; b=[1,-1];
a=[1,0.75,0.125]; x2=(n>=0);
>> y2=filter(b,a,x2) y2 =
Columns 1 through 10
0 0 0 0 0
Columns 11 through 20
0 0 0 0 0
Columns 21 through 30
1.0000 -0.7500 0.0078 -0.0039
Columns 31 through 40
0.0020 -0.0010 0.0000 -0.0000
Column 41
0.0000
10.50-0.5-1 0 0 0 0 0
0 0 0 0 0
0.4375 -0.2344 0.1211 -0.0615 0.0310 -0.0156
0.0005 -0.0002 0.0001 -0.0001 0.0000 -0.0000
051015202530354045
结论:经对比,理论计算值与程序计算值相同。
(二)y[n] 0.25{x[n 1]x[n 2]x[n 3]x[n 4]}
理论计算
对等式的两边取Z变换,移项得
H(Z)0.25(Z1Z2Z3Z4)
求z变换得
h(n)0.25[(n1)(n2)(n3)(n4)]
理论结果为当n=1,2,3,4时n为0.25,其余点n为0
u(n)h(n)dn0.25[u(n1)u(n2)u(n3)u(n4)]理论结果为当n=1,2,3,4时n为0.25,0.5,0.75,1其余点n为0
程序计算
冲激响应: 程序: >> clear; n=[-20:20];
b=[0.25,0.25,0.25,0.25]; a=[1]; x2=(n==0);
>> y2=filter(b,a,x2) y2 =
Columns 1 through 10
0 0 0 0 0 0 0 0 0 0 Columns 11 through 20
0 0 0 0 0 0 0 0 0 0 Columns 21 through 30
0.2500 0.2500 0.2500 0.2500 0 0 0 0 0 0
Columns 31 through 40
0 0 0 0 0 0 0 0 0 0 Column 41 0
0.250.20.150.10.050051015202530354045阶跃响应: clear;
n=[-20:20];
b=[0.25,0.25,0.25,0.25]; a=[1]; x2=(n>=0);
>> y2=filter(b,a,x2) y2 =
Columns 1 through 10
0 0 0 0 0
Columns 11 through 20
0 0 0 0 0
Columns 21 through 30
0.2500 0.5000 1.0000 1.0000
Columns 31 through 40
1.0000 1.0000 1.0000 1.0000
Column 41
1.0000
>> stem(y2,'filled')
0 0 0.7500 1.0000 1.0000 1.0000 0 0 0 0 1.0000 1.0000 1.0000 1.0000
0 0 0 0 1.0000 1.0000 1.0000 1.0000
10.80.60.40.20051015202530354045
四、 实验结论:
经对比验证,理论计算值与matlab程序计算值均一致。
五、 感想与体会
又这次实验,初步得体会到了matlab可以大大简化人类手工计算和查表的复杂度。个人觉得自己在matlab编程时还应注意加强理解,在脑中有数并且对仿真结果有初步的估计的情况下再进行编程。
因篇幅问题不能全部显示,请点此查看更多更全内容