数字信号处理实验2


1.题目一

在这里插入图片描述

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np
n=np.linspace(-4,4,9)       #生成-5<n<5内的9个点
y1=np.zeros((1,9))
n=n.tolist()                #将array转换为list
y1=y1.tolist()
y1=y1[0]
index1=n.index(-3)
index2=n.index(4)
y1[index1]=1                #n=-3时的抽样值
y1[index2]=2                #n=4时的抽样值
plt.subplot(3,1,1)
plt.stem(n,y1,markerfmt="b.")
plt.title('$y_1(n)=\delta(n+3)+2\delta(n-4)$')
plt.xlabel('n')
plt.ylabel('$y_1(n)$')
n1=np.linspace(-4,4,9)      #生成-5<n<5内的9个点
x1=np.where(n1>=2,1,0)      #生成u(n-2)
x2=np.where(n1>=-2,1,0)     #生成u(n+2)
y2=x1+x2                    #生成u(n-2)+u(n+2)
plt.subplot(3,1,2)
plt.stem(n1,y2,markerfmt="b.")
plt.title('$y_2(n)=u(n-2)+u(n+2)$')
plt.xlabel('n')
plt.ylabel('$y_2(n)$')
n3=np.linspace(1,23,23)     #生成0<n<24内的23个点
x3=np.exp(-n3/16)           #生成自然指数序列e^(-n/16)
x4=5*np.sin(np.pi*2*n3/10)  #生成5sin(2πn/10)
y3=x3*x4                    #生成e^(-n/16)*5sin(2πn/10)
plt.subplot(3,1,3)
plt.stem(n3,y3,markerfmt="b.")
plt.title('$y_3(n)=e^{-n/16}+5sin(2πn/10)$')
plt.xlabel('n')
plt.ylabel('$y_3(n)$')
plt.xticks(n3)
plt.tight_layout()          #让子图之间不重叠
plt.show()

2.题目二

2.编写MATLAB程序,已知信号x(n)=nsin(n),试显示在0<n<20区间的下列波形:
在这里插入图片描述
直接对表达式中的x进行移位、翻转、尺度变换等操作,得到结果图如下:

在这里插入图片描述

n=1:19;
x=n.*sin(n);
y1=(n-3).*sin(n-3); %y1(n)=x(n-3)
y2=(-n).*sin(-n);       %y2(n)=x(-n)
y3=-x;              %y3(n)=-x(n)
y4=(-n+3).*sin(-n+3);%y4(n)=x(-n+3)
y5=(n/2).*sin(n/2); %y5(n)=x(n/2)
%绘图部分
subplot(3,2,1);stem(n,y1,'.');
title('y_1(n)=x(n-3)');xlabel('n');ylabel('y_1(n)');
axis([0,20,-14,17])
subplot(3,2,2);stem(n,y2,'.');
title('y_2(n)=x(-n)');xlabel('n');ylabel('y_2(n)');
subplot(3,2,3);stem(n,y3,'.');
title('y_3(n)=-x(n)');xlabel('n');ylabel('y_3(n)');
subplot(3,2,4);stem(n,y4,'.');
axis([0,20,-14,17])
title('y_4(n)=x(-n+3)');xlabel('n');ylabel('y_4(n)');
subplot(3,2,5);stem(n,y5,'.');
title('y_5(n)=x(n/2)');xlabel('n');ylabel('y_5(n)');
axis([0,20,-6,10])

3.题目三

3.编写MATLAB程序,已知离散线性时不变系统的系统函数,请分别用impz和dstep子函 数、filtic和filter子函数两种方法求解系统函数的冲激响应和阶跃响应:
在这里插入图片描述
对第一个H(z)使用上述两种方法求解系统函数的冲激响应和阶跃响应

在这里插入图片描述
对第二个H(z)也使用两种方法进行求解,得到的系统的单位冲激响应和单位阶跃响应如 下图:
在这里插入图片描述

a=[1,-1,1];
b=[1,-0.5];
N=32;               
n=0:N-1;
hn1=impz(b,a,N);     %求时域单位冲激响应
gn1=dstep(b,a,N);    %求时域单位阶跃响应
subplot(2,2,1),stem(n,hn1,'.');
title('用impz和dstep求解的单位冲激响应h_1(n)');
xlabel('n');ylabel('h_1(n)');
axis([0 N 1.1*min(hn1) 1.1*max(hn1)]);
subplot(2,2,2),stem(n,gn1,'.');
title('用impz和dstep求解的单位阶跃响应g_1(n)');
xlabel('n');ylabel('g_1(n)');
axis([0 N 1.1*min(gn1) 1.1*max(gn1)]);
x1=[n==0];          %生成输入单位冲激信号
hn2=filter(b,a,x1);  %对输入单位冲激信号进行滤波,得到冲激响应
x2=[n>=0];          %生成输入单位阶跃信号
gn2=filter(b,a,x2);  %对输入单位阶跃信号进行滤波,得到阶跃响应
subplot(2,2,3),stem(n,hn2,'.');
title('用filtic和filter求解的单位冲激响应h_1(n)');
xlabel('n');ylabel('h_1(n)');
axis([0 N 1.1*min(hn2) 1.1*max(hn2)]);
subplot(2,2,4),stem(n,gn2,'.');
title('用filtic和filter求解的单位阶跃响应g_1(n)');
xlabel('n');ylabel('g_1(n)');
axis([0 N 1.1*min(gn2) 1.1*max(gn2)]);

a2=[1,0,0,0,0,0];
b2=[1,0.5,-0.5,-1,-0.5,1];
hn3=impz(b2,a2,N);      %求时域单位冲激响应
gn3=dstep(b2,a2,N);     %求时域单位阶跃响应
figure;subplot(2,2,1),stem(n,hn3,'.');
title('用impz和dstep求解的单位冲激响应h_2(n)');
xlabel('n');ylabel('h_2(n)');
axis([0 N 1.1*min(hn3) 1.1*max(hn3)]);
subplot(2,2,2),stem(n,gn3,'.');
title('用impz和dstep求解的单位阶跃响应g_2(n)');
xlabel('n');ylabel('g_2(n)');
axis([0 N 1.1*min(gn3) 1.1*max(gn3)]);
hn4=filter(b2,a2,x1);  %对输入单位冲激信号进行滤波,得到冲激响应
gn4=filter(b2,a2,x2);  %对输入单位阶跃信号进行滤波,得到阶跃响应
subplot(2,2,3),stem(n,hn4,'.');
title('用filtic和filter求解的单位冲激响应h_2(n)');
xlabel('n');ylabel('h_2(n)');
axis([0 N 1.1*min(hn4) 1.1*max(hn4)]);
subplot(2,2,4),stem(n,gn4,'.');
title('用filtic和filter求解的单位阶跃响应g_2(n)');
xlabel('n');ylabel('g_2(n)');
axis([0 N 1.1*min(gn4) 1.1*max(gn4)]);

4.题目四

编写MATLAB程序,已知离散线性时不变系统的差分方程,请分别用impz和dstep子函 数、filtic和filter子函数两种方法求解系统函数的冲激响应和阶跃响应:
在这里插入图片描述
将差分方程两端进行Z变换,写出传输特性函数H(z),得到bm和ak,同样也可以使用 impz和dstep子函数、filtic和filter子函数求解。

对于第一个差分方程,y(n)的系数已为1,不需要再做归一化,直接求解得到的系统冲 激响应和阶跃响应如下图:在这里插入图片描述
对于第二个差分方程,y(n)的系数为2,需要对其做归一化后再求解系统函数的单位冲 激响应和单位阶跃响应,得到的结果如下:
在这里插入图片描述

a=[1,0,0,0,0,0,0];
b=[1,0,0,0,0,0,1];
N=32;
n=0:N-1;
hn1=impz(b,a,N);     %求时域单位冲激响应
gn1=dstep(b,a,N);    %求时域单位阶跃响应
subplot(2,2,1),stem(n,hn1,'.');
title('用impz和dstep求解的单位冲激响应h_1(n)');
xlabel('n');ylabel('h_1(n)');
axis([0 N 0 1.1*max(hn1)]);
subplot(2,2,2),stem(n,gn1,'.');
title('用impz和dstep求解的单位阶跃响应g_1(n)');
xlabel('n');ylabel('g_1(n)');
axis([0 N 0 1.1*max(gn1)]);
x1=[n==0];          %生成输入单位冲激信号
hn2=filter(b,a,x1);  %对输入单位冲激信号进行滤波,得到冲激响应
x2=[n>=0];          %生成输入单位阶跃信号
gn2=filter(b,a,x2);  %对输入单位阶跃信号进行滤波,得到阶跃响应
subplot(2,2,3),stem(n,hn2,'.');
title('用filtic和filter求解的单位冲激响应h_1(n)');
xlabel('n');ylabel('h_1(n)');
axis([0 N 0 1.1*max(hn2)]);
subplot(2,2,4),stem(n,gn2,'.');
title('用filtic和filter求解的单位阶跃响应g_1(n)');
xlabel('n');ylabel('g_1(n)');
axis([0 N 0 1.1*max(gn2)]);

a2=[2,-3,1];
b2=[0,1,0];
%归一化
nor=a2(1);              %归一化因子a0
a2=a2./nor;
b2=b2./nor;
hn3=impz(b2,a2,N);      %求时域单位冲激响应
gn3=dstep(b2,a2,N);     %求时域单位阶跃响应
figure;subplot(2,2,1),stem(n,hn3,'.');
title('用impz和dstep求解的单位冲激响应h_2(n)');
xlabel('n');ylabel('h_2(n)');
axis([0 N 1.1*min(hn3) 1.1*max(hn3)]);
subplot(2,2,2),stem(n,gn3,'.');
title('用impz和dstep求解的单位阶跃响应g_2(n)');
xlabel('n');ylabel('g_2(n)');
axis([0 N 1.1*min(gn3) 1.1*max(gn3)]);
hn4=filter(b2,a2,x1);  %对输入单位冲激信号进行滤波,得到冲激响应
gn4=filter(b2,a2,x2);  %对输入单位阶跃信号进行滤波,得到阶跃响应
subplot(2,2,3),stem(n,hn4,'.');
title('用filtic和filter求解的单位冲激响应h_2(n)');
xlabel('n');ylabel('h_2(n)');
axis([0 N 1.1*min(hn4) 1.1*max(hn4)]);
subplot(2,2,4),stem(n,gn4,'.');
title('用filtic和filter求解的单位阶跃响应g_2(n)');
xlabel('n');ylabel('g_2(n)');
axis([0 N 1.1*min(gn4) 1.1*max(gn4)]);

猜你喜欢

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