Ich habe mein Open-Source-DCF77-Decoder-Projekt fast abgeschlossen. Alles begann, als ich bemerkte, dass die DCF77-Standardbibliotheken (Arduino) bei verrauschten Signalen sehr schlecht arbeiten. Insbesondere konnte ich die Zeit nicht aus den Decodern herausholen, wenn die Antenne in der Nähe des Computers war oder wenn meine Waschmaschine lief.DCF77-Decoder vs. verrauschtes Signal
Meine erste Herangehensweise bestand darin, dem eingehenden Signal einen (digitalen) exponentiellen Filter + Trigger hinzuzufügen.
Obwohl dies die Situation deutlich verbesserte, war es immer noch nicht wirklich gut. Dann begann ich einige Standardbücher über digitale Signalverarbeitung zu lesen und vor allem die Originalwerke von Claude Elwood Shannon. Meine Schlussfolgerung war, dass der richtige Ansatz wäre, das Signal überhaupt nicht "zu decodieren", weil es a priori (außer für Schaltsekunden) vollständig bekannt ist. Stattdessen wäre es passender, die empfangenen Daten an ein lokal synthetisiertes Signal anzupassen und einfach die richtige Phase zu bestimmen. Dies wiederum würde die effektive Bandbreite um einige Größenordnungen reduzieren und somit das Rauschen signifikant reduzieren.
Die Phasendetektion erfordert eine schnelle Faltung. Der Standardansatz für effiziente Faltung ist natürlich die schnelle Fourier-Transformation. Allerdings implementiere ich für den Arduino/Atmega 328. Damit habe ich nur 2k RAM. Statt der direkten Annäherung mit FFT habe ich begonnen, phasenstarre Filter zu stapeln. Ich dokumentiert die verschiedenen Projektphasen hier:
- First try: exponential filter
- Start of the better apprach: phase lock to the signal/seconds ticks
- Phase lock to the minutes
- Decoding minute and hour data
- Decoding the whole signal
- Adding a local clock to deal with signal loss
- Using local synthesized signal for faster lock reacquisition after signal loss
Ich suchte das Internet ziemlich ausgiebig und fand keinen ähnlichen Ansatz. Dennoch frage ich mich, ob es ähnliche (und vielleicht bessere) Implementierungen gibt. Oder wenn Forschung zu dieser Art von Signalrekonstruktion existiert.
Wonach ich nicht suche: Entwurf optimierter Codes für die Annäherung an die Shannon-Grenze. Ich suche auch nicht nach Informationen über den überlagerten PRNG-Code auf DCF77. Ich brauche auch keine Hinweise auf "Matched-Filter", da meine aktuelle Implementierung eine Annäherung an einen Matched-Filter ist. Spezielle Hinweise zu Viterbi-Decodern oder Trellis-Ansätzen sind nicht das, wonach ich suche - es sei denn, sie befassen sich mit engen CPU- und RAM-Einschränkungen.
Was ich suche: gibt es irgendwelche Beschreibungen/Implementierungen anderer nicht-trivialer Algorithmen zur Decodierung von Signalen wie DCF77, mit begrenzten CPU und RAM in Anwesenheit von erheblichem Rauschen? Vielleicht in einigen Büchern oder Zeitungen aus der Zeit vor dem Internet?
Dies ist nicht mein Spezialgebiet, aber haben Sie erwogen, den Tiefpassfilter und Trigger mit dem [Viterbi-Algorithmus] (http://en.wikipedia.org/wiki/Viterbi_algorithm) auf einem Zwei-Zustand zu ersetzen Markov Kette? –
Dies scheint die am meisten überarbeitete Uhr zu sein, die ich je gesehen habe, aber ich mag sie sehr. Muss ein lustiges Projekt gewesen sein. Müssen Sie alle Ihre Blogeinträge lesen, wenn ich mehr Zeit habe. Die Art der Faltung mit einer vorhergesagten Wellenform scheint nahe bei einer optimalen Lösung zu liegen. Haben Sie [Kalman filtering] (http://en.wikipedia.org/wiki/Kalman_filter) gelesen? Dies hat einige Ähnlichkeiten mit dem, was Sie getan haben. Die Idee ist, das beobachtete System grob zu simulieren und dann die simulierten Messungen mit den realen Messungen zu vergleichen, um den Zustand Ihres Modells basierend auf dem Unterschied zu aktualisieren. –
In Bezug auf den Viterbi-Algorithmus und Kamlman-Filter haben Sie recht. Dies sind mögliche Untersuchungsmethoden. Allerdings habe ich sie aufgrund der engen Speicher- und CPU-Beschränkungen nicht getestet. Wenn jemand dies auf einer so schwachen CPU versucht hat, würde ich gerne etwas über die Implementierungen erfahren. In Bezug auf die Übertechnik: Es ist eine seltsame Befriedigung darin. "Alles, was sich lohnt, ist es wert, übertrieben zu werden;)" Der Faltungsansatz mit dem vollständig bekannten Signal wird auch als "optimaler Filter" bezeichnet. Das einzige Problem ist, dass ich aufgrund der Speicherbeschränkungen nur annähern kann. –