FPGA实践者
除了前面几位说的,我再补充一个方向:可以考虑基于“锁相环模型”本身来设计滤波器,而不是套用通用控制算法。比如,针对ADPLL的离散时间模型,直接设计一个数字滤波器(如IIR滤波器),使其频率响应满足你对环路带宽、相位裕度的要求。这种方法可能比生搬硬套PID结构更直接。
另外,还有“非线性环路滤波器”值得一看。比如,在误差大的时候用高增益快速锁定,误差小的时候切到低增益来减小抖动。这种双模或者多模控制,用FPGA的状态机实现起来并不复杂,资源开销增加有限,但往往对改善锁定时间和稳态抖动的矛盾有不错的效果。
关于卡尔曼滤波的应用案例,我记得在一些高速串行通信的时钟数据恢复(CDR)电路里有应用,因为那里对抖动容忍度极低。但那些通常是ASIC实现。在FPGA上,由于逻辑资源相对有限,更常见的做法是进行大幅简化,比如使用标量卡尔曼滤波(只估计一个状态),或者使用稳态卡尔曼增益(提前算好,存成常数),以牺牲一些自适应能力来换取可实现的复杂度。
总之,建议明确你的首要优化目标:是锁定时间?还是带内相位噪声?还是抗干扰能力?目标不同,算法选择的方向也会不同。先做仿真,用数据说话,再决定要不要上FPGA实战。
