一、实验目的
了解 MATLAB 软件数字信号处理工具箱的初步使用方法。
掌握其简单的 MATLAB 语言进行简单的时域信号分析 。
二、实验内容
1. 序列相加和相乘
已知两序列 x1=[0,1,2,3,4,3,2,1,0];n1=[-2:6];x2=[2,2,0,0,0,-2,-2],n2=[2:8].求他们的和ya及乘积yp.
x1=[0,1,2,3,4,3,2,1,0];ns1=-2;
x2=[2,2,0,0,0,-2,-2];ns2=2;
nf1=ns1+length(x1)-1;nf2=ns2+length(x2)-1;
ny=min(ns1,ns2):max(nf1,nf2);
xa1=zeros(1,length(ny));xa2=xa1;
xa1(find((ny>=ns1)&(ny<=nf1)==1))=x1;
xa2(find((ny>=ns2)&(ny<=nf2)==1))=x2;
ya=xa1+xa2
yp=xa1.*xa2
subplot(4,1,1),stem(ny,xa1,'.')
subplot(4,1,2),stem(ny,xa2,'.')
line([ny(1),ny(end)],[0,0])
subplot(4,1,3),stem(ny,ya,'.')
line([ny(1),ny(end)],[0,0])
subplot(4,1,4),stem(ny,yp,'.')
line([ny(1),ny(end)],[0,0])
![](https://i-blog.csdnimg.cn/blog_migrate/a6146ad612a33dbb2f91dd632b8f7f2e.png)
2. 序列的合成和截取
![](https://i-blog.csdnimg.cn/blog_migrate/592183ae6f6c52b3cc4059d262916c50.png)
clear;close all
n0=input('输入序列起点:n0=');
N=input('输入序列长度:N=');
n1=input('输入位移:n1=');
n=n0:n1+N+5;
u=[(n-n1)>=0];
x1=[(n-n1)>=0]-[(n-n1-N)>=0]
x2=[(n>=n1)&(n<(N+n1))];
x3=exp(j*n*pi/8).*x2;
subplot(2,2,1);stem(n,x1,'.');
xlabel('n');ylabel('x1(n)');
axis([n0,max(n),0,1]);
subplot(2,2,3);stem(n,x2,'.');
xlabel('n');ylabel('x2(n)');
axis([n0,max(n),0,1]);
subplot(2,2,2);stem(n,real(x3),'.');
xlabel('n');ylabel('x3(n)的实部');
line([n0,max(n)],[0,0]);
axis([n0,max(n),-1,1]);
subplot(2,2,4);stem(n,imag(x3),'.');
xlabel('n');ylabel('x3(n)的虚部');
line([n0,max(n)],[0,0]);
axis([n0,max(n),-1,1]);
3. 序列的移位和周期延拓运算
clear;close all
N=24;M=8;
m=input('输入移位值:m=');
if (m<1|m>=N-M+1)
fprintf('输入数据不在规定范围内!');
end
n=0:N-1;
x1=(0.8).^n; x2=[(n>=0)&(n<M)];
xn=x1.*x2;
xm=zeros(1,N);
for k=m+1:m+M
xm(k)=xn(k-m);
end
xc=xn(mod(n,8)+1);
xcm=xn(mod(n-m,8)+1);
subplot(2,2,1);stem(n,xn,'.');
xlabel('n');ylabel('xn');
axis([0,length(n),0,1]);
subplot(2,2,2);stem(n,xm,'.');
xlabel('n');ylabel('x(n-m)');
axis([0,length(n),0,1]);
subplot(2,2,3);stem(n,xc,'.');
xlabel('n');ylabel('x(mod(n,g))');
axis([0,length(n),0,1]);
subplot(2,2,4);stem(n,xcm,'.');
xlabel('n');ylabel('x(mod(n-m,g))');
axis([0,length(n),0,1]);
12
4. 离散系统对几种常用信号的响应
clear;close all;
N=64;n=0:N-1;m=10;
B=0.0003738*conv([1,1],conv([1,1],conv([1,1],...
conv([1,1],conv([1,1],[1,1])))))
A=conv([1,-1.2686,0.7051],conv([1,-1.0106,0.3583],...
[1,-0.9044,0.2155]))
x1=[n==0];
y1=filter(B,A,x1);
x2=[(n-m)==0];
y2=filter(B,A,x2);
x3=[n>=0];
y3=filter(B,A,x3);
x4=[(n>=0)&(n<32)];
y4=filter(B,A,x4);
x5=exp(j*pi*n/8);
y5=filter(B,A,x5);
subplot(3,2,1),stem(n,y1,'.')
xlabel('n'),ylabel('y1(n)');
axis([0,N,-0.05,0.15]);
subplot(3,2,2),stem(n,y2,'.')
xlabel('n'),ylabel('y2(n)');
axis([0,N,-0.05,0.15]);
subplot(3,2,3),stem(n,y3,'.')
xlabel('n'),ylabel('y3(n)');
axis([0,N,0,0.6]);
subplot(3,2,4),stem(n,y4,'.')
xlabel('n'),ylabel('y4(n)');
axis([0,N,-0.1,0.6]);
subplot(3,2,5),stem(n,real(y5),'.')
xlabel('n'),ylabel('Re[y5(n)]');
axis([0,N,-1,1]);
subplot(3,2,6),stem(n,imag(y5),'.')
xlabel('n'),ylabel('Im[y5(n)]');
axis([0,N,-1,1])
5. 系统线性性质验证
clear;close all;
N=64;n=0:N-1;m=20;
B=1;A=[1,-0.8];
x1=0.8.^n;
x=[(n>=0)&(n<32)];
x1=x1.*x;
y1=filter(B,A,x1);
x2=[(n-m)==0];
y2=filter(B,A,x2);
x3=5*x1+3*x2;
y3=filter(B,A,x3);
y=5*y1+3*y2;
subplot(2,2,1),stem(n,y1,'.')
xlabel('n'),ylabel('y1(n)');
axis([0,N,0,2])
subplot(2,2,2),stem(n,y2,'.')
xlabel('n'),ylabel('y2(n)')
axis([0,N,0,1])
subplot(2,2,3),stem(n,y3,'.')
xlabel('n'),ylabel('y3(n)')
axis([0,N,0,10])
subplot(2,2,4),stem(n,y,'.')
xlabel('n'),ylabel('y4(n)')
axis([0,N,0,10])
6. 离散序列的卷积计算
![](https://i-blog.csdnimg.cn/blog_migrate/bbaf8dd0919ec34dbbbf55217a85d8a4.png)
n1=0:19;
x12=[(n1>=0&n1<20)]; %生成矩阵序列R20(n)
x1=0.9.^n1;
x1n=x1.*x12;
n11=0:9;
h1n=[(n11>=0&n11<10)]; %得到h1(n)
h2n=h1n;
n2=0:(19+5);
x2n=zeros(1,25);
for i=1:20
x2n(i+5)=x1n(i); %由x1(n)得到x2(n)
end
dt=1;
y1n=conv(x1n,h1n); %求x1(n)与h1(n)的卷积y1(n)
t1=dt*([1:length(y1n)]-1); %建立横坐标轴t1
y2n=conv(x2n,h2n);
t2=dt*([1:length(y2n)]-1);
subplot(3,2,1);stem(n1,x1n,'.');ylabel('x1(n)');
subplot(3,2,2);stem(n2,x2n,'.');ylabel('x2(n)');
subplot(3,2,3);stem(n11,h1n,'.');ylabel('h1(n)');
subplot(3,2,4);stem(n11,h2n,'.');ylabel('h2(n)');
subplot(3,2,5);stem(t1,y1n,'.');ylabel('y1(n)');
subplot(3,2,6);stem(t2,y2n,'.');ylabel('y2(n)');
三、实验中遇到的问题及解决过程
- 在输入程序的时候不够仔细,出现了拼写错误,把tel写成了tle导致查错的时候没有发现错误在哪里
- 没有注意到中英文输入法的标点符号是有区别的,导致最后程序执行的时候出现了好几个错误
- 输入程序的时候,对于中括号和小括号的配对没有注意,导致执行时出现了错误
四、实验提问
- 每行末尾……是什么意思?代表这行内容还没有结束。
- = =是什么意思?等于的意思。
- filter是什么意思?滤波器。
五、实验总结
通过本次实验,使我初步认识里数字信号处理实验的一些基本操作。
了解了MATLAB软件数字信号处理工具箱的初步使用,并掌握了简单的MATLAB语言进行简单的时域信号分析。
通过基本技能训练内容对这些知识掌握的更加熟练,更加深刻。