数字信号处理实验1


1.题目一

分别用MATLAB和Python画出信号x(n)=,其中分别作图,取a=0.5和a=1.5,绘制图形如下:

在这里插入图片描述

n=-2:1:20;            %x(n)信号的范围
n0=0;                       
a1=0.5;                     %|a|<1
a2=1.5;                     %|a|>1
u=stepfun(n,n0);            %生成u(n)
y1=a1.^(n/2).*u;            %x1(n)
y2=a2.^(n/2).*u;            %x2(n)
subplot(1,2,1)
stem(n,y1,'.');grid on
title('|a|<1时x(n)的图像');xlabel('n');ylabel('y(n)');legend('y=0.5^n^/^2');
subplot(1,2,2)
stem(n,y2,'.');grid on
title('|a|>1时x(n)的图像');xlabel('n');ylabel('y(n)');legend('y=1.5^n^/^2');
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
def un(n):  #生成阶跃信号u(n)
    r=np.where(n>0.0,1.0,0.0)
    return r
n=np.linspace(-2,20,22)
y1=0.5**(n/2)*un(n) #a<1的情况
y2=1.5**(n/2)*un(n) #a>1的情况
fig = plt.figure(figsize=(8,6))
ax1 = fig.add_subplot(1, 2, 1)
ax1.stem(n,y1,linefmt="b-",markerfmt="b.",basefmt="r-",label='$y=0.5^{n/2}$')
ax1.set_title('|a|<1时x(n)的图像 ')
ax1.set_xlabel('n') 
ax1.set_ylabel('y(n)') 
ax1.legend(loc='best')
ax2 = fig.add_subplot(1, 2, 2)
ax2.stem(n,y2,linefmt="b-",markerfmt="b.",basefmt="r-",label='$y=1.5^{n/2}$')
ax2.set_title('|a|>1时x(n)的图像 ')
ax2.set_xlabel('n') 
ax2.set_ylabel('y(n)') 
ax2.legend(loc='best')
plt.show()

2.题目二

2.分别用MATLAB和Python画出信号x(n)=sin(nπ/10),周期分别
(1)分别扩展两倍 (2)压缩一半
扩展两倍即x(n/2),压缩两倍即x(2n),绘制图形如下:

在这里插入图片描述

n=0:1:40;
x_n=sin(pi.*n/10);
x_n1=sin(pi.*n/2/10);  %周期扩展两倍
x_n2=sin(pi.*n*2/10);   %周期压缩一半
subplot(3,1,1),stem(n,x_n,'.');
title('原信号x(n)');xlabel('n');ylabel('x(n)');
subplot(3,1,2),stem(n,x_n1,'.');
title('周期扩展两倍的信号x(n/2)');xlabel('n');ylabel('x(n/2)');
subplot(3,1,3),stem(n,x_n2,'.');
title('周期压缩一半的信号x(2n)');xlabel('n');ylabel('x(2n)');
import matplotlib.pyplot as plt
import numpy as np
n=np.linspace(0,40,40)
y1=np.sin(np.pi*n/10)
y2=np.sin(np.pi*n/20) #周期扩展两倍
y3=np.sin(np.pi*n/5)    #周期压缩一半
plt.subplot(3,1,1)
plt.stem(n,y1,markerfmt="b.")
plt.title('x(n)')
plt.xlabel('n')
plt.ylabel('x(n)')
plt.subplot(3,1,2)
plt.stem(n,y2,markerfmt="b.")
plt.title('x(n/2)')
plt.xlabel('n')
plt.ylabel('x(n/2)')
plt.subplot(3,1,3)
plt.stem(n,y3,markerfmt="b.")
plt.title('x(2n)')
plt.xlabel('n')
plt.ylabel('x(2n)')
plt.subplots_adjust(wspace =1, hspace =1)
plt.show()

3.题目三

3.令x(n)={1,2,3,4,5,6,7,6,5,4,3,2,1},(),画出序列y(n)=x(3-n)+x(n)·x(n-2)
先通过移位、反折得到x(3-n)、x(n-2)、x(n),然后通过补零让它们的坐标一一对应,直接相乘相加即得到结果。绘制图形如下:

在这里插入图片描述

n=0:12;
x_n=[1,2,3,4,5,6,7,6,5,4,3,2,1];
n1=-fliplr(n);      %将序列进行翻转
n1=n1+3;  %右移3位
x_n1=fliplr(x_n);   %得到x(3-n)
%做x(n)和x(n-2)的序列相乘
n2=n+2;         %右移2位
n3=min([n2,n]):max([n2,n]);
N=length(n3);
y1=zeros(1,N);y2=zeros(1,N);
y1(find((n3>=min(n2))&(n3<=max(n2))))=x_n;            %对序列补零后进行相乘
y2(find((n3>=min(n))&(n3<=max(n))))=x_n;  
x1=y1.*y2;  %x(n)*x(n-2)
%做x(3-n)+x(n)*x(n-2)
n4=min([n1,n3]):max([n1,n3]);
N1=length(n4);
y3=zeros(1,N1);y4=zeros(1,N1);
y3(find((n4>=min(n1))&(n4<=max(n1))))=x_n1;     %对序列补零后相加
y4(find((n4>=min(n3))&n4<=max(n3)))=x1;
x=y3+y4;
stem(n4,x,'.');title('y(n)=x(3-n)+x(n)·x(n-2)');
xlabel('n');ylabel('y(n)');

4.题目四

4.sinc信号可表示为sinc(n)=,用0.1s的采样间隔自-10~10s采样,绘制sinc信号。
sinc(n)绘制出来的横坐标是πn,因此需将输入处理成n/π,得到的才是以0.1s的采样间隔进行采样的sinc信号。绘制图形如下:

在这里插入图片描述

n=-10:0.1:10;   %产生采样时间序列
sinc1=sinc(n/pi);   %得到sinc信号
stem(n,sinc1,'.');title('sinc信号');
xlabel('n');ylabel('sinc(n)');

5.题目五

5.已知一个系统:在这里插入图片描述
(1)画出系统单位冲激响应和单位阶跃响应 (2)画出系统的输入序列x(n)=R5(n)的响应
使用impz、stepz、conv求解对应的单位冲激响应、单位阶跃响应、输出响应。绘图结果如下:

在这里插入图片描述

a=[1,0,1/3];    %极点
b=[1/6,1/2,1/2,1/6];    %零点
N=32;
n=0:N-1;
hn=impz(b,a,n);%求时域单位冲激响应
gn=stepz(b,a,n);%求时域单位阶跃响应
subplot(3,1,1),stem(n,hn,'.');
xlabel('n');ylabel('h(n)');title('系统的单位冲激响应');
subplot(3,1,2),stem(n,gn,'.');
xlabel('n');ylabel('g(n)');title('系统的单位阶跃响应');
Rn=[1,1,1,1,1 zeros(1,N-5)];    %输入序列x(n)=R5(n)
yn=conv(Rn,hn);
subplot(313),stem(yn,'.')
xlabel('n');ylabel('y(n)');title('对输入序列x[n]的响应');

猜你喜欢

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