LLRFLibsPy库中cav_impulse函数解读

source code: Github

这个函数 cav_impulse 计算了腔体系统的脉冲响应。该函数假设系统增益已经归一化为1,并且系统相位校正为0。对应的腔体方程为 $ \frac{dvc}{dt} + (half_{bw} - 1j \cdot detuning) \cdot v_c = half_bw \cdot v_d $,其中 vc 是腔体电压向量,vd 是腔体驱动向量。

函数参数:

  • half_bw (float):腔体的常数半带宽,以弧度每秒为单位。
  • detuning (float):腔体的常数失谐,以弧度每秒为单位。
  • Ts (float):采样时间,以秒为单位。
  • order (int):脉冲响应的阶数。

函数返回值:

  • status (boolean):成功(True)或失败(False)。
  • h (numpy array, complex):脉冲响应。

代码解释:

  1. 输入检查

    • 检查 half_bwdetuningTs 是否大于0,并且 order 是否大于2。如果任何一个条件不满足,返回 FalseNone
  2. 计算脉冲响应

    • 使用 numpy 的 arange 函数生成从0到order-1的整数数组k
    • 计算脉冲响应 h,公式为:
      $$
      h = Ts \cdot half_bw \cdot (1.0 - Ts \cdot (half_bw - 1j \cdot detuning))^k
      $$
    • 这个公式基于离散时间域的腔体方程。
  3. 返回结果

    • 返回 True 和计算出的脉冲响应 h

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import numpy as np

# 设置参数
half_bw = 2 * np.pi * 10e3 # 半带宽,弧度每秒
detuning = 2 * np.pi * 500 # 失谐,弧度每秒
Ts = 1e-6 # 采样时间,秒
order = 20 # 脉冲响应阶数

# 计算脉冲响应
status, h = cav_impulse(half_bw, detuning, Ts, order)

if status:
print("脉冲响应计算成功")
print(h)
else:
print("脉冲响应计算失败")

输出结果:

1
2
3
4
5
6
7
8
脉冲响应计算成功
[0.06283185+0.j 0.05888401+0.00019739j 0.0551836 +0.00036998j
0.05171515+0.0005201j 0.04846416+0.00064989j 0.04541702+0.00076131j
0.042561 +0.00085615j 0.03988412+0.00093607j 0.03737519+0.00100255j
0.03502368+0.00105698j 0.03281976+0.0011006j 0.03075418+0.00113455j
0.02881827+0.00115988j 0.02700392+0.00117754j 0.02530351+0.00118839j
0.02370991+0.00119321j 0.02221643+0.00119273j 0.02081678+0.00118758j
0.01950509+0.00117836j 0.01827585+0.0011656j ]

在这个示例中,我们计算了一个带有特定半带宽和失谐的腔体系统的脉冲响应,并输出结果。