实验二离散时间信号的时域分析讲解.docx
- 文档编号:8245803
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:31
- 大小:227.82KB
实验二离散时间信号的时域分析讲解.docx
《实验二离散时间信号的时域分析讲解.docx》由会员分享,可在线阅读,更多相关《实验二离散时间信号的时域分析讲解.docx(31页珍藏版)》请在冰豆网上搜索。
实验二离散时间信号的时域分析讲解
实验二离散时间信号的时域分析
陈一凡20112121006
一、实验目的:
学习使用MATLAB命令产生滑动平均滤波器;
学习使用MATLAB命令产生一个简单的非线性离散时间系统;
学习使用MATLAB命令产生线性与非线性系统;
学习使用MATLAB命令产生时不变系统和时变系统;
学习使用MATLAB命令产生线性时不变系统的冲激响应;
学习使用MATLAB命令产生线性时不变系统的级联;
学习使用MATLAB命令产生有限冲击响应系统的输出序列;
学习使用MATLAB命令产生线性时不变系统的冲击响应的绝对值之和;
学习使用MATLAB命令产生两个离散时间系统;
二、实验原理简述:
运用运算符和特殊符号,基本矩阵和矩阵控制,基本函数,数据分析,二维图形,通用图形函数,信号处理工具箱等命令,产生离散时间系统等。
三、实验内容与实验结果
1、产生并绘制一个滑动平均滤波器
运行程序
clf;
n=0:
100;
s1=cos(2*pi*0.05*n);
s2=cos(2*pi*0.47*n);
x=s1+s2;
M=input('滤波器所需的长度=');
num=ones(1,M);
y=filter(num,1,x)/M;
subplot(2,2,1);
plot(n,s1);
axis([0,100,-2,2]);
xlabel('时间序号n');ylabel('振幅');
title('信号#1');
subplot(2,2,2);
plot(n,s2);
axis([0,100,-2,2]);
xlabel('时间序号n');ylabel('振幅');
title('信号#2');
subplot(2,2,3);
plot(n,x);
axis([0,100,-2,2]);
xlabel('时间序号n');ylabel('振幅');
title('输入信号');
subplot(2,2,4);
plot(n,y);
axis([0,100,-2,2]);
xlabel('时间序号n');ylabel('振幅');
title('输出信号');
axis;
滤波器所需的长度=2
实验结果如图1所示
ans=
0100-22
图1
2、生成一个简单的非线性离散时间系统:
运行程序:
clf;
n=0:
200;
x=sin(2*pi*0.05*n)+1;
x1=[x00];
x2=[0x0];
x3=[00x];
y=x2.*x2-x1.*x3;
y=y(2:
202);
subplot(2,1,1)
plot(n,x)
xlabel('时间序号n');ylabel('振幅');
title('输入信号')
subplot(2,1,2)
plot(n,y)
xlabel('时间序号n');ylabel('振幅');
title('输出信号');
实验结果如图2所示
图2
3.生成一个产生线性与非线性系统:
运行程序:
clf;
n=0:
40;
a=2;b=-3;
x1=cos(2*pi*0.1*n);
x2=cos(2*pi*0.4*n);
x=a*x1+b*x2;
num=[2.24032.49082.2403];
den=[1-0.40.75];
ic=[00];
y1=filter(num,den,x1,ic);
y2=filter(num,den,x2,ic);
y=filter(num,den,x,ic);
yt=a*y1+b*y2;
d=y-yt;
subplot(3,1,1)
stem(n,y);
ylabel('振幅');
title('加权输入:
a\cdotx_{1}[n]+b\cdotx_{2}[n]的输出');
subplot(3,1,2)
stem(n,y);
ylabel('振幅');
title('加权输出t:
a\cdoty_{1}[n]+b\cdoty_{2}[n]');
subplot(3,1,3)
stem(n,d);
xlabel('时间序号n');ylabel('振幅');
title('差信号');
实验结果如图3所示
图3
4、产生一个时不变系统和时变系统:
运行程序:
clf;
n=0:
40;D=10;a=3.0;b=-2;
x=a*cos(2*pi*0.1*n)+b*cos(2*pi*0.4*n);
xd=[zeros(1,D)x];
num=[2.24032.49082.2403];
den=[1-0.40.75];
ic=[0,0];
y=filter(num,den,x,ic);
yd=filter(num,den,xd,ic);
d=y-yd(1+D:
41+D);
subplot(3,1,1)
stem(n,y);
ylabel('振幅');
title('输出y[n]');grid;
subplot(3,1,2)
stem(n,yd(1:
41));
ylabel('振幅');
title(['由于延时输入x[n',num2str(D),']的输出']);grid;
subplot(3,1,3)
stem(n,d);
xlabel('时间序号n');ylabel('振幅');
title('差值信号');grid;
实验结果如图4所示
图4
5、产生线性时不变系统的冲激响应:
运行程序:
clf;
N=40;
num=[2.24032.49082.2403];
den=[1-0.40.75];
y=impz(num,den,N);
stem(y);
xlabel('时间序号n');ylabel('振幅');
title('冲激响应');grid;
实验结果如图5所示:
图5
6、编写程序得到线性时不变系统的级联:
运行程序:
clf;
x=[1zeros(1,40)];
n=0:
40;
den=[11.62.281.3250.68];
num=[0.06-0.190.27-0.260.12];
y=filter(num,den,x);
num1=[0.3-0.20.4];den1=[10.90.8];
num2=[0.2-0.50.3];den2=[10.70.85];
y1=filter(num1,den1,x);
y2=filter(num2,den2,y1);
d=y-y2;
subplot(3,1,1);
stem(n,y);
ylabel('振幅');
title('四阶实现的输出');grid
subplot(3,1,2);
stem(n,y2);
ylabel('振幅');
title('级联实现的输出');grid
subplot(3,1,3);
stem(n,d);
xlabel('时间序号n');ylabel('振幅');
title('差值信号');grid;
实验结果如图6所示:
图6
7、产生一个振幅调制信号:
运行程序:
clf;
h=[321-210-403];
x=[1-23-4321];
y=conv(h,x);
n=0:
14;
subplot(2,1,1);
stem(n,y);
xlabel('时间序号n');ylabel('振幅');
title('用卷积得到的输出');grid;
x1=[xzeros(1,8)];
y1=filter(h,1,x1);
subplot(2,1,2);
stem(n,y1);
xlabel('时间序号n');ylabel('振幅');title('由滤波生成的输出');grid;
实验结果如图7所示:
图7
8、产生线性时不变系统的冲击响应的绝对值之和:
运行程序:
clf;
num=[1-0.8];den=[11.50.9];
N=200;
h=impz(num,den,N+1);
parsum=0;
fork=1:
N+1;
parsum=parsum+abs(h(k));
ifabs(h(k))<10^(-6),break,end
end
n=0:
N;
stem(n,h)
xlabel('时间序号n');ylabel('振幅');
disp('值=');disp(abs(h(k)));
结果得
值=
1.6761e-005
实验结果如图8所示:
图8
9、产生两个离散时间系统:
运行程序:
clf;
n=0:
299;
x1=cos(2*pi*10*n/256);
x2=cos(2*pi*100*n/256);
x=x1+x2;
num1=[0.50.270.77];
y1=filter(num1,1,x);
den2=[1-0.530.46];
num2=[0.450.50.45];
y2=filter(num2,den2,x);
subplot(2,1,1);
plot(n,y1);axis([0300-22]);
ylabel('振幅');
title('系统#1的输出');
grid;
subplot(2,1,2);
plot(n,y2);axis([0300-22]);
xlabel('时间序号n');ylabel('振幅');
title('系统#2的输出');
grid;
实验结果如图9所示:
图9
4、实验分析:
针对实验1产生滑动平均滤波器;
s1=cos(2*pi*0.05*n);即产生一个低频正弦信号;
s2=cos(2*pi*0.47*n);即产生一个高频正弦信号;
x=s1+s2;即滑动平均滤波器的实现;
M=input('滤波器所需的长度=');即定义输入;
num=ones(1,M);
y=filter(num,1,x)/M;即定义滑动平均滤波器;
此程序是通过从若干个正弦信号之和所组成的信号中滤出高频分量,来实现滑动平均滤波器。
针对实验2产生一个简单的非线性离散时间系统;
x=sin(2*pi*0.05*n)+1;即产生一个正弦输入信号;
x1=[x00];即x1[n]=x[n+1];
x2=[0x0];即x2[n]=x[n];
x3=[00x];即x3[n]=x[n-1];
y=x2.*x2-x1.*x3;即对输出信号的计算
此程序中输入信号是由两个正弦序列的和组成的,通过三点平滑滤波器的因果表达式得出线性时不变系统,产生输出信号。
针对实验3产生线性与非线性系统;
clf;
n=0:
40;
a=2;b=-3;
x1=cos(2*pi*0.1*n);
x2=cos(2*pi*0.4*n);
x=a*x1+b*x2;即三个输入序列;
num=[2.24032.49082.2403];即对filter函数计算系统输出的num赋值;
den=[1-0.40.75];即对filter函数计算系统输出的den赋值;
ic=[00];即设置零初始条件
y1=filter(num,den,x1,ic);即计算输出y1[n];
y2=filter(num,den,x2,ic);即计算输出y2[n];
y=filter(num,den,x,ic);即计算输出y3[n];
yt=a*y1+b*y2;
d=y-yt;即计算差值输出d[n];
subplot(3,1,1)
stem(n,y);
ylabel('振幅');
title('加权输入:
a\cdotx_{1}[n]+b\cdotx_{2}[n]的输出');
subplot(3,1,2)
stem(n,y);
ylabel('振幅');
title('加权输出t:
a\cdoty_{1}[n]+b\cdoty_{2}[n]');
subplot(3,1,3)
stem(n,d);
xlabel('时间序号n');ylabel('振幅');
title('差信号');
此程序是在因果系统的线性特性的基础上,输入三个不同的输入序列,计算相应的输出响应。
针对实验4产生线性时不变系统;
clf;
n=0:
40;D=10;a=3.0;b=-2;
x=a*cos(2*pi*0.1*n)+b*cos(2*pi*0.4*n);
xd=[zeros(1,D)x];
num=[2.24032.49082.2403];
den=[1-0.40.75];
ic=[0,0];即设置初始条件;
y=filter(num,den,x,ic);计算输出y[n];
yd=filter(num,den,xd,ic);计算输出yd[n];
d=y-yd(1+D:
41+D);计算差值输出d[n];
subplot(3,1,1)
stem(n,y);
ylabel('振幅');
title('输出y[n]');grid;
subplot(3,1,2)
stem(n,yd(1:
41));
ylabel('振幅');
title(['由于延时输入x[n',num2str(D),']的输出']);grid;
subplot(3,1,3)
stem(n,d);
xlabel('时间序号n');ylabel('振幅');
title('差值信号');grid;
此程序通过描述因果系统的线性特征,输入两个不同的输入序列,计算并画出相应的输出序列。
针对实验5产生线性时不变系统的冲激响应
clf;
N=40;
num=[2.24032.49082.2403];
den=[1-0.40.75];
y=impz(num,den,N);
stem(y);
xlabel('时间序号n');ylabel('振幅');
title('冲激响应');grid;
此程序用命令impz计算因果线性时不变离散时间系统的冲激相应的前N个样本。
针对实验6产生线性时不变系统的级联;
clf;
x=[1zeros(1,40)];即生成输入;
n=0:
40;
den=[11.62.281.3250.68];即四阶系统的系数;
num=[0.06-0.190.27-0.260.12];
y=filter(num,den,x);即计算四阶系统的输出;
num1=[0.3-0.20.4];den1=[10.90.8];即两个二阶系统的系数;
num2=[0.2-0.50.3];den2=[10.70.85];
y1=filter(num1,den1,x);即级联第一级的输出y1[n];
y2=filter(num2,den2,y1);即级联第二级的输出y2[n];
d=y-y2;即y1[n]和y2[n]之间的差;
subplot(3,1,1);
stem(n,y);
ylabel('振幅');
title('四阶实现的输出');grid
subplot(3,1,2);
stem(n,y2);
ylabel('振幅');
title('级联实现的输出');grid
subplot(3,1,3);
stem(n,d);
xlabel('时间序号n');ylabel('振幅');
title('差值信号');grid;
此程序在实际应用中,由于高阶因果线性时不变离散时间系统可以用低阶因果线性时不变离散时间系统级联得到。
四阶离散时间系统可用二阶离散时间系统的级联实现。
先产生了序列x[n],把它作为四阶系统的输入,生成输出y[n];然后用同样的输入x[n]应用到第一级得到输出序列y1[n]。
接下来,用y1[n]作为第二级的输入得到他的输出y2[n]。
最后求出y[n]和y2[n]之间的差,并画出所有的输出信号和差值信号。
针对实验7产生有限冲击响应系统的输出序列
clf;
h=[321-210-403];
x=[1-23-4321];
y=conv(h,x);即实现卷积;
n=0:
14;
subplot(2,1,1);
stem(n,y);
xlabel('时间序号n');ylabel('振幅');
title('用卷积得到的输出');grid;
x1=[xzeros(1,8)];
y1=filter(h,1,x1);
subplot(2,1,2);
stem(n,y1);
xlabel('时间序号n');ylabel('振幅');title('由滤波生成的输出');grid;
在此程序中假设待卷积的两个序列都为有限长序列,通过卷积运算符可得到有限冲激响应系统的输出序列。
针对实验8产生线性时不变系统的冲击响应的绝对值之和;
clf;
num=[1-0.8];den=[11.50.9];
N=200;
h=impz(num,den,N+1);
parsum=0;
fork=1:
N+1;
parsum=parsum+abs(h(k));
ifabs(h(k))<10^(-6),break,end
end
n=0:
N;
stem(n,h)
xlabel('时间序号n');ylabel('振幅');
disp('值=');disp(abs(h(k)));
由于一个线性时不变系统的冲激响应是绝对可和的,则该程序就是BIBO稳定的。
此程序就是计算因果iir线性是不变系统的冲激响应的绝对值之和。
针对实验9产生两个离散时间系统
clf;
n=0:
299;
x1=cos(2*pi*10*n/256);即产生输入序列;
x2=cos(2*pi*100*n/256);
x=x1+x2;
num1=[0.50.270.77];即计算输出序列;
y1=filter(num1,1,x);即系统#1的输出;
den2=[1-0.530.46];
num2=[0.450.50.45];
y2=filter(num2,den2,x);即系统#2的输出;
subplot(2,1,1);即画出输出序列;
plot(n,y1);axis([0300-22]);
ylabel('振幅');
title('系统#1的输出');grid;
subplot(2,1,2);
plot(n,y2);axis([0300-22]);
xlabel('时间序号n');ylabel('振幅');
title('系统#2的输出');grid;
此程序用差分方程描述了两个离散时间系统。
五、实验总结
在此次实验中,我学会了用MATLAB程序绘制图形,并且掌握了线性离散时间系统和线性时不变系统,离散时不变系统,有界输入有界输出系统,单位阶跃响应,卷积,级联,因果系统有了详细深入的认识。
习题求解:
Q2.4修改程序P2.1,用一个长度为101、最低频率为0、最高频率为0.5的扫描正弦信号作为输入信号,计算其输出信号。
程序如下,结果如图10所示:
clf;
n=0:
100;
s1=cos(2*pi*0.0*n);
s2=cos(2*pi*0.5*n);
x=s1+s2;
M=input('滤波器所需的长度=');
num=ones(1,M);
y=filter(num,1,x)/M;
subplot(2,2,1);
plot(n,s1);
axis([0,100,-2,2]);
xlabel('时间序号n');ylabel('振幅');
title('信号#1');
subplot(2,2,2);
plot(n,s2);
axis([0,100,-2,2]);
xlabel('时间序号n');ylabel('振幅');
title('信号#2');
subplot(2,2,3);
plot(n,x);
axis([0,100,-2,2]);
xlabel('时间序号n');ylabel('振幅');
title('输入信号');
subplot(2,2,4);
plot(n,y);
axis([0,100,-2,2]);
xlabel('时间序号n');ylabel('振幅');
title('输出信号');
Axis;
输入滤波器所需的长度=2
得到结果:
ans=
0100-22
图10
Q2.6用形如x[n]=sin(w0n)+K的正弦信号作为输入信号,求出系统的输出信号。
程序如下,结果如图11所示:
clf;
n=0:
200;
K=1;
f=0.05;
w=2*pi*f;
x=cos(w*n)+K;
x1=[x00];
x2=[0x0];
x3=[00x];
y=x2.*x2-x1.*x3;
y=y(2:
202);
subplot(2,1,1)
plot(n,x)
xlabel('时间序号n');ylabel('振幅');
title('输入信号')
subplot(2,1,2)
plot(n,y)
xlabel('时间序号n');ylabel('振幅');
title('输出信号')
图11
Q2.11假定另一个系统为y[n]=x[n]x[n-1],修改程序P2.3,计算这个系统的输出序列y1[n],y2[n],和y[n].比较y[n]和yt[n]。
运行程序如下,结果如图12;
clf;
n=0:
40;
x1=cos(2*pi*0.1*n);
x2=cos(2*pi*0.4*n);
y=x1.*x2;
num=[2.24032.49082.2403];
den=[1-0.40.75];
ic=[00];
y1=filter(num,den,x1,ic);
y2=filter(num,den,x2,ic);
y3=filter(num,den,y,ic);
yt=y1+y2;
d=y3-yt;
subplot(3,1,1)
stem(n,y);
ylabel('振幅');
title('加权输入:
a\cdotx_{1}[n]+b\cdotx_{2}[n]的输出');
subplot(3,1,2)
stem(n,y);
ylabel('振幅');
title('加权输出t:
a\cdoty_{1}[n]+b\cdoty_{2}[n]');
subplot(3,1,3)
stem(n,d);
xlabel('时间序号n');ylabel('振幅');
title('差信号');
图12
Q2.17考虑另一个系统,y[n]=nx[n]+x[n-1],修改程序P2.4。
运行程序如下,结果如图13;
clf;
n=0:
40;D=10;a=3.0;b=-2;
x=a*cos(2*pi*0.1*n)+b*cos(2*pi*0.4*n);
xd=[zeros(1,D)x];
num=[2.24032.49082.2403];
den=[1-0.40.75];
ic=[0,0];
y=filter(num,den,x,ic);
yd=filter(num,den,xd,ic);
d=y-yd(1+D:
41+D);
subplot(3,1,1)
stem(n,y);
ylabel('振幅');
tit
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 离散 时间 信号 时域 分析 讲解