如何自动计算基于 FPGA 的数字 PLL 的 P 和 I 系数?

信息处理 过滤器设计 信号检测 数字的 pll
2022-02-03 00:59:26

我正在通过 NI myRI0-1900 FPGA 和 LabVIEW 软件设计基于 FPGA 的 PLL。我已经能够使用 PI 环路滤波器创建一个正常工作的 PLL,但是我通过对 1kHz 信号的反复试验发现了正常工作的 P 和 I 系数,但是,当我尝试让我的程序用方程式计算 P 和 I 系数时下面列出的值对于 PLL 来说太大而无法稳定。

作为我算法的背景,我有各种循环设置的管道,我通过 ADC 读取外部样本,将其与 NCO 信号混合以创建 I 和 Q 信号,通过 LIA 算法发送这些信号以恢复 NCO 之间的相位差和 ADC,通过 PI 控制发送此误差信号,然后将后 PI 信号发送回 NCO,以便它可以针对正在跟踪的外部信号增加/减少其相位(频率)。我通过 DAC 输出这个 NCO 信号。

现在,对于 1kHz 的外部信号,我发现 P 系数约为 3.50E-6,I 系数约为 1.00E-8 效果很好。这些系数缩放 NCO 和 ADC 之间的相位差,并将结果相加并发送到相位累加器。我发现这一点的方法是从 0 的 I 系数和一个非常小的 P 开始,然后我将 P 越来越大,直到它工作得相对较好。之后,我保持 P 不变,然后在增大之前将 I 系数设置为非常小。

但是,我想为我的系统计算这些 P 和 I 值,以便我可以自动调整它们的值以适应 ADC 信号的频率。下面的第一个等式是我找到的用于计算 Kp 的公式,而第二个是用于 ENBW 的,其中 Kp 是其函数。我的方程式是从以下链接中找到的:https ://wirelesspi.com/phase-locked-loop-pll-in-a-software-defined-radio-sdr/

ENBW (Bn) 的方程。 zeta 是阻尼因子,w 是角频率 Kp 和 Ki 的方程。 KD 是相位误差检测器的增益,K0 是 NCO 增益,Bn 是 ENBW,Fs 是采样率

对于(我认为是)采样率 Fs,我通过以下方式找到了它。我将管道中的循环设置为都需要 120 个滴答声进行迭代,其中 1 个滴答声 = 25ns。因此,每个循环需要 3 微秒,我可以管理 333.3 kSa/s - 333.3 kHz 的采样率。

对于 Bn 中的 w,我使用 (2pi * f),其中 f 是我的 ADC 信号的频率,单位为 Hz(我有一个单独的算法可以很好地跟踪这个频率,所以我不需要手动输入这个) . 为了测试,我使用 1 kHz ADC 信号。

对于 Bn(ENBW),我使用了下面的公式,但阻尼系数为 0.7071。假设 f = 1kHz,那么我的 Bn 计算结果为 1060.66。

对于 K0 和 KD,它们分别为 1 和 1/2。

最后,我将这些数字代入上面的等式,这样我就可以求解 Kp,但我的答案是 0.0170,它远大于运行良好的 1E-7。我怎样才能获得关于 1E-7 的答案?我的数学过程合乎逻辑吗?我的一些变量可能不正确吗?

如有任何问题或疑虑,请告诉我。我有义务提供帮助。

0个回答
没有发现任何回复~