### MATLAB上机考试知识点解析
#### 一、产生20点单位抽样序列及绘图
**知识点**:本题考查了如何在MATLAB中生成单位抽样序列(即δ[n])及其图形绘制。
**程序代码**:
```matlab
n = 0:19; % 定义时间序列
x = [1, zeros(1, 19)]; % 生成单位抽样序列
stem(n, x); % 绘制单位抽样序列
xlabel('n'); % 设置横轴标签
ylabel('幅度'); % 设置纵轴标签
title('20点单位抽样序列');
```
**解释**:
- `n = 0:19`定义了时间索引n的范围。
- `x = [1, zeros(1, 19)]`生成一个长度为20的序列,其中第一个元素为1,其余均为0,这正是单位抽样序列的定义。
- `stem(n, x)`使用MATLAB中的stem函数绘制出单位抽样序列的图形。
#### 二、产生20点单位阶跃序列及绘图
**知识点**:本题考查了如何在MATLAB中生成单位阶跃序列(即u[n])及其图形绘制。
**程序代码**:
```matlab
n = 0:19;
x = ones(1, 20); % 生成单位阶跃序列
stem(n, x);
xlabel('n');
ylabel('幅度');
title('20点单位阶跃序列');
```
**解释**:
- `x = ones(1, 20)`生成一个长度为20的序列,所有元素均为1,这正是单位阶跃序列的定义。
#### 三、计算两序列的卷积和并绘图
**知识点**:本题考查了如何在MATLAB中计算两个序列的卷积和,并且绘制出原始序列及卷积结果的图形。
**程序代码**:
```matlab
x = [1, 2, 3];
h = [2, 4, 3, 5];
% 计算卷积
y = conv(x, h);
% 定义时间索引
n_x = 0:length(x)-1;
n_h = 0:length(h)-1;
n_y = n_x(1) + n_h(1):n_x(end) + n_h(end);
% 绘图
figure;
subplot(3, 1, 1);
stem(n_x, x);
xlabel('n');
ylabel('x(n)');
title('x(n)');
subplot(3, 1, 2);
stem(n_h, h);
xlabel('n');
ylabel('h(n)');
title('h(n)');
subplot(3, 1, 3);
stem(n_y, y);
xlabel('n');
ylabel('y(n)');
title('卷积结果');
```
**解释**:
- 使用`conv`函数计算两序列的卷积。
- `n_x`和`n_h`定义了原始序列的时间索引。
- `n_y`定义了卷积结果的时间索引。
- 使用`subplot`函数分三个子图分别绘制`x(n)`、`h(n)`和卷积结果`y(n)`。
#### 四、计算差分方程并求单位抽样响应和阶跃响应
**知识点**:本题考查了如何在MATLAB中解差分方程,并求解系统的单位抽样响应和阶跃响应。
**程序代码**:
```matlab
% 假设差分方程为 y[n] = 0.5*y[n-1] + x[n] - 0.5*x[n-1]
% 初始化序列
N = 40;
y = zeros(1, N);
x = [1, zeros(1, N-1)];
% 求解单位抽样响应
for n = 2:N
y(n) = 0.5*y(n-1) + x(n) - 0.5*x(n-1);
end
% 绘制单位抽样响应
figure;
stem(0:N-1, y);
xlabel('n');
ylabel('y(n)');
title('单位抽样响应');
% 求解阶跃响应
x = ones(1, N);
y = zeros(1, N);
y(1) = x(1);
for n = 2:N
y(n) = 0.5*y(n-1) + x(n) - 0.5*x(n-1);
end
% 绘制阶跃响应
figure;
stem(0:N-1, y);
xlabel('n');
ylabel('y(n)');
title('阶跃响应');
```
**解释**:
- 通过循环迭代的方式解差分方程。
- 分别计算单位抽样响应和阶跃响应。
- 使用`stem`函数绘制出响应的图形。
#### 五、部分分式展开及系统零极图绘制
**知识点**:本题考查了如何在MATLAB中进行部分分式展开,并绘制系统的零极图。
**程序代码**:
```matlab
num = [1, 2]; % 分子系数
den = [1, -0.5]; % 分母系数
% 部分分式展开
[r, p, k] = residue(num, den);
% 绘制零极图
zplane(num, den);
% 输出部分分式展开的结果
disp('部分分式展开结果:');
disp([r, p, k]);
```
**解释**:
- 使用`residue`函数进行部分分式展开。
- 使用`zplane`函数绘制系统的零极图。
#### 六、因果LTI系统的分析
**知识点**:本题考查了如何在MATLAB中分析因果LTI系统的单位抽样响应、幅频响应、相频响应和零极点分布。
**程序代码**:
```matlab
num = [1, 2]; % 分子系数
den = [1, -0.5]; % 分母系数
% 单位抽样响应
[h, n] = impz(num, den);
% 幅频响应和相频响应
[H, w] = freqz(num, den, 512);
mag = abs(H); % 幅度
phase = angle(H); % 相位
% 零极点分布
zplane(num, den);
% 绘制单位抽样响应
figure;
stem(n, h);
xlabel('n');
ylabel('h(n)');
title('单位抽样响应');
% 绘制幅频响应
figure;
plot(w/pi, mag);
xlabel('\omega/\pi');
ylabel('|H(e^{j\omega})|');
title('幅频响应');
% 绘制相频响应
figure;
plot(w/pi, phase*180/pi);
xlabel('\omega/\pi');
ylabel('\phi(\omega)');
title('相频响应');
```
**解释**:
- 使用`impz`函数求解系统的单位抽样响应。
- 使用`freqz`函数求解系统的幅频响应和相频响应。
- 使用`zplane`函数绘制系统的零极点分布图。
这些MATLAB上机考试题涵盖了信号处理中常见的几个知识点,包括序列的生成、卷积计算、差分方程的解法、部分分式展开、零极点分布等,对于理解和掌握MATLAB在信号与系统领域的应用具有重要意义。