基于LLRFLibsPy库的基本控制算法示例
source code: Github
这段代码模拟了一个射频腔(RF cavity)的控制系统。具体来说,它模拟了腔体的激励、响应,以及在不同条件下的反馈控制。下面是代码各部分的详细解释:
导入必要的库和模块
1 | import numpy as np |
这段代码导入了NumPy和Matplotlib,用于数值计算和绘图。此外,还导入了一些自定义模块,这些模块提供了射频模拟、控制、校准、系统识别和噪声相关的函数。
定义模拟参数
1 | # 定义采样频率和其他基本参数 |
定义了射频腔体的参数,包括采样频率、操作频率、品质因数等,以及一些时间相关的参数,比如填充时间、平顶时间和束流开始和结束的时间。
计算设定点和前馈
1 | status, vc_sp, vf_ff, vb, T = cav_sp_ff(wh, t_fill, t_flat, Ts, |
使用 cav_sp_ff
函数计算设定点和前馈信号。vb
是束流驱动电压,它在束流开始和结束之间有一个非零值。
添加扰动
1 | dist_freq = 5e3 |
在前馈信号中添加一个频率为5kHz的扰动。
定义腔体模型
1 | result = cav_ss(wh, detuning = dw, passband_modes = pb_modes, plot = False) |
定义腔体的状态空间模型,Arf
, Brf
, Crf
, Drf
是射频驱动的状态空间矩阵,Abm
, Bbm
, Cbm
, Dbm
是束流驱动的状态空间矩阵。
模拟前馈响应
1 | status, T1, vc1, vr1 = sim_ncav_pulse(Arf, Brf, Crf, Drf, vf_ff, Ts, |
模拟前馈响应,vc1
是腔体电压的响应。
离散化腔体方程
1 | status1, Arfd, Brfd, Crfd, Drfd, _ = ss_discrete(Arf, Brf, Crf, Drf, Ts, |
将腔体的连续时间状态空间模型离散化,用于后续的数字控制。
设计陷波滤波器
1 | status, Afd, Bfd, Cfd, Dfd = design_notch_filter(200e3, 4, fs) |
设计一个陷波滤波器,用于消除测量中的带通模式。
定义反馈控制器
1 | Kp = 30 |
定义一个基本的射频控制器,使用比例积分控制(PI控制)和一个带陷波滤波器的反馈回路。
离散化控制器
1 | status, Akd, Bkd, Ckd, Dkd, _ = ss_discrete(Akc, Bkc, Ckc, Dkc, Ts, |
将控制器的连续时间状态空间模型离散化。
模拟反馈控制回路
1 | vc2 = np.zeros(simN, dtype = complex) |
这段代码模拟了整个反馈控制回路。每个时间步,计算当前的腔体电压,滤波后的电压,误差,然后根据误差更新控制器的输出。
绘图
1 | plt.figure(); |
最后,绘制了模拟的结果,包括设定点、前馈响应和闭环响应的振幅和相位。