LLRFLibsPy库中cav_ss函数解读
cav_ss
函数解读
cav_ss
函数用于导出腔体的连续状态空间方程,包含通过状态空间方法计算射频(RF)驱动和束流驱动的响应。以下是对该函数的详细解读。
超导腔模型
驱动电压定义:定义了束流驱动电压$ V_{bo} $与束流$ i_{bo} $的关系,其中$ V_{bo} = R_{z}i_{bo} $。
输入-输出关系:描述了输入电流 $ i_{for} $ 与射频驱动电压 $ V_{for} $ 之间的关系,公式为 $ i_{for} = \frac{\beta}{\beta + 1} - \frac{V_{for}}{R_{L}} $。
腔体微分方程:在忽略某些小项的情况下,腔体的微分方程可以表示为:
$$
\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)
$$超导腔体特性:对于超导腔体,输入耦合因子 $ \beta $ 远大于1,因为腔体壁的射频功率耗散远小于腔体发出的射频功率。例如,TESLA腔体的 $ \beta $ 大于3000,这允许简化上述方程。
增益和反射因子:定义了复数增益 $ g_{c} $ 作为稳态腔体电压 $ V_{c} $ 与射频驱动电压 $ V_{for} $ 之间的关系,以及复数反射因子 $ Y_{c} $ 作为腔体对射频功率传输线的反射特性。
复平面上的表示:$ g_{c} $ 和 $ Y_{c} $ 在复平面上以圆的形式表示,这些圆随着 $ \beta $ 和失谐量 $ \Delta $ 的变化而变化。当失谐量 $ \Delta $ 趋向无穷大时,所有正向射频功率都会从腔体输入耦合器反射回来,并且反射信号的相位与正向信号的相位相差180°。
函数定义
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
: 束流驱动的连续状态空间模型矩阵。
函数逻辑
参数检查:
检查half_bw
和beta
是否为正值,passband_modes
是否为包含正确键值的字典。1
2
3
4
5
6
7
8
9if (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定义基本模式参数:
计算基本模式的增益和传递函数系数。1
2
3
4
5
6
7b0 = 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]处理通过带模式:
通带的空间状态方程:
$$
\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 | if passband_modes is not None: |
add_tf
函数解释
add_tf
函数用于将两个传递函数相加。这通常用于将多个模式的传递函数合并成一个总的传递函数。
1 | def add_tf(num1, den1, num2, den2): |
add_tf
函数的工作原理
参数:
num1
,den1
: 第一个传递函数的分子和分母多项式系数。num2
,den2
: 第二个传递函数的分子和分母多项式系数。
返回值:
num
,den
: 合并后的传递函数的分子和分母多项式系数。
实现:
- 使用多项式的卷积(
np.polymul
)计算合并后的分子和分母。 - 使用多项式的相加(
np.polyadd
)将两个传递函数相加。
- 使用多项式的卷积(
获得状态空间模型:
使用传递函数系数计算状态空间模型矩阵。1
2Arf, Brf, Crf, Drf = signal.tf2ss(rf_num, rf_den)
Abm, Bbm, Cbm, Dbm = signal.tf2ss(bm_num, bm_den)
tf2ss
函数解释
tf2ss
函数用于将传递函数(传递函数的分子和分母多项式表示)转换为状态空间表示。
1 | from scipy import signal |
tf2ss
函数的工作原理
参数:
num
: 传递函数的分子多项式系数。den
: 传递函数的分母多项式系数。
返回值:
A
,B
,C
,D
: 状态空间表示的矩阵。
实现:
- 使用
scipy.signal.tf2ss
函数,将传递函数的多项式系数转换为状态空间表示矩阵。
- 使用
绘制频率响应图:
如果plot
为True
,计算并绘制频率响应图。1
2
3
4
5
6if 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)返回结果:
返回状态空间模型矩阵和成功状态。1
return True, Arf, Brf, Crf, Drf, Abm, Bbm, Cbm, Dbm
总结
cav_ss
函数通过状态空间方法计算腔体的动态响应,包括基本模式和通过带模式的影响,并可以选择性地绘制频率响应图。通过传递函数转换为状态空间模型,函数返回用于进一步分析和仿真的状态空间矩阵。