我几乎完成了我的开源 DCF77 解码器项目。当我注意到标准 (Arduino) DCF77 库在噪声信号上表现非常差时,这一切都开始了。特别是当天线靠近计算机或洗衣机运转时,我永远无法从解码器中抽出时间。
我的第一种方法是向输入信号添加(数字)指数滤波器 + 触发器。
尽管这大大改善了情况,但仍然不是很好。然后我开始阅读一些关于数字信号处理的标准书籍,尤其是 Claude Elwood Shannon 的原著。我的结论是,正确的方法是根本不“解码”信号,因为它(闰秒除外)完全是先验已知的。相反,将接收到的数据与本地合成的信号相匹配并确定正确的相位会更合适。这反过来又会将有效带宽降低几个数量级,从而显着降低噪声。
相位检测意味着需要快速卷积。高效卷积的标准方法当然是快速傅里叶变换。但是我正在为 Arduino / Atmega 328 实现。因此我只有 2k RAM。因此,我没有使用 FFT 的直接方法,而是开始堆叠匹配的锁相环滤波器。我在这里记录了不同的项目阶段:
我在互联网上进行了广泛搜索,并没有发现类似的方法。我仍然想知道是否有类似(也许更好)的实现。或者是否有关于这种信号重建的研究。
我不是在寻找:设计接近香农极限的优化代码。我也没有在 DCF77 上搜索有关叠加 PRNG 代码的信息。我也不需要关于“匹配过滤器”的提示,因为我当前的实现是匹配过滤器的近似值。关于维特比解码器或格子方法的具体提示不是我要寻找的——除非它们解决了 CPU 和 RAM 限制的问题。
我在寻找什么:是否有其他重要算法的描述/实现,用于解码 DCF77 等信号,在存在显着噪声的情况下CPU 和 RAM 有限?也许在前互联网时代的一些书籍或论文中?