LLRFLibsPy库中ss_discrete函数解读
source code:Github
这段代码定义了一个名为 ss_discrete
的函数,该函数用于将连续状态空间模型转换为离散状态空间模型,并比较它们的频率响应。以下是对这段代码的详细解读:
函数定义
1 | def ss_discrete(Ac, Bc, Cc, Dc, Ts, method = 'zoh', alpha = 0.3, plot = False, plot_pno = 1000, spec_data = False): |
函数接受以下参数:
Ac, Bc, Cc, Dc
:连续状态空间模型的矩阵。Ts
:采样时间,单位为秒。method
:离散化方法,可以是'gbt'
,'bilinear'
,'euler'
,'backward_diff'
,'zoh'
,'foh'
或'impulse'
(详细信息见scipy.signal.cont2discrete
文档)。alpha
:在0
到1
之间的浮点数,某些离散化方法(如'gbt'
)使用的参数。plot
:布尔值,是否绘制频率响应图。plot_pno
:绘图时的点数。spec_data
:布尔值,是否返回频谱数据。
返回值包括一个布尔值 status
(表示成功与否),离散状态空间模型的四个矩阵 Ad
, Bd
, Cd
, Dd
,以及可选的频谱数据 spec
。
参数检查
1 | # check the input |
检查采样时间 Ts
是否大于 0。如果不满足条件,函数返回 False
和五个 None
。设置绘图点数 plot_pno
为至少 1000 点。
离散化
1 | # discretize it |
使用 scipy.signal.cont2discrete
函数将连续状态空间模型转换为离散状态空间模型。
计算频率响应
1 | # calculate the responses of both continous and discrete versions |
如果 plot
或 spec_data
为 True
,则使用 ss_freqresp
函数计算连续和离散状态空间模型的频率响应,并存储频谱数据到 spec
字典中。
绘制频率响应图
1 | # plot the responses |
如果 plot
为 True
,并且 sc
和 sd
都为 True
,则使用 plot_ss_discrete
函数绘制频率响应图。
返回结果
1 | # return the results |
返回成功状态 True
,离散状态空间模型的四个矩阵 Ad
, Bd
, Cd
, Dd
,以及频谱数据 spec
(如果 spec_data
为 True
)。
总结
ss_discrete
函数的作用是将给定的连续状态空间模型转换为离散状态空间模型,并根据需要比较它们的频率响应。函数首先检查输入参数的有效性,然后进行离散化处理,并根据需要计算和绘制频率响应图。最后返回离散状态空间模型和频谱数据。
示例
source code:Github