simulink传递函数的离散化

MATLAB
c2d 函数用于将连续时间的传递函数(或状态空间模型)转换为离散时间模型
这个过程叫做离散化,通常用于数字控制系统中。
当你从连续控制系统过渡到数字控制系统时,你需要将连续时间的传递函数离散化

一. c2d 函数的基本语法

%sys_c:	  需要离散化的连续时间传递函数或状态空间模型。
%Ts: 	  离散化后的采样时间(单位为秒)。
%method:  离散化的方法。
sys_d = c2d(sys_c, Ts, method)

1.1 Zero-Order Hold (ZOH)

零阶保持法假设输入信号在每个采样周期内保持不变。它适用于多数情况下的离散化,尤其是当信号变化较慢时。

sys_d_zoh = c2d(sys_c, Ts, 'zoh');

1.2 First-Order Hold (FOH)

前向阶保持法假设输入信号的变化在每个采样周期内是线性的。适用于信号变化较快的情况

sys_d_foh = c2d(sys_c, Ts, 'foh');

1.3 Tustin (双线性变换)

Tustin 方法是一种常见的离散化方法,它通过双线性变换将连续时间系统的传递函数映射到离散时间系统。它的优点是能够保持连续系统的频率响应特性,尤其适用于高速信号的离散化

sys_d_tustin = c2d(sys_c, Ts, 'tustin');

1.4 Matched Z-Transform

这种方法通过匹配系统的极点和零点进行离散化,保持系统的本质特性。

sys_d_matched = c2d(sys_c, Ts, 'matched');

1.5 其他相关函数

  • d2c: 反向操作,适用于将离散时间系统转回连续时间
  • discretize: 将一组连续时间系统离散化为一系列的离散时间系统

二. 离散化传递函数

2.1 创建一个连续时间的传递函数

G ( s ) = 10 s + 1 G(s) = \frac{10}{s+1} G(s)=s+110

sys_c = tf([10], [1, 1]);  % 创建一个传递函数 G(s) = 10 / (s + 1)

2.2 使用 c2d 离散化传递函数

接下来,我们使用 c2d 函数将该传递函数离散化,
假设采样时间 Ts 为 0.1 秒,使用零阶保持法(ZOH)进行离散化

Ts = 0.1;  % 采样时间
sys_d = c2d(sys_c, Ts, 'zoh');  % 离散化传递函数,使用 ZOH 方法

2.3 查看离散化传递函数并提取参数保存到变量

sys_d  % 查看离散化后的传递函数
[num, den] = tfdata(sys_d);
disp('Numerator:');
disp(num{1});
disp('Denominator:');
disp(den{1});

在这里插入图片描述

2.4 完整流程代码

% 创建连续时间传递函数
sys_c = tf([10], [1, 1]);

% 设置采样时间
Ts = 0.1;

% 离散化传递函数(使用 Tustin 方法)
sys_d = c2d(sys_c, Ts, 'Tustin ');

% 查看离散化后的传递函数
disp('离散化后的传递函数:');
disp(sys_d);

% 提取离散传递函数的分子和分母系数
[num_d, den_d] = tfdata(sys_d);
disp('Numerator:');
disp(num_d{1});
disp('Denominator:');
disp(den_d{1});

2.5 总结

  • c2d 函数是 MATLAB 中用于离散化连续时间系统的主要工具。
  • 离散化方法有多种选择,如 ZOHFOHTustin匹配法等。
  • 离散化后的系统可以通过 tfdata 提取分子分母系数。
  • 离散化是数字控制系统和数字信号处理中的重要步骤,用于将连续时间模型转换为离散时间模型

三. 离散后的传递函数仿真

3.1 将离散后的传递函数导入到simulink进行仿真

  • 打开 Simulink:在 MATLAB 中,输入 simulink 打开 Simulink 环境。
  • 创建新的模型:点击 New,然后选择 Blank Model
  • 添加离散传递函数模块:
    Simulink 库浏览器中,搜索并拖动一个 Discrete Transfer Function 模块到你的模型中。可以通过以下路径找到该模块:
    Simulink -> Discrete -> Discrete Transfer Function
  • 配置传递函数模块:
    双击 Discrete Transfer Function 模块,打开模块参数对话框。
    NumeratorDenominator 中输入离散传递函数的系数。
    你可以从 MATLAB 中获取离散化的传递函数的系数。例如:
% 获取离散传递函数的系数
[num_d, den_d] = tfdata(sys_d, 'v');

然后将 num_dden_d 分别复制到 Discrete Transfer Function 模块的 NumeratorDenominator 参数框中。

3.2 配置模型的其他部分

1. 输入信号源:

Simulink 中,使用一个合适的输入源(例如 StepSine WaveConstant),并将其连接到传递函数模块的输入端。

2.显示输出:

使用一个 Scope 模块来显示传递函数的输出。将传递函数模块的输出端连接到 Scope 模块的输入端。

3.3 设置仿真参数

1.设置仿真的时间:

Simulink 中,点击 Simulation 菜单,然后选择 Model Configuration Parameters。在 Solver 中选择适合离散系统的解算器,例如:

  • Solver:选择 Discrete (no continuous states),然后设置采样时间 Ts,这应该与你离散化时使用的采样时间一致。
  • Start timeStop time:根据你的仿真需要设置仿真开始和结束时间。

2.配置仿真精度:

确保选择适当的时间步长,通常,步长应该和采样时间相同。

3.4 运行仿真并查看结果

  • 点击 Run 按钮来开始仿真。
  • Scope 中查看仿真结果,观察离散系统的响应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值