LLRFLibsPy库中cav_ss函数解读

cav_ss 函数解读

cav_ss 函数用于导出腔体的连续状态空间方程,包含通过状态空间方法计算射频(RF)驱动和束流驱动的响应。以下是对该函数的详细解读。

超导腔模型

  1. 驱动电压定义:定义了束流驱动电压$ V_{bo} $与束流$ i_{bo} $的关系,其中$ V_{bo} = R_{z}i_{bo} $。

  2. 输入-输出关系:描述了输入电流 $ i_{for} $ 与射频驱动电压 $ V_{for} $ 之间的关系,公式为 $ i_{for} = \frac{\beta}{\beta + 1} - \frac{V_{for}}{R_{L}} $。

  3. 腔体微分方程:在忽略某些小项的情况下,腔体的微分方程可以表示为:
    $$
    \dot{\mathbf{v}}{C}+\left(\omega{1 / 2}-j \Delta \omega\right) \mathbf{v}{C}=2 \omega{1 / 2} R_{L}\left(\mathbf{i}{\text {for }}+\mathbf{i}{b 0}\right)
    $$

  4. 超导腔体特性:对于超导腔体,输入耦合因子 $ \beta $ 远大于1,因为腔体壁的射频功率耗散远小于腔体发出的射频功率。例如,TESLA腔体的 $ \beta $ 大于3000,这允许简化上述方程。

  5. 增益和反射因子:定义了复数增益 $ g_{c} $ 作为稳态腔体电压 $ V_{c} $ 与射频驱动电压 $ V_{for} $ 之间的关系,以及复数反射因子 $ Y_{c} $ 作为腔体对射频功率传输线的反射特性。

  6. 复平面上的表示:$ g_{c} $ 和 $ Y_{c} $ 在复平面上以圆的形式表示,这些圆随着 $ \beta $ 和失谐量 $ \Delta $ 的变化而变化。当失谐量 $ \Delta $ 趋向无穷大时,所有正向射频功率都会从腔体输入耦合器反射回来,并且反射信号的相位与正向信号的相位相差180°。
    不同耦合因子和失谐的复增益gc

函数定义

1
def cav_ss(half_bw, detuning = 0.0, beta = 1e4, passband_modes = None, plot = False, plot_pno = 1000):
  • 参数说明:

    • half_bw: 腔体的半带宽(单位:弧度/秒)。
    • detuning: 腔体的失谐(单位:弧度/秒)。
    • beta: 输入耦合因子。
    • passband_modes: 字典,包含通过带模式的参数(频率偏移、相对增益和半带宽)。
    • plot: 布尔值,是否绘制频率响应图。
    • plot_pno: 绘图点数。
  • 返回值:

    • status: 布尔值,表示计算是否成功。
    • Arf, Brf, Crf, Drf: RF驱动的连续状态空间模型矩阵。
    • Abm, Bbm, Cbm, Dbm: 束流驱动的连续状态空间模型矩阵。

函数逻辑

  1. 参数检查:
    检查 half_bwbeta 是否为正值,passband_modes 是否为包含正确键值的字典。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (half_bw <= 0) or (beta <= 0):
    return (False,) + (None,)*8

    if passband_modes is not None:
    if (not isinstance(passband_modes, dict)) or \
    ('freq_offs' not in passband_modes.keys()) or \
    ('gain_rel' not in passband_modes.keys()) or \
    ('half_bw' not in passband_modes.keys()):
    return (False,) + (None,)*8
  2. 定义基本模式参数:
    计算基本模式的增益和传递函数系数。

    1
    2
    3
    4
    5
    6
    7
    b0 = 2 * beta * half_bw / (beta + 1)
    b1 = 2 * half_bw

    rf_num = [b0]
    rf_den = [1, half_bw - 1j*detuning]
    bm_num = [b1]
    bm_den = [1, half_bw - 1j*detuning]
  3. 处理通过带模式:

通带的空间状态方程:
$$
\lambda_{k}=-\omega_{1 / 2, k}+j \Delta \omega_{k}, k=1, \ldots, N
$$
本征值的实部表示相应通带模式的半带宽,而虚部表示其与载波频率$ \omega_{c} $相比的频率偏移。对于特定的多胞腔,我们可以公式化矩阵$ A $,并用数值方法计算其特征值和特征向量。

我们使用从中导出的相量传递函数来计算多单元腔的频率响应:
$$
\mathbf{X}(\hat{s})=\left(\hat{s} \mathbf{I}_{N}-\mathbf{A}\right)^{-1} \mathbf{B U}(\hat{s})
$$
其中$X$和$U$分别是时域相量矢量$x$和$u$的相量拉普拉斯变换。

多cell腔的相量传递函数具有多个极点,每个极点对应于通带模式。从单细胞腔的相量传递函数,包括所有通带模式的多单元腔的相量传递函数可以写成:
$$
\mathbf{G}{C,multi-cell(\hat{s})} = \sum{k=1}^{N} \frac{\omega_{1/2} \mathbf{G}{k}}{\hat{s}+\omega{1/2}-j \Delta\omega_{k}}
$$

如果存在通过带模式,将其参数添加到传递函数中。

1
2
3
4
5
6
7
8
9
if passband_modes is not None:
pb_f = passband_modes['freq_offs']
pb_g = passband_modes['gain_rel']
pb_wh = passband_modes['half_bw']

for i in range(len(pb_f)):
rf_num, rf_den = add_tf(rf_num, rf_den,
[b0 * pb_g[i] * pb_wh[i] / half_bw],
[1, pb_wh[i] - 1j*2*np.pi*pb_f[i]])

add_tf 函数解释

add_tf 函数用于将两个传递函数相加。这通常用于将多个模式的传递函数合并成一个总的传递函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
def add_tf(num1, den1, num2, den2):
'''
Add two transfer functions
Parameters:
num1, den1: numerator and denominator of the first transfer function
num2, den2: numerator and denominator of the second transfer function
Returns:
num, den: numerator and denominator of the resulting transfer function
'''
# 将两个传递函数的分子和分母进行卷积以实现相加
num = np.polyadd(np.polymul(num1, den2), np.polymul(num2, den1))
den = np.polymul(den1, den2)
return num, den

add_tf 函数的工作原理

  • 参数

    • num1, den1: 第一个传递函数的分子和分母多项式系数。
    • num2, den2: 第二个传递函数的分子和分母多项式系数。
  • 返回值

    • num, den: 合并后的传递函数的分子和分母多项式系数。
  • 实现

    • 使用多项式的卷积(np.polymul)计算合并后的分子和分母。
    • 使用多项式的相加(np.polyadd)将两个传递函数相加。
  1. 获得状态空间模型:
    使用传递函数系数计算状态空间模型矩阵。

    1
    2
    Arf, Brf, Crf, Drf = signal.tf2ss(rf_num, rf_den)
    Abm, Bbm, Cbm, Dbm = signal.tf2ss(bm_num, bm_den)

tf2ss 函数解释

tf2ss 函数用于将传递函数(传递函数的分子和分母多项式表示)转换为状态空间表示。

1
2
3
4
5
6
7
8
9
10
11
12
from scipy import signal

def tf2ss(num, den):
'''
Transfer function to state-space conversion
Parameters:
num: numerator of the transfer function
den: denominator of the transfer function
Returns:
A, B, C, D: state-space representation matrices
'''
return signal.tf2ss(num, den)

tf2ss 函数的工作原理

  • 参数

    • num: 传递函数的分子多项式系数。
    • den: 传递函数的分母多项式系数。
  • 返回值

    • A, B, C, D: 状态空间表示的矩阵。
  • 实现

    • 使用 scipy.signal.tf2ss 函数,将传递函数的多项式系数转换为状态空间表示矩阵。
  1. 绘制频率响应图:
    如果 plotTrue,计算并绘制频率响应图。

    1
    2
    3
    4
    5
    6
    if plot:
    max_wrange = ...
    wrf, hrf = signal.freqs(rf_num, rf_den, worN = np.linspace(-2*max_wrange, 2*max_wrange, plot_pno))
    wbm, hbm = signal.freqs(bm_num, bm_den, worN = np.linspace(-2*max_wrange, 2*max_wrange, plot_pno))
    from rf_plot import plot_cav_ss
    plot_cav_ss(wrf, hrf, wbm, hbm)
  2. 返回结果:
    返回状态空间模型矩阵和成功状态。

    1
    return True, Arf, Brf, Crf, Drf, Abm, Bbm, Cbm, Dbm

总结

cav_ss 函数通过状态空间方法计算腔体的动态响应,包括基本模式和通过带模式的影响,并可以选择性地绘制频率响应图。通过传递函数转换为状态空间模型,函数返回用于进一步分析和仿真的状态空间矩阵。