基于matlab的信号与系统实验指导课后详细答案(含源代码)
时间: 2023-05-17 11:01:28 浏览: 401
根据matlab信号与系统实验指导课后的要求,需要完成以下实验:
1. Simulink模拟信号间的加法和乘法。
2. 使用FFT函数分析一个频率为50Hz,振幅为5V的正弦波信号的频谱。
3. 利用Z变换求解差分方程的解析式。
4. 用Matlab绘制离散单位阶跃函数和单位冲激函数。
以下是对每个实验具体的步骤和源代码:
实验1:Simulink模拟信号间的加法和乘法
步骤:
1. 打开Simulink,并创建一个新模型。
2. 在模型中添加三个正弦波信号源,设置其频率分别为10Hz、20Hz和30Hz,振幅分别为1、2和3。
3. 将三个信号源的输出分别通过加法器和乘法器进行相加和相乘。
4. 将相加和相乘的结果输出到示波器中,观察它们的波形。
源代码:
```matlab
% 创建一个新模型
sys = new_system('simulink_add_mult');
% 添加三个正弦波信号源
sin1 = add_block('built-in/Sine Wave','simulink_add_mult/Sine Wave1');
set_param(sin1,'Frequency','10');
set_param(sin1,'Amplitude','1');
sin2 = add_block('built-in/Sine Wave','simulink_add_mult/Sine Wave2');
set_param(sin2,'Frequency','20');
set_param(sin2,'Amplitude','2');
sin3 = add_block('built-in/Sine Wave','simulink_add_mult/Sine Wave3');
set_param(sin3,'Frequency','30');
set_param(sin3,'Amplitude','3');
% 连接信号源到加法器和乘法器
add = add_block('built-in/Sum','simulink_add_mult/Sum');
connect_blocks(sin1,'1',add,'1');
connect_blocks(sin2,'1',add,'2');
mult = add_block('built-in/Product','simulink_add_mult/Product');
connect_blocks(mult,'1',sin3,'1');
connect_blocks(mult,'1',add,'3');
% 输出结果到示波器中
osc = add_block('built-in/scope','simulink_add_mult/Scope');
connect_blocks(add,'1',osc,'1');
connect_blocks(mult,'1',osc,'2');
% 保存模型并打开
save_system(sys);
open_system(sys);
```
实验2:使用FFT函数分析一个频率为50Hz,振幅为5V的正弦波信号的频谱
步骤:
1. 使用linspace生成时间序列,根据正弦波的周期设置采样点数。
2. 根据正弦波的振幅、频率和时间序列计算正弦波信号。
3. 使用FFT函数计算正弦波信号的频谱,再将结果归一化。
4. 使用stem函数绘制频谱图。
源代码:
```matlab
% 生成时间序列
t = linspace(0,1/50,1000);
% 计算正弦波信号
A = 5; % 振幅
f = 50; % 频率
y = A*sin(2*pi*f*t);
% 计算频谱
N = length(y); % 信号长度
Y = fft(y)/N; % 计算频域
f = linspace(0,1/N,N); % 用于绘制x轴
% 绘制频谱图
stem(f,abs(Y));
grid on;
xlabel('Frequency (Hz)');
ylabel('Amplitude');
title('Frequency spectrum of 50Hz sine wave');
```
实验3:利用Z变换求解差分方程的解析式
步骤:
1. 使用syms函数定义符号变量s和z。
2. 使用ztrans函数对差分方程进行Z变换,得到解析式。
3. 使用iztrans函数进行逆Z变换,将解析式转换为差分方程解。
源代码:
```matlab
% 定义符号变量
syms s z;
% 差分方程
y(n+2) - 2*y(n+1) + y(n) = x(n+2)
% Z变换
Y = ztrans(y(n),n,z);
X = ztrans(x(n),n,z);
H = Y/X;
% 逆Z变换
h = iztrans(H,n,z);
pretty(h)
```
实验4:用Matlab绘制离散单位阶跃函数和单位冲激函数
步骤:
1. 使用step函数生成离散的单位阶跃函数。
2. 使用dirac函数生成离散的单位冲激函数。
3. 使用stem函数绘制离散单位阶跃函数和单位冲激函数。
源代码:
```matlab
% 生成离散的单位阶跃函数
n = -5:5;
u = stepfun(n,0);
% 生成离散的单位冲激函数
d = dirac(n);
% 绘制离散单位阶跃函数和单位冲激函数
subplot(2,1,1);
stem(n,u);
xlabel('n');
ylabel('u(n)');
title('Discrete unit step function');
subplot(2,1,2);
stem(n,d);
xlabel('n');
ylabel('δ(n)');
title('Discrete unit impulse function');
```