本实验为《数字信号处理》课程的第一部分,旨在通过Matlab或Python等软件实现对离散时间信号及系统的分析,涵盖基本概念、信号运算和常见系统特性。
### 一、实验目标
本实验的主要目的是让学生通过MATLAB掌握以下技能:
1. **常用序列的MATLAB实现方法**:学生需要学会如何在MATLAB中生成并绘制常见的序列类型,例如单位脉冲序列、单位阶跃序列、矩形序列等。
2. **序列运算的MATLAB实现方法**:学生需要掌握如何在MATLAB中实现序列的基本运算,包括加法和乘法等操作。
3. **序列的卷积和运算的MATLAB实现方法**:学生需学会如何在MATLAB中计算两个序列的卷积。
### 二、实验要求
本实验的具体任务包括:
1. **生成并绘制常见序列**:利用MATLAB生成单位脉冲序列、单位阶跃序列、矩形序列等,并绘制这些序列的图形,以便直观地观察其特性。
2. **实现序列的基本运算**:通过MATLAB实现序列之间的基本运算操作,比如加法和乘法。
3. **计算卷积和**:学习如何在MATLAB中实现两个序列的卷积运算,并理解卷积的概念及其应用。
### 三、实验步骤详解
#### 1. 序列的生成与绘制
##### (1) 单位抽样序列
- **程序代码**:
```matlab
function [x,n] = impseq(n0,n1,n2)
if ((n0n2)||(n1>n2))
error(参数必须满足 n1<=n0<=n2)
end
n=[n1:n2];
x=[(n-n0)==0];
```
- **实验结果**:
- 输入命令:`[x,n]=impseq(5,0,8);`
- 绘制图形:`figure;stem(n,x,.); title(单位抽样序列生成); grid on`
##### (2) 单位阶跃序列
- **程序代码**:
```matlab
function [x,n] = stepseq(n0,n1,n2)
if ((n0n2)||(n1>n2))
error(参数必须满足 n1<=n0<=n2)
end
n=[n1:n2];
x=[(n-n0)>=0];
```
- **实验结果**:
- 输入命令:`[x,n]=stepseq(4,0,10);`
- 绘制图形:`figure;stem(n,x,.); title(单位阶跃序列生成); grid on`
##### (3) 矩形序列
- **程序代码**:
```matlab
function [x,n] = RN(np1,ns,nf)
N=np1;
n=ns:nf;
np=0;
x=[stepseq(0,ns,nf)-stepseq(N,ns,nf)];
```
- **实验结果**:
- 输入命令:`[x,n]=RN(6,0,10);`
- 绘制图形:`figure;stem(n,x,.); title(矩形序列生成); grid on; ylim([0,2])`
##### (4) 实指数序列
- **程序代码**:
```matlab
n=0:10;
x=(0.8).^n;
```
- **实验结果**:
- 绘制图形:`stem(n,x); title(实指数序列);`
##### (5) 复指数序列
- **程序代码**:
```matlab
n0=-1;
n2=10;
n=n0:n2;
x=exp((0.4+0.6j)*n);
figure(1)
subplot(211)
stem(n,real(x),.);
axis([-4 10 min(real(x))-1 1.2*max(real(x))])
title(复指数序列)
ylabel(实部);
grid;
subplot(212)
stem(n,imag(x),.);
axis([-4 10 min(imag(x))-1 1.2*max(imag(x))])
ylabel(虚部);
xlabel(n);
grid;
##### (6) 周期序列
- **程序代码**:
```matlab
x=[1,2,3,4];
N=length(x);
k=5;
nx=0:N-1;
ny=0:(k*N-1);
y=x(mod(ny,N)+1);
```
- **实验结果**:
- 绘制图形:`figure(1) subplot(211),stem(nx,x,.); axis([-1 N+1 0 5]); grid; subplot(212),stem(ny,y,.); axis([-1 k*N 0 5]); grid`
#### 2. 序列的基本运算
##### (1) 序列的和
- **程序代码