オープン ソースの DCF77 デコーダ プロジェクトをほぼ完成させました。すべては、標準 (Arduino) DCF77 ライブラリがノイズの多い信号に対して非常にうまく機能しないことに気付いたときに始まりました。特に、アンテナがコンピューターの近くにあるとき、または洗濯機が作動しているときに、デコーダーからタイムアウトを取得することができませんでした.
私の最初のアプローチは、(デジタル) 指数フィルター + トリガーを入力信号に追加することでした。
これにより状況は大幅に改善されましたが、それでもあまり良くはありませんでした。それから、デジタル信号処理に関する標準的な本を何冊か読み始め、特にクロード・エルウッド・シャノンのオリジナル作品を読み始めました。私の結論は、適切なアプローチは、(うるう秒を除いて) アプリオリに完全に知られているため、信号をまったく「デコード」しないことであるということでした。代わりに、受信したデータをローカルで合成された信号に一致させ、適切な位相を決定する方が適切です。これにより、実効帯域幅が数桁減少し、ノイズが大幅に減少します。
位相検出は、高速畳み込みの必要性を意味します。効率的な畳み込みの標準的なアプローチは、もちろん高速フーリエ変換です。ただし、Arduino / Atmega 328 に実装しています。したがって、RAM は 2k しかありません。そこで、FFT を使用した単純なアプローチの代わりに、一致するフェーズ ロック ループ フィルターを積み重ねることにしました。ここで、さまざまなプロジェクトの段階を文書化しました。
- 最初の試行: 指数フィルター
- より良いアプローチの開始: 信号/秒ティックへの位相ロック
- 分へのフェーズロック
- 分と時間のデータのデコード
- 信号全体のデコード
- 信号損失に対処するためのローカル クロックの追加
- ローカル合成信号を使用して、信号損失後のロック再取得を高速化
私はインターネットをかなり広範囲に検索しましたが、同様のアプローチは見つかりませんでした。それでも、同様の(そしておそらくより良い)実装があるかどうか疑問に思います。または、この種の信号再構成に関する研究が存在する場合。
私が探していないもの: シャノン限界に近づくための最適化されたコードの設計。また、DCF77 に重畳された PRNG コードに関する情報も検索していません。現在の実装は一致したフィルターの近似であるため、「一致したフィルター」に関するヒントも必要ありません。Viterbi Decoders または Trellis アプローチに関する具体的なヒントは、私が探しているものではありません。CPU と RAM の厳しい制約の問題に対処しない限りは。
私が探しているもの: DCF77 のような信号をデコードするための他の重要なアルゴリズムの説明/実装はありますか? インターネット以前の時代の本や論文でしょうか?