实验名称:离散时间系统的时域特性分析(实验一)
专业班级:
学生姓名:
学号:
指导教师:
二○一三年月日
一、实验原理
一个离散时间系统是将输入序列变换成输出序列的一种运算。若以T[•]表示这种运算,则一个离散时间系统y(n)=T[x(n)],离散时间系统中最重要,最常用的是“线性时不变系统”。
二、实验内容
考虑如下差分方程描述的两个离散时间系统:
系统1:y(n)=0.5*x(n)+0.27*x(n-1)+0.77*x(n-2)
系统2:y(n)=0.45*x(n)+0.5*x(x-1)+0.45*x(n-2)+0.53*y(n-1)-0.46*y(n -2)
输入x(n)=cos(20*pi*n/256)+cos(200*pi*n/256)0≦n≦299
(1)编程求上述两个系统的输出,并分别画出系统的输入与输出波形。
(2)编程求上述两个系统的冲激响应序列,并画出其波形。
(3)若系统的初始状态为零,判断系统2是否为时不变的?是否为线性的?
三、程序及输出结果
(1)程序如下:
%系统1:y(n)=0.5*x(n)+0.27*x(n-1)+0.77*x(n-2)
%系统2:y(n)=0.45*x(n)+0.5*x(n-1)+0.45*x(n-2)+0.53*y(n-1) -0.46*y(n-2)
clf;%clf;用来清除图形的命令。一般在画图之前用。
n=0:300;%产生300个步长为1的整数
x=cos(20*pi*n/256)+cos(200*pi*n/256);%x(n)的表达式
num1=[0.50.270.77];
num2=[0.450.50.45];
den1=[1];
den2=[1-0.53+0.46];
y1=filter(num1,den1,x);%计算出y1
y2=filter(num2,den2,x);%计算出y2
%画出输入和输出信号%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%y1输入信号
subplot(2,2,1);%生成一个2*2的窗口
plot(n,x);
xlabel('时间信号n');
ylabel('信号幅度');
title('y1输入信号');
%y1输出信号
subplot(2,2,2);
plot(y1);
xlabel('时间信号n');
ylabel('信号幅度');
title('y1输出信号');%y2输入信号
subplot(2,2,3);%生成一个2*2的窗口
plot(n,x);
xlabel('时间信号n');
ylabel('信号幅度');
title('y2输入信号');
%y2输出信号
subplot(2,2,4);
plot(y2);
xlabel('时间信号n');
ylabel('信号幅度');
title('y2输出信号');
输出结果:
以上四个窗口为两个系统的输入与输出波形。
(2)程序如下:
%系统1:y(n)=0.5*x(n)+0.27*x(n-1)+0.77*x(n-2)
%系统2:y(n)=0.45*x(n)+0.5*x(n-1)+0.45*x(n-2)+0.53*y(n-1) -0.46*y(n-2)clf;%clf;用来清除图形的命令。一般在画图之前用。n=30;%产生30的时间序列
num1=[0.50.270.77];
num2=[0.450.50.45];
den1=[1];
den2=[1-0.53+0.46];
y1=impz(num1,den1,n);%系统1的冲击响应
y2=impz(num2,den2,n);%系统2的冲击响应%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %y1冲击响应
subplot(2,1,1);%生成一个2*1的窗口
stem(y1);
xlabel('时间信号n');
ylabel('信号幅度');
title('系统1的冲击响应');
grid;%显示网格
%y2冲击响应
subplot(2,1,2);
stem(y2);
xlabel('时间信号n');
ylabel('信号幅度');
title('系统2的冲击响应');
grid;
输出结果:
(3)程序如下:
系统2的线性系统判断程序
%系统1:y(n)=0.5*x(n)+0.27*x(n-1)+0.77*x(n-2)
%系统2:y(n)=0.45*x(n)+0.5*x(n-1)+0.45*x(n-2)+0.53*y(n-1) -0.46*y(n-2)
clf;%clf;用来清除图形的命令。一般在画图之前用。
n=0:30;%产生30个步长为1的整数
a=2;
b=-4;
x1=cos(2*pi*0.1*n);
x2=cos(2*pi*0.4*n);
x=a*x1+b*x2;%x为x[n]
num2=[0.450.50.45];
den2=[1-0.53+0.46];
y1=filter(num2,den2,x1);%计算出系统2的y1
y2=filter(num2,den2,x2);%计算出系统2的y2y=filter(num2,den2,x);%计算出系统2的y y为y[n] yt=a*y1+b*y2;%y[n]=a*y1[n]+b*y2[n]; %画出输入和输出信号%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %系统2的线性系统判断
subplot(2,1,1);%生成一个2*2的窗口
stem(n,y);
xlabel('时间信号n');
ylabel('信号幅度');
subplot(2,1,2);
stem(n,yt);
xlabel('时间信号n');
ylabel('信号幅度');
title('系统2的线性系统判断');
输出结果:
分析:从上图可知,即y(n)=T[a*x1(n)+b*x2(n)]=a*T[x1(n) +b*T[x2(n)]],所以此系统是一个线性系统。
系统2的时不变系统判断程序
%系统1:y(n)=0.5*x(n)+0.27*x(n-1)+0.77*x(n-2)
%系统2:y(n)=0.45*x(n)+0.5*x(n-1)+0.45*x(n-2)+0.53*y(n-1) -0.46*y(n-2)
clf;%clf;用来清除图形的命令。一般在画图之前用。
n=0:30;%产生30个步长为1的整数
D=10;
a=2;
b=-4;
x1=cos(2*pi*0.1*n);
x2=cos(2*pi*0.4*n);
x=a*x1+b*x2;%x为x[n]
xd=[zeros(1,D)x];%生成新序列xd=x(n-D),延时D个单位
num2=[0.450.50.45];
den2=[1-0.53+0.46];
ic=[00];
y=filter(num2,den2,x,ic);%计算出系统2的y y为y[n]
yd=filter(num2,den2,xd,ic);
N=length(y);
d=y-yd(1+D:N+D);%求y与yd的差值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%系统2的时不变系统判断
subplot(3,1,1);%生成一个3*1的窗口
stem(n,y);
xlabel('时间信号n');
ylabel('信号幅度');
title('输出y(n)');
grid;
subplot(3,1,2);
stem(n,yd(1:length(y)));
xlabel('时间信号n');
ylabel('信号幅度');
title('由于输入时延而产生的输出yd[n]');subplot(3,1,3);
stem(n,d);
xlabel('时间信号n');
ylabel('信号幅度');
title('差值信号');
grid;
输出结果:
分析:由图可知,y(n-D)=T[x(n-D)],故此系统为时不变系统。