每次消息过零时,数字 PLL 都会失去锁定

信息处理 同步 pll
2022-02-13 11:47:40

我认为我的数字 PLL 几乎准备好了,但我遇到了这个问题,我不知道是什么原因造成的,所以如果你能提供帮助,我将不胜感激。

我在 Costas 循环中使用 DPLL。它似乎工作正常,但只要消息过零,锁就会丢失。之后,它最终再次锁定。你可以在这里看到:

在此处输入图像描述

Costas 循环的输入是: 其中

x(t)=m(t)cos(2πfct+θin)
m(t)=cos(2πfmt)
fm<<fc

不确定这是否是一个已知的现象(可能是),但我找不到任何相关的东西。如果您能指出发生了什么和/或如何解决暂时失去锁定的问题,那就太好了?

我设法让它“工作”的一种方法包括对消息信号进行平方(尽管当消息接近零时相位误差会上升一点),但我不希望将它平方,这样就没有用了我。

这是我为此测试实施的 Costas 循环:

哥斯达黎加环

2个回答

您遇到了麻烦,因为那不是科斯塔斯循环。Costas 环路使用某种形式的解调数据来改变信号的预期相位。

您只是将 I/Q 解调信号应用于 atan2 函数;这使得一种线性扩展相位检测器,但没有确定相位应该翻转 180 度,你的循环自然会试图跟随实际进入的相位。

您可以通过将 atan2 函数更改为乘法,然后使用适当的循环过滤器,将您的循环变成一个简单的 Costas 循环。

似乎您的错误跳转到 -π然后到π

我认为你需要解开你的阶段。让我用一个例子来解释

说 atan2 块的输出是π0.001然后相位差增加 0.002 rad,atan 2 块的输出应该是π+ 0.001,但 atan2 输出限制为 ±π. 因此输出将是 -π+ 0.001 弧度而不是π+ 0.001。您可以使用展开功能来管理这些不连续性。

https://www.mathworks.com/help/matlab/ref/unwrap.html

但是请注意,对于某些 PLL(如电力系统),我们不会展开相位,当频率差太大时,我们只是切换到 FLL 模式(锁频环)。一旦频率锁定,我们切换到 PLL 模式。在这个实现中,我们不需要展开阶段。