我已经几乎完成了我的开源DCF77解码器项目。起初,我注意到标准(Arduino)DCF77库在嘈杂的信号下表现非常差。尤其是当天线靠近计算机或我的洗衣机运行时,我从未能够从解码器中获取时间。
我的第一个尝试是向输入信号添加(数字)指数滤波器+触发器。
虽然这显着改善了情况,但仍不是真正的好。然后我开始阅读一些关于数字信号处理的标准书籍,特别是克劳德·埃尔伍德·香农的原始作品。我的结论是,适当的方法是根本不要“解码”信号,因为它(除了闰秒之外)是完全预先知道的。相反,更恰当的方法是将接收到的数据与本地合成的信号匹配,并确定正确的相位。这反过来会将有效带宽减少几个数量级,从而显著降低噪音。
相位检测意味着需要快速卷积。高效卷积的标准方法当然是快速傅里叶变换。但是我正在为Arduino / Atmega 328实现。因此,我只有2k RAM。因此,我开始堆叠匹配的锁相环滤波器,而不是使用FFT的直接方法。我在这里记录了不同的项目阶段:
我在互联网上进行了广泛的搜索,但没有找到类似的方法。但我想知道是否存在类似(或更好的)实现。或者是否存在这种信号重建的研究。
我不搜索的内容:设计优化代码以接近香农极限。我也不需要关于DCF77上超级PRNG代码的信息。我也不需要有关“匹配滤波器”的提示,因为我的当前实现是匹配滤波器的近似值。除非它们解决紧密的CPU和RAM约束问题,否则不需要针对特定Viterbi解码器或Trellis方法的特定提示。
我正在寻找的内容:是否有其他用于解码像DCF77这样的信号的非平凡算法的描述/实现,在存在显着噪声的情况下具有有限的CPU和RAM? 也许在互联网出现之前的一些书籍或论文中?