Ich implementiere derzeit akustische FSK-Modulation und -Demodulation. Ich bin kein Signalverarbeiter…
Da Sie sagen, Sie haben passende Filter und Sie erwähnen die nicht kohärente Erkennung, denke ich, dass Sie bereits so ziemlich eine Person für digitale Kommunikation sind - der Schritt, eine DSP-Person zu sein, ist ziemlich klein :)
Der vollwertige Synchronisierer-SDR-Ansatz
Der klassische Weg, dies zu tun, besteht darin, die Ausgänge Ihrer beiden Filter (Größe) zu quadrieren, das Ergebnis im Tiefpassfilter auf etwas über und während / nach dem Filtern zu dezimieren (falls möglich) dass wir keine Operationen pro Sekunde verschwenden.2fsymbol,max
Ich habe mir ein schnelles FSK-Demod für ein reales Bandpasssignal gemacht (ich denke, wenn ich das noch einmal gemacht hätte, hätte ich die beiden Bandpassfilter durch ein kombiniertes Frequenzübersetzungs- und ein Tiefpassfilter ersetzt, was mir ein komplexes Basisband gegeben hätte, oder eine mehrphasige Filterbank geworfen beim Problem, aber was auch immer) in GNU Radio mit Hilfe des GNU Radio-Begleiters (Flussdiagrammdatei hier ):
Der Punkt ist, dass wir wahrscheinlich die Zeitsynchronisation zwischen der Teilung und dem Schwellenwertblock symbolisieren möchten. Wir könnten es später tun - der klassische Ansatz "Mikrocontroller & digitales Hardware-Design" wäre in der Tat Muller & Mueller Clock Sink und das würde dort genauso gut funktionieren - aber lassen Sie uns die Pisteninformationen nicht verschwenden.
Also würde ich hier eine mehrphasige Taktsynchronisation hinzufügen; Ich muss zugeben, dass ich dies nicht besser formulieren konnte als Tom, ein Schüler von Harris, in der Dokumentation des gleichnamigen GNU- Radioblocks :
Timing-Synchronisierer mit mehrphasigen Filterbänken.
Dieser Block führt eine Zeitsynchronisation für PAM-Signale durch, indem er die Ableitung des gefilterten Signals minimiert, was wiederum das SNR maximiert und ISI minimiert.
aufrichtsinc(0)=1,sinc′(0)=0
di[n]ixi[n]
e[n]=R{xi[n]}⋅R{di[n]}+I{xi[n]}⋅I{di[n]}2.0 .
xi[n]xi[n]xi[n]statt nur des Vorzeichens eignet sich besonders für Signale mit niedrigem SNR.
e[n]dkdratedratedratedkdratedkdαdβdαdβgain24
Dies zu realisieren ist die Audiofrequenz
Wenn Sie diesen Block also richtig parametrieren (und wahrscheinlich den Synchronisierer reduzieren bpf_decim
und lpf_decim
ihm mehr Spielraum für Schaltphasen geben), können Sie eine sehr stabile Wiederherstellung des Symbol-Timings erstellen, was für Ihre Anwendung völlig übertrieben wäre 😁
Da Sie an beiden Enden mit einer Soundkarte abtasten und ich nehme an, dass Sie sich nicht mit Doppler befassen müssen, hat die Symbolrate eine feste Beziehung zu den Trägerfrequenzen (z. B. hat die Sendeseite einen höheren Träger mit a Zeitraum von 8 Soundkarten-Samples, und ein Symbol benötigt immer 128 Samples (es gibt also ein festes Verhältnis). Sie können eine Abkürzung nehmen:
darctandt[n]
In Bezug auf die Paketsynchronisierung
Nun, da Sie einen funktionierenden Demodulator haben, der wahrscheinlich zu synchron ist, wenn kein Signal vorhanden ist, verwenden Sie einfach eine feste bekannte Datensequenz, um Ihr Paket zu finden.