Matlab 模型仿真
大约 7 分钟
Matlab 模型仿真
系统数学模型
系统数学模型函数用于创建系统的数学模型 (传递参数), 函数参数即模型的参数, 返回一个模型对象
tf
函数
- 功能: 创建传递函数模型
- 函数原型
sys = tf(num, den)
- 参数
num
实数数组
传递函数分子多项式系数, 从高次项到低次项den
实数数组
传递函数分母多项式系数, 从高次项到低次项
- 返回值
返回创建的传递函数模型 - 注意
传递函数的分母次数必须大于分子, 即size(den)>size(num)
- 示例
num = [1 2];
den = [1 2 3];
sys = tf(num, den)
示例代码将创建传递函数
zpk
函数
- 功能: 创建零极点的传递函数模型
- 函数原型
sys = zpk(z, p, k)
- 参数
z
复数数组
传递函数的所有零点p
复数数组
传递函数的所有极点K
实数
传递函数的增益
- 返回值
返回创建的传递函数模型 - 注意
- 允许传入复数极点或零点, 但必须同时传入两个共轭极点/零点
- 对于多重根重复输入即可
- 注意, 如下方公式所示,
zpk
得到的是 , 与教材上的传递函数 形式不同, 特别注意
- 示例
z = [4 5];
p = [1 2 3];
sys = zpk(z, p, 6);
示例代码将创建传递函数
ss
函数
- 功能: 创建系统状态空间模型
- 函数原型
ss_sys = ss(A, B, C, D)
- 参数
A
状态矩阵 的矩阵B
输入矩阵 的矩阵C
输出矩阵 的矩阵D
直接传输矩阵 的矩阵
- 返回值
返回值为系统的状态空间模型对象 - 注意
模型连接
series
函数
- 功能: 串联两个数学模型
- 函数原型
sys = serise(sys1, sys2)
- 参数
sys1, sys2
数学模型
参与串联的两个模型
- 返回值
返回串联后的函数模型 - 示例
sys1 = tf([2 9], [4 7 2]);
sys2 = tf([1 6], [1 7 1]);
sys = series(sys1, sys2);
示例将串联两个传递函数, 得到
parallel
函数
- 功能: 并联两个数学模型
- 函数原型
sys = parallel(sys1, sys2)
- 参数
sys1, sys2
数学模型
参与并联的两个模型
- 返回值
返回并联后的函数模型 - 示例
sys1 = tf([2 9], [4 7 2]);
sys2 = tf([1 6], [1 7 1]);
sys = parallel(sys1, sys2);
示例将并联两个传递函数, 得到
feedback
函数
- 功能: 反馈连接两个数学模型
- 函数原型
sys = parallel(sys1, sys2, sign=-1)
- 参数
sys1
数学模型
前向通道上的数学模型sys2
数学模型
反馈通道上的数学模型sign
1
或-1
反馈类型, 取1
时为正反馈, 取-1
时为负反馈
- 返回值
返回反馈连接后的函数模型 - 示例
sys1 = tf([2 9], [2 6 5]);
sys2 = tf(1, 1);
sysp = feedback(sys1, sys2, 1);
示例将传递函数 进行单位正反馈, 得到
模型仿真
对于模型仿真图像, 可使用右键菜单, 以显示系统的响应特征
step
函数
- 功能: 获取模型的单位阶跃响应
- 函数原型
[Y T] = step(sys, t)
- 参数
sys
数学模型
用于仿真的模型t
实数数组
采样响应结果的时间轴
- 返回值
Y
实数数组
响应结果T
实数数组
响应结果的时间轴
- 示例
sys = tf([2 9], [2 6 5]);
t = 0:0.05:30;
y = step(sys, t);
plot(t, y);
impluse
函数
- 功能: 获取模型的单位冲激响应
- 函数原型
[Y T] = impulse(sys, t)
- 参数
sys
数学模型
用于仿真的模型t
实数数组
采样响应结果的时间轴
- 返回值
Y
实数数组
响应结果T
实数数组
响应结果的时间轴
- 示例
与 step 函数 类似
lsim
函数
- 功能: 获取模型对于给定信号的响应
- 函数原型
[Y T] = lsim(sys, u, t)
- 参数
sys
数学模型
用于仿真的模型u
实数数组
用于仿真的信号, 采样时间与t
对应t
实数数组
采样响应结果的时间轴
- 返回值
Y
实数数组
响应结果T
实数数组
响应结果的时间轴
- 示例
sys = tf([2 9], [2 6 5]);
t = 0:0.05:4 * pi;
u = sin(t);
y = lsim(sys, u, t);
plot(t, y);
模型分析
对于模型分析图像, 可使用右键菜单, 以显示系统特征图中的特殊点
nyqusit
函数
- 功能: 绘制指定系统的 Nyquist 图, 或获取其 Nyquist 图上的点
- 函数原型
[re im w] = nyquist(sys)
- 参数
sys
数学模型
用于分析的数学模型
- 返回值
re, im
实数数组
Nyquist 图的实部与虚部w
实数数组
绘制 Nyquist 图时自动选择的频率
- 注意
- 当
nyquist
函数没有输出被接收时, 将会自动绘制 Nyquist 图 - 此函数通常配合 Nyquist 判据使用, 自动输出时将标记曲线方向与 点
- 当
- 示例
sys = tf([1 2], [1 6 -5]);
nyquist(sys);
示例将绘制给定传递函数 的 Nyquist 图
bode
函数
- 功能: 绘制指定系统的 Bode 图, 或获取其 Bode 图的幅频与相频曲线上的点
- 函数原型
[mag phase w] = bode(sys)
- 参数
sys
数学模型
用于分析的数学模型
- 返回值
mag
三维实数数组
Bode 图的幅频曲线phase
三维实数数组
Bode 图的相频曲线w
一维实数数组
Bode 图曲线的频率轴
- 注意
- 当
bode
函数没有输出被接收时, 将会自动绘制 Bode 图 mag
与phase
为 1x1xn 的三维数组, 可使用phase = phase(:)
的方法转换为一维- 直接接收得到的
mag
为原始振幅, 还需要mag = 20 * log10(mag(:))
将其转化为分贝
- 当
- 示例
sys = tf([1 2], [1 6 -5]);
bode(sys);
示例将绘制给定传递函数 的 Bode 图
margin
函数
- 功能: 求出给定开环系统的幅值裕度与相位裕度
- 函数原型
[Gm Pm Wcg Wcp] = margin(sys)
- 参数
sys
数学模型
用于分析的数学模型
- 返回值
Gm
实数
幅值裕度Wcg
实数
相位交界频率 , 即幅值裕度取值对应的频率 (相频曲线第一次穿越 )Pm
实数
相位裕度Wcp
实数
剪切频率 , 即相位裕度取值对应的频率 (幅频曲线第一次穿越 )
- 注意
- 当
margin
函数没有输出被接收时, 将会自动绘制 Bode 图, 并且在图上标记出Gm
与Pm
Gm
为原始振幅, 还需要Gm = 20 * log10(Gm)
将其转化为分贝
- 当
- 示例
sys = tf(3.5, [1, 2, 3, 2]);
margin(sys)
示例将绘制给定开环传递函数 的 Bode 图
rlocus
函数
建模技巧
非零初始状态的系统响应
以弹簧阻尼质量块系统为例, 系统有微分方程
假设质量块相对平衡位置有偏置, 则有 , 根据微分特性定理, 此时方程的 Laplace 变换为
将 视为一个传递函数, 而单位冲激函数的 Laplace 变换为 , 因此通过求传递函数 的单位冲激响应即可得到系统在非零状态下的响应
斜坡响应的仿真
单位斜坡响应可理解为单位阶跃响应的积分
- 传统方法
- 改变传递函数
- 增加状态方程的输出变量