在 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 中用于离散化连续时间系统的主要工具。
- 离散化方法有多种选择,如 ZOH、FOH、Tustin 和匹配法等。
- 离散化后的系统可以通过 tfdata 提取分子和分母系数。
- 离散化是数字控制系统和数字信号处理中的重要步骤,用于将连续时间模型转换为离散时间模型
三. 离散后的传递函数仿真
3.1 将离散后的传递函数导入到simulink进行仿真
- 打开 Simulink:在 MATLAB 中,输入 simulink 打开 Simulink 环境。
- 创建新的模型:点击 New,然后选择 Blank Model。
- 添加离散传递函数模块:
在 Simulink 库浏览器中,搜索并拖动一个 Discrete Transfer Function 模块到你的模型中。可以通过以下路径找到该模块:
Simulink -> Discrete -> Discrete Transfer Function。 - 配置传递函数模块:
双击 Discrete Transfer Function 模块,打开模块参数对话框。
在 Numerator 和 Denominator 中输入离散传递函数的系数。
你可以从 MATLAB 中获取离散化的传递函数的系数。例如:
% 获取离散传递函数的系数
[num_d, den_d] = tfdata(sys_d, 'v');
然后将 num_d 和 den_d 分别复制到 Discrete Transfer Function 模块的 Numerator 和 Denominator 参数框中。
3.2 配置模型的其他部分
1. 输入信号源:
在 Simulink 中,使用一个合适的输入源(例如 Step、Sine Wave 或 Constant),并将其连接到传递函数模块的输入端。
2.显示输出:
使用一个 Scope 模块来显示传递函数的输出。将传递函数模块的输出端连接到 Scope 模块的输入端。
3.3 设置仿真参数
1.设置仿真的时间:
在 Simulink 中,点击 Simulation 菜单,然后选择 Model Configuration Parameters。在 Solver 中选择适合离散系统的解算器,例如:
- Solver:选择 Discrete (no continuous states),然后设置采样时间 Ts,这应该与你离散化时使用的采样时间一致。
- Start time 和 Stop time:根据你的仿真需要设置仿真开始和结束时间。
2.配置仿真精度:
确保选择适当的时间步长,通常,步长应该和采样时间相同。
3.4 运行仿真并查看结果
- 点击 Run 按钮来开始仿真。
- 在 Scope 中查看仿真结果,观察离散系统的响应。