FSK-Demodulation - Analyse japanischer EWS-Daten

8

【Dies ist kein Duplikat. Ähnliche Fragen betreffen Szenarien, in denen Menschen die Kontrolle über die Quelldaten haben. Ich nicht.】

In Japan gibt es etwas, das "Emergency Warning Broadcasting System" genannt wird. So sieht es aus, wenn es aktiviert wird: Ссылка

Im obigen Video wird um 2:37 Uhr ein FSK-moduliertes Signal gesendet. Ich möchte dieses Signal analysieren; d. h., bei einer WAV-Datei, die das Signal enthält, möchte ich mit einem StringBuilder enden, der 0s und 1s enthält, um sie später zu verarbeiten. Ich habe die Spezifikation für die Binärdaten und alle, aber das Problem ist, dass ich nichts über Audioprogrammierung weiß. : (

Dies ist nur für ein Hobby-Projekt, aber ich wurde süchtig. Fernseh- und Radiomacher können dieses Signal aufnehmen und ihre Geräte als Reaktion darauf reagieren lassen, also kann es nicht so schwer sein, oder? : (

Fakten über das Signal:

  • Der Markenton ist 1024Hz und der Stoppton ist 640Hz
  • Jeder Ton ist 15.625ms lang
  • 2 Sekunden Pause, bevor das Signal beginnt und nachdem es endet (wahrscheinlich zu Erkennungszwecken)

Was ich bis jetzt gemacht habe:

  1. Schreiben Sie einen einfachen RIFF-Parser, der 8-Bit-Mono-WAV-Dateien akzeptiert und mir erlaubt, Samples von ihnen zu erhalten. Ich habe es getestet und es funktioniert.
  2. Eine Schleife, die 15.625ms von Samples benötigt und:
    1. Verwendet RMS, um nach zwei Sekunden Stille zu suchen
    2. Verwendet den Goertzel-Algorithmus, um zu entscheiden, ob das Signal 1024 Hz oder 640 Hz
    3. ist

Die Probleme, die ich habe:

  • 0s und 1s werden während der Schleife abhängig von den Testdaten verschluckt.
    • Angesichts der Klarheit des Signals (YouTube-to-MP3-Rip) sollte das nicht passieren.
    • Wenn ich in Audacity 30 mal eine sich wiederholende 01-Sequenz erzeuge, nimmt mein Programm etwa 10 der 01 Paare statt 30
    • auf
  • Manchmal werden 0s und 1s getauscht (Nebeneffekt des oben genannten?)
  • Wenn ich den Code so zwicke, dass er mit einer Test-Sound-Datei funktioniert, funktionieren andere Test-Sound-Dateien nicht mehr

Meine Fragen:

  • Kann mir jemand einen Überblick geben, wie die FSK-Decodierung in der Software richtig funktioniert?
  • Muss ich eine Art Filter anwenden, der das Signal auf 640Hz + 1024Hz begrenzt und alles andere stumm schaltet?
  • Was ist der beste Ansatz, um den richtigen Zeitpunkt einzuhalten? Vielleicht mache ich es falsch?
  • Irgendwelche Links zur Anfängerliteratur über diese Art der Audioverarbeitung? Ich würde wirklich gerne lernen und das funktioniert.

Der Code zum Lesen der Beispiele ist (vereinfacht):

%Vor%

Der Audioprozessor ist nur eine Klasse mit:

%Vor%

Danke fürs Lesen. Ich hoffe du kannst mir helfen.

    
aaa 06.12.2013, 07:41
quelle

2 Antworten

2

So würde ich es machen (High-Level-Beschreibung)

  1. Führen Sie Ihr Signal durch eine FFT
  2. sucht nach stetigen Spitzen bei etwa 640Hz + 1024Hz (ich würde mindestens +/- 10Hz sagen)
  3. wenn das Signal für etwa 10 ms stabil ist (mit steady I bedeutet, dass etwa 95% der Samples im selben Bereich liegen) 640Hz +/- 10Hz (oder 1024Hz +/- 10Hz) als Erkennung des Tons verwenden Erkennung auch, um Ihren Timer zu synchronisieren, der Ihnen mitteilt, wann Sie den nächsten Ton erwarten.
MrSmith42 06.12.2013 08:11
quelle
1

Nach dem Umschreiben der Sample-Parsing-Loop- und Silence-Detection-Parts habe ich jetzt etwa 90% gearbeitet. Es gab zwei Hauptprobleme bei meiner Implementierung. Der erste war, dass der Silence-Detektor übereifrig war, also änderte ich ihn von der Verarbeitung jeder Millisekunde von Samples zu jeder halben Millisekunde von Samples. Das brachte mich genau zum Start der FSK-Daten.

Das nächste Problem war, dass ich dann dachte, ich könnte naiv den Demodulator 15.625ms von Samples betrachten lassen, während er sich selbst durch die WAV-Datei arbeitet. Es stellt sich heraus, dass, während dies für die ersten 90 Bits oder so gut funktioniert, die Töne eventuell etwas länger oder kürzer als erwartet werden und der Demodulator nicht mehr synchron ist. Der aktuelle Code findet und korrigiert 13 Bits mit einer solchen zeitlichen Nichtübereinstimmung. Besonders anfällig dafür sind Punkte, an denen das Signal von Markierung in Raum und umgekehrt wechselt.

Es gibt einen Grund, warum das Wort "analog" "anal" enthält. Es ist. Ich wünschte wirklich, ich wüsste mehr über Signaltheorie und digitale Signalverarbeitung. : (

Wie ich das alles entdeckt habe: Ich habe die MP3 importiert und mit Audacity auf den FSK-Part getrimmt. Dann habe ich Audacity Etiketten für jedes Bit erzeugen lassen. Danach ging ich durch die Hervorhebung von Bits nach den Etiketten.

    
aaa 07.12.2013 14:48
quelle