本应用笔记是本系列第 1 部分的后续, 使用 Boxcar 平均器改善 SNR 测量本应用笔记探讨了双 Boxcar 平均器的配置和操作原理,重点介绍了其使用 Moku 云编译 的默认值。
双 Boxcar 平均器的工作原理
双 Boxcar 平均器是先进测量技术必不可少的工具,尤其适用于泵浦探测实验和其他对直流偏移敏感的应用。双 Boxcar 系统在单 Boxcar 平均器功能的基础上,通过集成多个同步的单 Boxcar 平均器来提升性能。
在泵浦探测光谱实验中,泵浦脉冲激发样品,使电子从基态跃迁至振动态或电子激发态。由此产生的探测脉冲强度调制编码了有关分子振动、粒子数动态和激发态寿命的关键信息。当泵浦激光器的重复频率为探测激光器的一半时,只有每个交替的探测脉冲会经历泵浦诱导调制,而其他探测脉冲则作为参考脉冲。因此,为了准确提取净泵浦探测信号,系统必须在每个泵浦触发周期内独立地积分和分析两个连续的探测脉冲。这种方法需要使用两个箱形平均器,以便在每个周期内同时处理两个探测脉冲的信号。
图 1 显示了双 Boxcar 平均器的工作原理图,其中展示了基线门控窗口和 Boxcar 门控窗口。两个窗口均由相同的触发信号激活,具有相同的门控宽度,但触发延迟设置不同。因此,门控窗口会偏移以与输入信号的特定部分对齐。在泵浦探测实验中,此设置使系统能够分别测量两个脉冲并计算它们的差值。
双箱车平均器的输出是一个单一值,表示两个脉冲积分之间的差值。该差值反映了被测样品的特性。
图 1:双 Boxcar 平均器的工作原理。这里同时分析处理一对脉冲信号。触发信号会激活并启动两个 Boxcar 门控窗口,它们窗宽相同,但是触发延迟各不相同。
实现双 Boxcar 平均器仅需在单 Boxcar 平均器的设计基础上进行少量修改即可。有关更多背景信息,本应用笔记详细介绍了 Boxcar 平均器。双 Boxcar 平均器的基本结构如图 2 所示。其中“Single Boxcar”表示功能完备并带有专用控制寄存器的独立 Boxcar 平均器。改进之处包括引入额外的减法器和信号选择机制,以便在输出阶段管理多个信号。
图 2:双 Boxcar 平均器的原理框图。每个“Single Boxcar”都是一个功能完备的 Boxcar 平均器,它接收一个脉冲信号和一个触发信号来完成一次积分平均。双 Boxcar 平均器包含两组 Boxcar 平均器。将两个 Boxcar 平均器的结果相减,以提取出差分测量值。
构建的箱形平均器由两对双箱形平均器组成,而非一对。某些应用更进一步,不仅需要测量两个脉冲之间的差分,还需要测量每个脉冲在扣除基线后的绝对强度。为了满足这一需求,引入了第二组双箱形平均器,其中一个箱形平均器积分脉冲信号,另一个箱形平均器积分直流基线。通过移除基线,系统可以恢复激光脉冲信号的绝对强度,并最大限度地降低背景噪声。这种方法尤为重要,因为基线的波动会引入不必要的噪声,从而降低测量的精度和可靠性。
本应用笔记重点介绍操作指南。有关结构的更多详细信息,请参阅 GitHub 上的 Simulink 模型.
实现双 Boxcar 平均器
双 Boxcar 平均器的工作原理与单 Boxcar 平均器基本相同。然而,双 Boxcar 平均器提供多种输出模式,允许用户选择并输出由不同平均器计算的值。
本节概述了如何使用 Python 控制面板和 Moku Cloud Compile 控制寄存器在 Moku:Pro 上操作双 Boxcar 平均器。使用 Moku Python API 开发的 Python 控制面板提供了一个图形界面来控制双 Boxcar 平均器。该界面的一个主要优势是能够自动在位、伏特和纳秒之间进行转换,从而简化了配置过程。相比之下,虽然 Moku Cloud Compile 控制寄存器也提供完全控制,但需要手动进行值转换,本应用笔记稍后将对此进行更详细的探讨。
使用 Python 进行控制
(1)调整触发电平
在本实验中,触发信号的幅度为 150 mV。将触发电平设置为 75 mV 可确保 Boxcar 积分的触发可靠稳定。只有系统正确触发后,Boxcar 窗口才会出现;否则,稳定的脉冲信号和触发信号均不可见。图 3(a) 展示了由于触发电平设置高于触发信号幅度而导致 Boxcar 窗口无法激活的情况。
图 3(b) 显示了两个矩形波窗口,其幅度有意不同,以区分脉冲矩形波和基线矩形波。幅度较大的矩形波对应于脉冲矩形波,幅度较小的矩形波则代表基线矩形波。
图 3:不同触发电平设置下的系统响应。(a) 当触发电平设置为 0.2 V(超过触发信号振幅 0.15 V)时,Boxcar 门控窗口无法激活。因此,Boxcar 门控窗口和脉冲信号均不存在。(b) 将触发电平降低至 0.075 V(触发信号振幅的一半)后,成功触发两个 Boxcar 门控窗口,如图中红色曲线所示。脉冲 Boxcar 门控窗口振幅较大,而基线 Boxcar 门控窗口振幅较小。
(2)将触发的 Boxcar 门控窗口与脉冲信号对齐,并设置合适的窗宽
在此步骤中,将优化触发延迟和 Boxcar 门控宽度,以精确匹配输入信号的特性。由于系统包含两对双 Boxcar 平均器,因此首要任务是选择要配置的平均器。将模式设置为“Align Averager0”可以调整第一个双 Boxcar 平均器的触发延迟。
触发延迟的设置是为了确保矩形波窗口与目标脉冲的起始点对齐。对齐后,调整门控宽度以整合大部分脉冲持续时间,如图4所示。为了保持一致性,两个矩形波窗口均配置为使用相同的门控宽度。
图 4:Averager0 的配置。配置模式设置为“Align Averager0”,用于调整第一个双 Boxcar 平均器。门控窗宽设置为 35.2 ns,脉冲触发延迟为 230.4 ns,基线触发延迟为 380.8 ns。这两个 Boxcar 门控窗口与脉冲居中对齐,确保信号积分的准确性。
接下来,如果需要额外的双 Boxcar 平均器,可以调整 Averager1 的触发延迟和门控窗宽。和上一步类似,配置两个积分门控窗口来处理分析相应的信号。在图 5 中,该设置同时处理分析脉冲和基线信号。因此,Averager1 的输出代表第一个脉冲的绝对信号幅度。
图 5:Averager1 的配置。输出模式设置为“Align Averager1”。脉冲触发延迟设置为 230.4 ns,与 Averager0 相同。然而,基线触发延迟设置为 512 ns,用于测量 DC 偏置。如果基线 Boxcar 门控窗口配置为仅捕捉 DC 偏置,则可以调整此基线触发延迟值。
为了确保正常工作,触发延迟差值必须大于脉宽。图 6 中,触发延迟差值为 25.6 ns,小于 35.2 ns 的门控窗宽值。因此,两个 Boxcar 门控窗口重叠,导致非预期控制,并在用户界面中触发警告消息。
图 6:触发延迟和门控窗宽的错误设置。触发延迟差值为 25.6 ns,这是通过将 230.4 ns 的基线触发延迟与 256 ns 的脉冲触发延迟相减得出。由于计算结果小于门控窗宽,这样造成 Boxcar 门控窗口重叠。因此,显示的 Boxcar 窗口(红色轨迹)会出现较大的异常峰值,表明门控窗口之间存在重叠。
(3)选择平均周期并调整增益
每个平均器会输出脉冲积分和基线积分之间的差值。正确配置输出增益因子至关重要,因为不正确的设置会导致输出饱和。如果发生饱和,文本框中将显示警告消息(图 7)。为了纠正此问题,应降低输出增益。
图 7:高输出增益导致输出饱和。模式设置为“Output Averager0”,显示 Averager0 的结果。输出增益配置为 0.2,输出约为 -1.036 V,接近 Moku:Pro 的 -1.095 V 输出饱和极限。系统会生成输出饱和警告,表明输出增益设置过高。
Boxcar 平均器的输出是 n 个 Boxcar 积分结果之和,而不是平均值。选择这种设计是由于在 FPGA 上实现除法器所需计算复杂性和资源需求。直接输出积分结果比计算实际平均值更高效。如图 8 所示,正确配置输出增益后,平均器输出将显示在界面上。“Averaged Output_0”表示重新计算调整后的实际值,该值是通过将原始积分输出除以平均数和输出增益得到的。例如,实时图形显示的 Boxcar 平均器输出的原始值约为 -0.5556 V。然而,显示的“平均输出_0”值约为 -55.56 mV。之所以会减少 10 倍,是因为平均系数为 100,增益设置为 0.1,导致本例中平均器的总增益为 10。
\(\text{平均值} = \frac{\text{总脉冲幅度}}{\text{平均值之和} \times \text{增益}}\)
图 8:设置适当输出增益后,重新计算调整平均器输出。输出总增益最终为 0.1,平均值显示为 -55.56 mV。然而,实时图形显示读数(蓝色波形)约为 -0.5556 V。这种差异是来自显示值经过重新计算调整后变为原值的十分之一,这是由一百次平均周期与零点一的增益因子设置决定,使取样平均器的总增益最终计算等于“十”所导致的。
此外,两个平均器的结果可以同时显示。通过将输出模式设置为“Output Both”,用户可以同时查看两个输出结果。图 9 中的蓝线表示 Averager0 的结果,红线表示 Averager1 的结果。数据可以直接从 Moku:Pro 实时输出并显示,可以使用 Moku API 进行进一步处理和分析。
图 9:两个平均器同时显示输出。输出模式设置为“Output Both”,以启用两个双 Boxcar 平均器的输出。0.1 的输出增益被配置到 Averager0,0.01 的输出增益被配置到 Averager1。平均输出分别显示在控制面板上,分别为 -55.9 mV 和 232.6 mV。
Moku 云编译控制寄存器
双 Boxcar 平均器也可以通过手动调整 Moku App 中的云编译控制寄存器来控制。表 1 概述了与每个端口相关的功能介绍。表格分为三部分:I/O 端口定义和其控制寄存器,以及两组独立的控制寄存器:一组用于 Averager0,另一组用于 Averager1。这种结构允许对两个 Boxcar 平均器进行完全控制。
表 1:Boxcar 平均器输入、控制和输出端口的配置。
| 信号端口 | 数据类型 | 说明 |
|
I/O 端口和控制寄存器 |
||
| 输入A | 有符号 16 位 | 输入脉冲信号 |
| 输入 B | 有符号 16 位 | 触发信号 |
| 输出 A | 有符号 16 位 | Boxcar 平均器输出信号(单输出和双输出模式)
输入脉冲信号(对齐模式) |
| 输出 B | 有符号 16 位 | Boxcar 门窗(对齐模式和单输出模式)
Boxcar 平均器输出信号(双输出模式) |
| Control0 | 有符号 16 位 | 触发电平,上升沿有效 |
| Control15 | 4 bit | Control15 = 4 :输出两个盒式平均器
Control15 = 7:输出averager_0 Control15 = 9:输出averager_1 Control15 = 13:对齐averager_1 Control15 = 15:对齐averager_0 |
|
Boxcar 平均器_0 控制寄存器 |
||
| Control1 | 无符号 16 位 | PulseTriggerDelay_0,以时钟周期为单位 |
| Control2 | 无符号 16 位 | BaselineTriggerDelay_0,以时钟周期为单位 |
| Control3 | 无符号 16 位 | GateWidth_0,以时钟周期为单位 |
| Control4 | 无符号 16 位 | AvgLength_0,平均周期,以 Boxcar 积分器结果为单位 |
| Control5 | 无符号 32 位 | Gain_0,输出信号增益,用于将结果重新缩放为16位信号。
Control16的低5位配置为分数增益。 |
|
Boxcar 平均器_1 控制寄存器 |
||
| Control6 | 无符号 16 位 | PulseTriggerDelay_1,以时钟周期为单位 |
| Control7 | 无符号 16 位 | BaselineTriggerDelay_1,以时钟周期为单位 |
| Control8 | 无符号 16 位 | GateWidth_1,以时钟周期为单位 |
| Control9 | 无符号 16 位 | AvgLength_1,平均周期,以 Boxcar 积分器结果为单位 |
| Control10 | 无符号 32 位 | Gain_1,输出信号增益,用于将结果重新缩放为16位信号。
Control16的低10位配置为分数增益。 |
(1)调整触发电平
Moku Cloud Compile 模块控制寄存器的配置值如图 10 (b) 所示。开关控制设置为 15,用于配置 Averager0。触发电平设置为 2,244,对应触发阈值幅度为 75 \text{mV}\(\frac{\text{2244 LSBs}}{\text{29925 LSBs/V}} 约 75 \text{mV}\),其中 LSB 代表最低有效位,29925 \text{ LSBs/V}\ 是 Moku:Pro 的数字分辨率。显然,图 10(a) 中没有触发箱车窗,因为触发电平设置为 0.2 V \(\left( \frac{5985 \text{ LSBs}}{29925 \text{ LSBs/V}} \approx 200 \text{ mV} \right)\),高于触发信号幅度。
在对齐过程之前,可以将触发延迟设置为 0。对于 320 ns 的门宽度,其控制寄存器配置为 \(\frac{320 \text{ ns}}{T_{clk}} = 100\),其中 \(T_{clk} = \frac{1 \text{ s}}{312.5 \text{ MHz}} = 3.2 \text{ ns}\) 在 Moku:Pro 上。
图 10:Moku 云编译控制寄存器的起始配置。(a)触发电平设置为 0.2 V,未触发任何 Boxcar 门控窗口。(b)触发电平设置为 75 mV,门控窗宽配置为 320 ns,因此显示 320 ns 的 Boxcar 窗口(蓝色轨迹)。
(2)将触发的 Boxcar 门控窗口与脉冲信号对齐,并设置合适的窗宽
这时,开始调整并设置 窗宽 至 \(11 \times 3.2 \text{ns} = 35.2 \text{ns} 以匹配脉冲宽度。接下来, 脉冲触发延迟 设置为 \)latex 72 \times 3.2 \text{ns} = 230.4 \text{ns}$,然后配置 基线触发延迟 到 \(119 \times 3.2 \text{ns} = 380.8 \text{ns}\)如图 11 所示,此调整成功对齐了蓝色(Boxcar 门控窗口)和红色(脉冲信号)轨迹,确保每个脉冲都与其对应的 Boxcar 门控窗口居中对齐。
图 11 显示了两个 Boxcar 窗口,每个窗口具有不同的幅度,以区分脉冲 Boxcar 和基线 Boxcar。较大的幅度对应于脉冲 Boxcar,而较小的幅度对应于基线 Boxcar。为了保持一致性,两个 Boxcar 窗口均配置为使用相同的门控宽度。
图 11:Boxcar 积分窗口的触发延迟和窗宽配置。窗宽设置为 35.2 ns,脉冲触发延迟为 230.4 ns,基线触发延迟为 380.8 ns。较高的窗宽为脉冲 Boxcar 门控窗口,较低的门控窗口为基线 Boxcar 门控窗口,以确保目标脉冲信号被正确积分。
配置 Averager0 后,如果需要额外的双 Boxcar 平均器,可以调整 Averager1 的触发延迟和窗宽。与上一步类似,设置两个积分门控窗口来分析相应的信号。在图 12 中,该配置捕获探测脉冲和基线(DC)信号。因此,Averager1 的输出反映了第一个脉冲的绝对信号振幅。
图 12:Averager1 的配置。模式切换制配置为 13,以可视化 Averager1 的 Boxcar 门控窗口。基线触发延迟配置为 160×3.2 ns = 512 ns,将基线 Boxcar 积分定位在仅含有 DC 偏置的区域。
为了正常工作,触发延迟差必须大于脉冲宽度。在图 13 中,触发延迟差为 $latex (79-72) \times 3.2 \text{ns} = 22.4 \text{ns},小于门控宽度 35.2 ns。这导致两个 Boxcar 门控重叠,这并非预期结果,并且在蓝线中可以观察到异常峰值。
图 13:触发延迟和窗宽设置错误。触发延迟间差值仅为 22.4 ns,小于窗宽,导致 Boxcar 门控窗口之间出现重叠。因此,显示的 Boxcar 窗口(蓝色迹线)出现较大的异常峰值,表明门控窗口之间存在重叠。
(3)选择平均周期数并调整增益
每个平均器都会产生一个输出结果,代表脉冲信号积分器和基线信号积分器之间的差值。正确配置输出增益至关重要,因为错误的设置会导致输出饱和。如果发生饱和,则应相应降低输出增益。
65,536 的增益因子被设置在图 14(b) 中,这实际上是将最低有效 16 位(小数位)配置为全零,将整数增益(最高有效 16 位)配置为全一。这为 Boxcar 平均器输出创建了单位增益。如果输出出现明显的量化误差,可以增大该值以放大输出。例如,为了获得 655,360 倍增益可以将此控制寄存器设置为 10, 为了获得 32,768 倍衰减可将其降低至 0.5,这样可以防止输出饱和。
在图 14(a) 中,增益控制设置为 6,553,对应 0.1 倍衰减。因此,输出为 -557.26 mV,在可接受的输出范围内。在图 14(b) 中,读数为 -1.0950 V,这代表 Moku:Pro 的饱和极限,表明在此配置下 Averager0 已饱和。为了避免饱和,应降低增益。
如上所述,Boxcar 平均器的输出是 n 个 Boxcar 窗口积分结果的总和,而不是平均值。这种方法更受欢迎,因为在 FPGA 上实现除法器既耗资源又耗时。因此,输出积分结果比计算实际平均值更高效。恢复后的值为 \frac{-557.26 \text{ mV}}{100 \times 0.1} = -55.726 \text{ mV}\。
图 14:不同增益设置下的 Averager0 输出。(a) 模式切换设置为 7,以显示 Averager0 的结果。平均周期数配置为 100,对来自 Boxcar 积分器的 100 个点进行平均,增益设置为 6,553,以应用 0.1 倍衰减。(b) 增益增大到 65,536,从而导致单位增益。这造成输出饱和的情况,输出值为 -1.0950 V,这是 Moku:Pro 的最小输出值。
此外,双 Boxcar 平均器能够同时输出两个 Boxcar 平均器的结果。两个通道用于显示这些值:红色通道 (InA) 代表 Averager0 输出,蓝色通道 (InB) 代表 Averager1 输出。这些输出可以使用 Moku 采集。 数据记录器 或使用 Moku API 进行进一步的数据处理和分析。
图15: 双 Boxcar 平均器输出。 模式切换设置为 4,以输出两个平均器的结果。为了防止饱和,0.1 的增益被配置到 Averager0,0.01 的增益被配置到 Averager1。此时测得,558.33 mV 为 Averager0 的输出值,232.65 mV 为 Averager1 的输出值。
结语
本应用笔记探讨了双 Boxcar 平均器的实现,概述了其核心结构:由四个单 Boxcar 平均器组成,两两组成一对。每对平均器通过计算脉冲积分器和基线积分器之间的差值来生成差分输出结果。本应用笔记还探讨了配置选项,包括分别使用 Python 和 Moku 云编译控制寄存器,以实现灵活地操作。这种增强型设计使双 Boxcar 平均器特别适用于泵浦探测实验,为多 Boxcar 自动化处理和生成差分结果提供了高效解决方案。