一、系统模型的方程和图形化描述
系统的数学模型可以用多种相互等价的数学方程形式来表达,例如微分方程组与连续状态方程、差分方程组与离散状态方程等等,对于线性时不变系统还经常在变换域中来描述,例如频域、复频域和Z域描述等等。对于单输入单输出的线性时不变系统还常用传递函数或冲激响应来描述系统。
除了用方程形式描述外,还可以有多种描述方法。例如工程上常用的方框图法,信号流图法等。
信号流图是对系统方框图的抽象。
图:一个典型的信号流图形式
例如图中共有三条前向通路:分别是
a
b
c
d
e
f
g
abcdefg
abcdefg,
a
j
f
g
ajfg
ajfg和
a
k
ak
ak。相应地,前向通路总增益就是相应的前向通路上各支路增益的乘积。共有三个环路,分别是
c
i
ci
ci,
l
l
l以及
e
f
h
efh
efh,其中环路
c
i
ci
ci与环路
e
f
h
efh
efh是互不接触的,环路
c
i
ci
ci与环路
l
l
l也是互不接触的,但环路
e
f
h
efh
efh与环路
l
l
l却是接触的。
我们可以根据系统的微分方程或状态方程组来绘制信号流图。一般先将微分方程或状态方程组通过拉普拉斯变换表示为复变量
s
s
s的代数方程(组);对于离散时间系统,差分方程则使用Z变换或用延时算子表示为代数方程。
信号流图实质上是描述系统状态变量间关系的数学方程的图形化表示。信号流图的符号简单,绘制方便,运用灵活。利用梅森规则可以直接根据信号流图写出系统的传递函数。反之,若给定系统的传递函数,通过梅森规则也可直接绘制出系统的信号流图。
Simulink
Simulink是 MATLAB 中的一个建立系统方框图和基于方框图的系统仿真环境,是一个对动态系统进行建模、仿真和仿真结果可视化分析的软件包。
1、Simulink基本库是系统建模中最常用的模块库,其中的常用模块是:
一、连续时间线性系统库(Continuous)
二、非连续系统库(Discontinuities)
三、离散系统库(Discrete)
四、查表操作模块库(Look up tables)
五、数学函数库(Math Operations)
六、模型检查(Model Verification)和建模辅助工具(Model-wide Utilities)
七、端口和子系统库(Ports and Subsystems)
八、信号属性转换库(Signal Attributes)
九、信号路由库(Signal Routing)
十、信号源库(Source)
十一、信宿和仿真显示仪器库(Sinks)
十二、用户自定义函数库(User Defined Functions)
2、子系统的概念和创建方法
Simulink允许构造任意多层子系统,即在子系统中仍然允许包含若干下层子系统。使用子系统方式来建模的优点是:
便于构造比较复杂的系统。
将整体系统建模和设计工作与系统细节的实现工作分离。
实现代码和模块重用。
便于保护知识产权。
3、封装子系统
我们还可以将子系统进一步封装起来,这样系统设计的可重用性、隐蔽性和分离性更好,便于部分调试、联调以及系统维护。
4、组建用户自定义模块库
Simulink提供了方便的模型建库手段。具体方法是:从Simulink库浏览器菜单中选 New|Library 新建一个空白的模块库窗口,然后将欲建库的模块拷贝到该库文件窗口中即可。
三、例题
一个电路系统及其方框图模型如下图所示,将电压源
v
(
t
)
v(t)
v(t)视为输入信号
f
(
t
)
f(t)
f(t),电容两端的电压
u
(
t
)
u(t)
u(t)视为输出信号
y
(
t
)
y(t)
y(t),设系统的状态变量为电感元件上的电流以及电容元件两端的电压,即
x
1
(
t
)
=
i
(
t
)
x_1(t)=i(t)
x1(t)=i(t),
x
2
(
t
)
=
u
(
t
)
x_2(t)=u(t)
x2(t)=u(t)。试列写的该电路的微分方程,并改写为系统状态方程形式。然后根据状态方程画出系统的实现方框图和信号流图,并求出系统的传递函数模型以及对应的冲激响应解析表达式。通过编程仿真来验证结果。
图:RLC电路图和等效系统模型
1、数学分析
由基尔霍夫电压定律(Kirchhoff’s Voltage Law:KVL)以及元件伏安关系得到:
R
i
(
t
)
+
L
d
d
t
i
(
t
)
+
u
(
t
)
=
v
(
t
)
Ri(t)+L\frac{d}{dt}i(t)+u(t)=v(t)
Ri(t)+Ldtdi(t)+u(t)=v(t)
C
d
d
t
u
(
t
)
=
i
(
t
)
C\frac{d}{dt}u(t)=i(t)
Cdtdu(t)=i(t)
用状态变量符号
x
1
(
t
)
x_1(t)
x1(t),
x
2
(
t
)
x_2(t)
x2(t)以及输入
f
(
t
)
f(t)
f(t)分别表示
i
(
t
)
i(t)
i(t),
u
(
t
)
u(t)
u(t)和
v
(
t
)
v(t)
v(t),即得到状态方程组的标准矩阵形式为:
[
x
˙
1
x
˙
2
]
=
[
−
R
L
−
1
L
1
c
0
]
[
x
1
x
2
]
+
[
1
c
0
]
f
\left[ \begin{matrix} \dot{x}_1 \\ \dot{x}_2\\ \end{matrix} \right]= \left[ \begin{matrix} −\frac{R}{L} &−\frac{1}{L}\\ \frac{1}{c}&0\\ \end{matrix} \right] \left[ \begin{matrix} x_1 \\ x_2\\ \end{matrix} \right]+ \left[ \begin{matrix} \frac{1}{c}\\0\\ \end{matrix} \right]f
[x˙1x˙2]=[−LRc1−L10][x1x2]+[c10]f
输出方程写为矩阵形式是:
y
=
[
0
1
]
[
x
1
x
2
]
+
0
×
f
y= \left[ \begin{matrix} 0&1\\ \end{matrix} \right] \left[ \begin{matrix} x_1 \\ x_2\\ \end{matrix} \right]+0×f
y=[01][x1x2]+0×f
在信号流图中积分运算用等价的传递函数
1
/
s
1/s
1/s表示,微分运算用
s
s
s表示。所得到的系统的实现方框图和信号流图如下:
图:根据电路系统状态方程以及输出方程得出的实现方框图和信号流图
该信号流图中有一条通路,两个接触的环路,由梅森规则直接写出传递函数为:
H
(
s
)
=
1
L
⋅
1
s
⋅
1
C
s
1
−
(
−
R
L
s
−
1
L
C
s
2
)
=
1
L
C
s
2
+
R
C
s
+
1
H(s)=\frac{\frac{1}{L}⋅\frac{1}{s}⋅\frac{1}{Cs}}{1−(−\frac{R}{Ls}−\frac{1}{LCs^2})}=\frac{1}{LCs^2+RCs+1}
H(s)=1−(−LsR−LCs21)L1⋅s1⋅Cs1=LCs2+RCs+11
对传递函数作拉普拉斯反变换得到系统的冲激响应为:
h
(
t
)
=
(
L
C
1
L
C
−
R
2
4
L
2
)
−
1
e
x
p
(
−
R
2
L
t
)
s
i
n
(
1
L
C
−
R
2
4
L
2
t
)
u
(
t
)
h(t)=(LC\sqrt{\frac{1}{LC}−\frac{R^2}{4L^2}})^{−1}exp(−\frac{R}{2L}t)sin(\sqrt{\frac{1}{LC}−\frac{R^2}{4L^2}}t)u(t)
h(t)=(LCLC1−4L2R2
)−1exp(−2LRt)sin(LC1−4L2R2
t)u(t)
其中,冲激响应
h
(
t
)
h(t)
h(t)由指数衰减项和振荡项两部分之乘积构成。从振荡项中可得出振荡频率
f
0
f_0
f0的表达式
f
0
=
1
2
π
1
L
C
−
R
2
4
L
2
f_0=\frac{1}{2π}\sqrt{\frac{1}{LC}−\frac{R^2}{4L^2}}
f0=2π1LC1−4L2R2
显然振荡频率不仅与电感电容取值有关,而且与电阻也有关。当电阻值
R
=
0
R=0
R=0的时候,冲激响应将是一个等幅振荡,振荡频率就是我们熟知的
f
0
=
1
2
π
L
C
f_0=\frac{1}{2π\sqrt{LC}}
f0=2πLC
1
以上完成了对电路的建模和解析分析。现在我们通过编程仿真来验证。
2、代码如下:
function xdot
=shiyan2_10(t
, x
, flag
, R
,L
,C
)
% 考虑RLC串联环路的状态方程函数
% 输入
: t 当前计算时刻
, flag 此处不用
% x为
2#
1矩阵
, x(1)为电感上的电流
; x(2)为电容电压
% R
: 电阻值
% L
: 电感值
% C
: 电容值
xdot
=zeros(2,1); % 状态变量矩阵初始化
A
=[-R
/L
, -1/L
; 1/C
, 0]; % 状态方程系数矩阵
B
=[1/L
; 0];
xdot
=A
*x
+B
*f(t
); % 状态方程
function input
=f(t
)
input
=(t
>=0); % 输入信号为单位阶跃
然后使用Matlab求解器(如ode45)对状态方程进行求解:
clear
;
R
=100; L
=2e-3; C
=1e-7; % 设置电路元件的参数
ts
=2e-6;
t_start
=-1e-4;
t_end
=4e-4;
t
=t_start
:ts
:t_end
; % 设置求解的离散时间点序列
i_L0
=0; u_C0
=0; % 系统初始状态为零
x0
=[i_L0
;u_C0
]; % 系统状态变量初始赋值
tic
[t_out
, x_out
]=ode45('shiyan2_10',t
, x0
,[],R
,L
,C
);% 仿真计算
toc
s_t_simu
=x_out(:,2); % 阶跃响应仿真结果
h_t_simu
=x_out(:,1)./C
; % 等价的冲激响应仿真结果
figure(1);plot(t_out
, s_t_simu
, 'k-');
grid on
; xlabel('时间 t ');ylabel('电容电压 ');
axis([t_start
,t_end
, 1.1*min(s_t_simu
) ,1.1*max(s_t_simu
)]);
legend('单位阶跃响应仿真结果');
figure(2);plot(t_out
, h_t_simu
, 'k.');
axis([t_start
,t_end
, 1.1*min(h_t_simu
) ,1.1*max(h_t_simu
)]);
hold on
;
%--理论结果
alfa
=R
/(2*L
);
beta
=sqrt(1/(L
*C
)-(R
^2)/(4*L
^2));
h_t
=(L
*C
*beta
)^(-1)*exp(-alfa
*t
).*
sin(beta
*t
).*
(t
>=0);% 冲激响应
plot(t
,h_t
,'k'); legend('冲激响应仿真数值结果','冲激响应理论计算结果');
grid on
; xlabel('时间 t ');ylabel('电容电压 ');
3、运行结果:
图:RLC串联电路的阶跃响应和冲激响应
理论结果与仿真结果对比。仿真参数为
R
=
100
Ω
R=100Ω
R=100Ω,
L
=
2
m
H
L=2mH
L=2mH,
C
=
0.1
μ
F
C=0.1μF
C=0.1μF。仿真步长为
2
μ
s
2μs
2μs。阶跃响应中的波形过冲和波动现象称为系统的吉布斯效应,是系统欠阻尼的结果,增加电阻值后吉布斯效应将逐渐减弱直至消失。
3、Simulink仿真:
参数设置:
仿真结果: