LLRFLibsPy库中cas_ss_mech函数解读

source code:Github

这段代码定义了一个名为 cav_ss_mech 的函数,该函数用于计算腔体机械模态的连续状态空间方程。以下是对这段代码的详细解读:

函数定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def cav_ss_mech(mech_modes, lpf_fc = None):
'''
Derive the continous state-space equation of the cavity mechanical modes.

Refer to LLRF book section 3.3.10.

Parameters:
mech_modes: dict, with the following items:
``f`` : list, frequencies of mech modes, Hz;
``Q`` : list, quality factors;
``K`` : list, K values, rad/s/(MV)^2.
lpf_fc : float, low-pass cutoff freq (optional), Hz
Returns:
status: boolean, success (True) or fail (False)
A, B, C, D: numpy matrix (real), continous mechanical model
'''

函数接受两个参数:

  • mech_modes: 包含机械模态信息的字典,字典中应包含以下项目:
    • f: 机械模态的频率列表(单位:赫兹)。
    • Q: 机械模态的品质因数列表。
    • K: 机械模态的 $ K $ 值列表(单位:$ rad/s/(MV)^2 $)。
  • lpf_fc: 低通滤波器的截止频率(可选参数,单位:赫兹)。

返回值包括一个布尔值 status(表示成功与否)和状态空间模型的四个矩阵:A, B, C, D

参数检查

1
2
3
4
5
6
# check 
if mech_modes is None:
return (False,) + (None,)*4

if len(mech_modes['f']) < 1:
return (False,) + (None,)*4

检查 mech_modes 参数是否为空,并确保频率列表 mech_modes['f'] 非空。如果不满足条件,函数返回 False 和四个 None

提取参数

1
2
3
4
# get the parameters
fm = mech_modes['f'] # frequency of the mechanical mode, Hz
Qm = mech_modes['Q'] # quality factor
Km = mech_modes['K'] # K value, rad/s/(MV)^2

mech_modes 字典中提取频率、品质因数和 $ K $ 值列表。

构建传递函数

1
2
3
4
5
6
7
8
9
10
# build the transfer function of the first mechanical mode
w = 2 * np.pi * fm[0] # get the angular freq, rad/s
num = [-Km[0] * w**2]
den = [1, w/Qm[0], w**2]

# add the other mode transfer functions
if len(fm) > 1:
for i in range(1, len(fm)):
w = 2 * np.pi * fm[i]
num, den = add_tf(num, den, [-Km[i] * w**2], [1, w/Qm[i], w**2])

首先构建第一个机械模态的传递函数。w 是第一个机械模态的角频率,numden 分别是传递函数的分子和分母多项式系数。

如果存在其他机械模态,则使用 add_tf 函数将它们的传递函数添加到整体传递函数中。

添加低通滤波器

1
2
3
4
5
# add the LPF if applicable
if lpf_fc is not None:
if lpf_fc > 0.0:
w = 2 * np.pi * lpf_fc
num, den = add_tf(num, den, [w], [1, w])

如果指定了低通滤波器的截止频率 lpf_fc,并且该值大于 0,则将低通滤波器的传递函数添加到整体传递函数中。

转换为状态空间模型

1
2
# get the state-space model
A, B, C, D = signal.tf2ss(num, den)

使用 scipy.signal.tf2ss 函数将传递函数转换为状态空间模型。

返回结果

1
2
# return the results
return True, A, B, C, D

返回成功状态 True 以及状态空间模型的四个矩阵 A, B, C, D

总结

cav_ss_mech 函数的作用是根据给定的机械模态参数构建腔体机械模态的状态空间模型。函数首先检查输入参数的有效性,然后逐步构建传递函数,并最终转换为状态空间模型。该模型可以用于进一步的系统分析和仿真。