LLRFLibsPy库中ss_freqresp函数解读
source code: Github
这个函数 ss_freqresp
用于计算和绘制状态空间系统的频率响应。它适用于连续系统(当 Ts
为 None
时)和离散系统(当 Ts
具有非零浮点值时)。
参数
A, B, C, D
: 状态空间模型的矩阵(复杂矩阵),定义系统的动力学。Ts
: 采样时间,单位为秒。如果为None
,表示系统是连续的。plot
: 布尔值,是否绘制频率响应图。plot_pno
: 绘图点的数量。默认值为 1000。plot_maxf
: 要绘制的频率范围(+/-),单位为赫兹。默认值为 1 MHz。title
: 绘图标题。
返回值
status
: 布尔值,表示计算是否成功。f_wf
: 频率波形,单位为赫兹。A_wf_dB
: 幅度响应波形,单位为分贝(dB)。P_wf_deg
: 相位响应波形,单位为度(degree)。h
: 复杂响应。
函数逻辑
输入检查与默认值设定:
- 检查
plot_pno
和plot_maxf
的值,如果它们小于或等于 0,则分别设为默认值 1000 和 1 MHz。 - 如果
Ts
不为None
,则检查Ts
是否大于 0。如果不大于 0,则返回失败状态。
- 检查
计算频率响应:
- 如果
Ts
为None
,则系统是连续的:- 使用
signal.freqresp
计算频率响应。
- 使用
- 如果
Ts
不为None
,则系统是离散的:- 使用
signal.dfreqresp
计算频率响应。
- 使用
- 如果
计算显示结果:
- 将频率从弧度每秒转换为赫兹。
- 计算幅度响应(单位为分贝)和相位响应(单位为度)。
绘制频率响应图(如果
plot
为True
):- 调用
rf_plot
模块中的plot_ss_freqresp
函数绘制频率响应图。
- 调用
返回计算结果:
- 返回计算状态、频率波形、幅度响应波形、相位响应波形和复杂响应。
示例使用
假设有一个状态空间模型,其矩阵为 A, B, C, D
,采样时间为 Ts
,想要计算并绘制其频率响应:
1 | A = np.array([[0, 1], [-2, -3]]) |
这个示例展示了如何使用 ss_freqresp
函数计算状态空间模型的频率响应,并选择性地绘制响应图。