数字信号处理实验3


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)');


猜你喜欢

转载自blog.csdn.net/weixin_45662974/article/details/118893505