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 函数计算状态空间模型的频率响应,并选择性地绘制响应图。
