要实现下式的冲击响应和
阶跃响应,可以分别采用三种方法。
y[n]+0.75y[n-1]+0.125y[n-2]=x[n]-x[n-1]。
b. 单位冲激响应:
(1)用filter函数
a1=[1,0.75,0.125];
b1=[1,-1];
n=0:20;
x1=[1 zeros(1,20)];
y1filter=filter(b1,a1,x1);
stem(n,y1filter);
title('y1filter');
xlabel('x');
ylabel('y');
(2)用conv函数
a1=[1,0.75,0.125];
b1=[1,-1];
x1=[1 zeros(1,10)];
[h]=impz(b1,a1,10);
y1conv=conv(h,x1);
n=0:19;
stem(n,y1conv,'filled')
(3)用impz函数
a1=[1,0.75,0.125];
b1=[1,-1];
impz(b1,a1,21);
c. 单位阶跃响应:
(1)用filter函数
a1=[1,0.75,0.125];
b1=[1,-1];
n=0:20;
x2=ones(1,21);
y1filter=filter(b1,a1,x2);
stem(n,y1filter);
title('y1filter_step');
xlabel('x');
ylabel('y');
(2)用conv函数
a1=[1,0.75,0.125];
b1=[1,-1];
x2=ones(1,21);
[h]=impz(b1,a1,20);
y1=conv(h,x2);
y1conv=y1(1:21); %为何y1conv要取y1中1:21的值,解释见
n1=0:20; %y2à单位阶跃响应à用conv函数中注释
stem(n1,y1conv,'filled');
title('y1conv');
xlabel('n');
ylabel('y1[n]');
(3)用impz函数
a=[1,0.75,0.125];
b=1;
impz(b,a)
即y=filter(p,d,x)用来实现
差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。
而y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。
y=impz(p,d,N)是用来实现冲击响应的,d和p的定义见filter,N表示冲击响应输出的序列个数