1.题目一
编写Python程序,描述下列序列的卷积波形:
先产生对应的序列,并使两个序列的时间坐标一一对应,使用convolve子函数进行卷积。两序列的卷积的时间坐标起始位置为两序列起始坐标之和,结束位置为两序列最后一个时间坐标之和。
import matplotlib.pyplot as plt
import numpy as np
n1=np.linspace(0,9,10)
f1=np.zeros(10)
f1[1]=1 #生成δ(n-1)
f2=np.where(n1>=2,1,0) #生成u(n-2)
y1=np.convolve(f1,f2,'full') #做卷积运算
plt.subplot(2,2,1)
plt.stem(y1,markerfmt="b.")
plt.title('$y(n)= \delta (n-1)*u(n-2)$')
plt.xlabel('n')
plt.ylabel('y(n)')
f3=np.where(n1>=0,1,0) #生成u(n)
f4=np.exp(0.2*n1)*f3 #生成exp(0.2n)u(n)
y2=np.convolve(f3,f4,'full') #做卷积运算
plt.subplot(2,2,2)
plt.stem(y2,markerfmt="b.")
plt.title('$y(n)=u(n)*e^{0.2n}u(n)$')
plt.xlabel('n')
plt.ylabel('y(n)')
n=np.linspace(-9,12,22)
f5=np.sin(n/2)
f6=(0.5)**n
y3=np.convolve(f5,f6,'full') #做卷积运算
n3=np.arange(-18,25)
plt.subplot(2,2,3)
plt.stem(n3,y3,markerfmt="b.")
plt.title('$y(n)=sin(n/2)*(0.5)^n$')
plt.xlabel('n')
plt.ylabel('y(n)')
plt.tight_layout() #让子图之间不重叠
plt.show()
2.题目二
编写MATLAB程序,已知一个系统的差分方程为y(n)=0.7y(n-1)+2x(n)-x(n-2),试求此系统的输入序列x(n)=u(n-3)的响应。
使用impz子函数求系统的单位冲激响应h(n),再求h(n)与x(n)的卷积,即可得到系统对x(n)的响应。
N=16;
n=0:N-1;
xn=[zeros(1,3),ones(1,N-3)]; %生成u(n-3)
a=[1,-0.7,0];
b=[2,0,-1];
hn=impz(b,a,n); %求时域单位冲激响应h(n)
yn=conv(xn,hn); %求输出响应y(n)
subplot(2,1,1)
stem(n,hn,'.'),title('时域单位冲激响应h(n)');
xlabel('n'),ylabel('h(n)');grid on
subplot(2,1,2)
stem(yn,'.'),title('此系统的输入序列x(n)=u(n-3)的响应y(n)');
xlabel('n'),ylabel('y(n)');grid on;box on
3.题目三
3.编写MATLAB程序,已知一个LSI系统的差分方程表示式为y(n)-0.5y(n-1)+y(n-6)-0.5y(n-7)=x(n)-x(n-1)+x(n-2),满足初始条件y(-1)=0,x(-1)=0,试用dlsim和filter两种方法求此系统的输入序列x(n)为下列信号时的响应:
dlism求解得到的结果为系统的零状态响应。本题目的初始条件为0,filtic求出的对应初始序列也为0,对应的零输入响应为0。因此,filter求出来的全响应为零状态响应,即本题目中filter与dlism的结果相同。
N=32;
n=0:N-1;
x1n=[zeros(1,3),ones(1,N-3)]; %生成x(n)=u(n-3)
a=[1,-0.5,0,0,0,0,1,-0.5];
b=[1,-1,1,0,0,0,0,0];
y1n_1=dlsim(b,a,x1n); %求离散系统响应y1(n)
subplot(3,2,1);
stem(n,y1n_1,'.');title('dlism:输入序列为x(n)=u(n-3)时的响应');
xlabel('n'),ylabel('y_1(n)');
x01=0;y01=0; %输入初始条件
xi=filtic(b,a,x01,y01); %计算初始状态
y1n_2=filter(b,a,x1n,xi);%求系统的完全响应
subplot(3,2,2);
stem(n,y1n_2,'.');title('filter:输入序列为x(n)=u(n-3)时的响应');
xlabel('n'),ylabel('y_1(n)');
x2n=[n==0]-[n==5]; %生成δ(n)-δ(n-5)
y2n_1=dlsim(b,a,x2n); %求离散系统响应y2(n)
subplot(3,2,3);
stem(n,y2n_1,'.');title('dlism:输入序列为x(n)=δ(n)-δ(n-5)时的响应');
xlabel('n'),ylabel('y_2(n)');
y2n_2=filter(b,a,x2n,xi); %求系统的完全响应
subplot(3,2,4);
stem(n,y2n_2,'.');title('filter:输入序列为x(n)=δ(n)-δ(n-5)时的响应');
xlabel('n'),ylabel('y_2(n)');
x3n=exp(0.1*n).*x1n; %生成e^(0.1n)u(n-3)
y3n_1=dlsim(b,a,x3n); %求离散系统响应y2(n)
subplot(3,2,5);
stem(n,y3n_1,'.');title('dlism:输入序列为x(n)=e^{0.1n}u(n-3)时的响应');
xlabel('n'),ylabel('y_3(n)');
y3n_2=filter(b,a,x3n,xi); %求系统的完全响应
subplot(3,2,6);
stem(n,y3n_2,'.');title('filter:输入序列为x(n)=e^{0.1n}u(n-3)时的响应');
xlabel('n'),ylabel('y_3(n)');
4.题目四
4.一个LSI系统的系统函数表示式为:
满足初始条件:y(-1)=5,y(-2)=5,试用filtic和filter子函数求此系统的输入序列为下列信号时的零输入、零状态及完全响应:
使用MATLAB的filtic、filter函数求解,得到结果如下:
在计算零输入响应时,应将输入设置为0,使用filtic函数通过初始条件求解初始状态,再使用filter函数求解零输入响应;在计算零状态响应时,使用filtic函数时应将初始状态设置为0,再使用filter求解零状态响应;在计算全响应时,则应输入序列x(n)及初始条件,全响应等于零输入响应与零状态响应之和。
由于零输入响应与输入无关,即对不同的输入序列x(n),零输入响应均相同,为第一个图。对不同的输入序列x(n),其零状态响应如后6副图所示。
N=32;
n=0:N-1;
a=[1,-0.602012,0.495684,-0.035924];
b=[0.187632,0.241242,0.241242,0.187632];
x1n=[n==3]; %生成输入序列δ(n-3)
y01=[5,5]; %输入初始条件
xi_1=filtic(b,a,y01); %计算初始状态
x1n_1=zeros(1,N);
y1n_1=filter(b,a,x1n_1,xi_1); %计算零输入响应
xi_2=filtic(b,a,0); %零状态时的初始状态
y1n_2=filter(b,a,x1n,xi_2);%计算零状态响应
y1n=filter(b,a,x1n,xi_1);%计算全响应
figure;subplot(2,2,1);stem(n,y1n_1,'.');
title('系统的零输入响应');
xlabel('n');ylabel('y_{zi}(n)');
subplot(2,2,3);stem(n,y1n_2,'.');
title('输入序列为x(n)=δ(n-3)时的零状态响应');
xlabel('n');ylabel('y_{zs}(n)');
subplot(2,2,4);stem(n,y1n,'.');
title('输入序列为x(n)=δ(n-3)时的全响应');
xlabel('n');ylabel('y(n)');
x2n=[ones(1,5),zeros(1,N-5)]; %生成输入序列R5(n)
y2n_1=filter(b,a,x1n_1,xi_1); %计算零输入响应
y2n_2=filter(b,a,x2n,xi_2);%计算零状态响应
y2n=filter(b,a,x2n,xi_1);%计算全响应
figure;subplot(2,2,1);stem(n,y2n_2,'.');
title('输入序列为x(n)=R_5(n)时的零状态响应');
xlabel('n');ylabel('y_{zs}(n)');
subplot(2,2,2);stem(n,y2n,'.');
title('输入序列为x(n)=R_5(n)时的全响应');
xlabel('n');ylabel('y(n)');
x3n=cos(2*pi/3*n)+sin(3*pi/10*n); %生成输入序列cos(2πn/3)+sin(3πn/10)
y3n_2=filter(b,a,x3n,xi_2);%计算零状态响应
y3n=filter(b,a,x3n,xi_1);%计算全响应
subplot(2,2,3);stem(n,y3n_2,'.');
title('输入序列为x(n)=cos(2πn/3)+sin(3πn/10)时的零状态响应');
xlabel('n');ylabel('y_{zs}(n)');
subplot(2,2,4);stem(n,y3n,'.');
title('输入序列为x(n)=cos(2πn/3)+sin(3πn/10)时的全响应');
xlabel('n');ylabel('y(n)');