Frage

Weiß jemand, wo ich tatsächliche Codebeispiele für Software-Phasenregelkreise (SPLLs) finden kann?

Ich benötige einen SPLL, der ein PSK-moduliertes Signal verfolgen kann, das irgendwo zwischen 1,1 KHz und 1,3 KHz liegt.Eine Google-Suche bringt zahlreiche wissenschaftliche Arbeiten und Patente hervor, aber nichts Brauchbares.Selbst bei einem Ausflug in die Universitätsbibliothek, die ein Regal voller Bücher über Hardware-PLLs enthält, gab es in einem Buch nur ein einziges Kapitel über SPLLs, und das war eher theoretisch als praktisch.

Vielen Dank für Ihre Zeit.

Ian

War es hilfreich?

Lösung

Dies ist ein interaktives Designpaket zum Entwerfen von Digital (dhSoftware) Phase gesperrte Schleifen (PLLS).Füllen Sie das Formular aus und drücken Sie die Taste "Senden", und eine PLL wird für Sie ausgelegt.

Interaktives digitales Phasenregelkreis-Design

Das wird Ihnen den Einstieg erleichtern, aber Sie Wirklich Sie müssen die Grundlagen des PLL-Designs gut genug verstehen, um es selbst zu bauen und später Fehler zu beheben. Dies ist das Reich der digitalen Signalverarbeitung, und auch wenn es keine schwarze Magie ist, werden Sie beim Debuggen sicherlich um Ihr Geld kämpfen.

-Adam

Andere Tipps

Ich nehme an, das ist wahrscheinlich zu spät, um Ihnen zu helfen (was haben Sie am Ende getan?), aber es könnte dem nächsten helfen.

Hier ist ein Golfbeispiel für einen Software-Phasenregelkreis, den ich gerade in einer Zeile in C geschrieben habe und der Sie mitsingen wird:

main(a,b){for(;;)a+=((b+=16+a/1024)&256?1:-1)*getchar()-a/512,putchar(b);}

Ich stelle Ihnen zunächst diese kleine Golfversion vor, um Sie davon zu überzeugen, dass Software-Phasenregelkreise eigentlich ziemlich einfach sind, wenn es um Software geht, auch wenn sie knifflig sein können.

Wenn Sie ihm lineare 8-Bit-Samples auf stdin zuführen, erzeugt er 8-bit-Samples einer Sägezahnwelle, die versucht, auf stdout eine Oktave höher zu verfolgen.Mit 8000 Abtastungen pro Sekunde werden Frequenzen in der Nähe von 250 Hz erfasst, knapp über B und unter dem mittleren C.Unter Linux können Sie dies durch Eingabe tun arecord | ./pll | aplay.Die niedrigen 9 Bits von b sind der Oszillator (was in einer Hardware-Implementierung ein VCO sein könnte), der eine Rechteckwelle (die 1 oder -1) erzeugt, die mit der Eingangswellenform multipliziert wird (getchar()), um die Ausgabe des Phasendetektors zu erzeugen.Diese Ausgabe wird dann tiefpassgefiltert a um das geglättete Phasenfehlersignal zu erzeugen, das zur Einstellung der Schwingungsfrequenz von verwendet wird b drücken a gegen 0.Die Eigenfrequenz der Rechteckwelle, wenn a == 0, ist für b um bei jedem Sample um 16 zu erhöhen, was alle 32 Samples um 512 (einen vollständigen Zyklus) erhöht.32 Samples bei 8000 Samples pro Sekunde entsprechen 1/250 Sekunde, weshalb die Eigenfrequenz 250 Hz beträgt.

Dann putchar() nimmt die niedrigen 8 Bits von b, die bei etwa 500 Hz eine Sägezahnwelle bilden, und diese als ausgegebenen Audiostream ausspucken.

In diesem einfachen Beispiel fehlen einige Dinge:

  1. Es hat nichts Gutes Möglichkeit, eine Sperre zu erkennen.Wenn Sie Stille, Rauschen oder einen starken reinen 250-Hz-Eingangston haben, ist a ungefähr Null und b schwingt mit seiner Standardfrequenz.Abhängig von Ihrer Anwendung möchten Sie vielleicht wissen, ob Sie ein Signal gefunden haben oder nicht!Camenzinds Vorschlag in Kapitel 12 von Entwerfen analoger Chips besteht darin, einen zweiten „Phasendetektor“ zu speisen, der um 90° phasenverschoben zum realen Phasendetektor ist;Sein geglätteter Ausgang gibt Ihnen die Amplitude des Signals, auf das Sie sich theoretisch eingestellt haben.

  2. Die Eigenfrequenz des Oszillators ist fest und fegt nicht.Der Fangreichweite Bei einer PLL ist das Frequenzintervall, innerhalb dessen sie eine Schwingung wahrnimmt, wenn sie nicht gerade auf eine fixiert ist, ziemlich eng;es ist Sperrbereich, über die es hinausgeht, um dem Signal zu folgen, sobald es erfasst ist, ist viel größer.Aus diesem Grund ist es üblich, die PLL-Frequenz über den gesamten Bereich, in dem Sie ein Signal erwarten, zu durchsuchen, bis Sie eine Einrastung erhalten, und dann mit dem Durchsuchen aufzuhören.

Die obige Golfversion ist von a reduziert viel besser lesbares Beispiel eines Software-Phasenregelkreises in C das ich heute geschrieben habe, das zwar eine Sperrenerkennung durchführt, aber kein Sweep durchführt.Es benötigt etwa 100 CPU-Zyklen pro Eingabe-Sample und PLL auf der Atom-CPU in meinem Netbook.

Ich denke, wenn ich in Ihrer Situation wäre, würde ich Folgendes tun (abgesehen von offensichtlichen Dingen wie der Suche nach jemandem, der mehr über Signalverarbeitung weiß als ich, und der Generierung von Testdaten).Ich würde das Signal wahrscheinlich nicht in einem Frontend filtern und herunterkonvertieren, da es bereits eine so niedrige Frequenz hat.Eine Herunterkonvertierung auf ein 200-Hz-400-Hz-Band scheint kaum notwendig.Ich vermute, dass PSK einige neue Probleme aufwerfen wird, denn wenn das Signal plötzlich die Phase um 90° oder mehr verschiebt, verliert man die Phasenverriegelung;Aber ich vermute, dass diese Probleme leicht zu lösen sein werden, und es handelt sich dabei kaum um Neuland.

Haben Sie Matlab mit Simulink?PLL-Demodateien sind bei Matlab Central verfügbar Hier.Die Codegenerierungsfunktionen von Matlab könnten Sie von dort aus zu einer in C geschriebenen PLL führen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top