Software Phase-Locked-Loop-Beispiel-code benötigt
Weiß jemand, von wo ich es finden kann, die eigentliche code-Beispiele von Software Phase-Locked Loops (SPLLs) ?
Brauche ich ein SPLL, dass Sie verfolgen können, ein PSK-moduliertes signal, das irgendwo zwischen 1,1 KHz und 1,3 KHz. Eine Google-Suche bringt zahlreiche wissenschaftliche Veröffentlichungen und Patente, aber nichts brauchbares. Auch ein Ausflug an die Uni-Bibliothek enthält ein Regal voller Bücher, die auf hardware-PLL ' s gab es nur einen einzigen Kapitel in einem Buch über SPLLs und das war mehr im theoretischen als im praktischen.
Vielen Dank für Ihre Zeit.
Ian
- Ich habe gefragt, eine Verwandte Frage auf dsp.stackexchange.com/questions/8456/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese erhalten Sie begonnen, aber Sie wirklich Notwendigkeit zu verstehen, die Grundlagen der PLL-design gut genug, um es selbst bauen, um zu beheben, es später - Dies ist der Bereich der digitalen Signalverarbeitung, und zwar nicht schwarze Magie, es wird sicherlich geben Ihnen einen Lauf für Ihr Geld während des Debuggens.
-Adam
Ich vermute, dies ist wahrscheinlich zu spät, um Ihnen zu helfen (was hast du am Ende dabei?) aber es kann helfen, den nächsten Kerl.
Hier ein Golf gespielt Beispiel einer software phase-locked-loop schrieb ich in einer Zeile von C, die zu singen Sie:
Ich dieses winzige Golf gespielt-version zuerst, um Sie zu überzeugen, dass die software von phase-locked loops sind eigentlich ziemlich einfach, da die software geht, obwohl Sie kann tückisch sein.
Wenn Sie füttern es 8-bit linear samples auf stdin, wird es produzieren 8-bit-samples von einem Sägezahn nachverfolgt werden eine Oktave höher auf stdout. Bei 8000 samples pro Sekunde, es verfolgt Frequenzen in der Nachbarschaft von 250Hz, nur oben, B unten Mitte C. Auf Linux können Sie dies durch Eingabe
arecord | ./pll | aplay
. Die niedrige 9 bitsb
sind die Oszillator - (was könnte einen VCO in einer hardware-Implementierung), das erzeugt ein Rechtecksignal (1 oder -1), die multipliziert wird, die von der Wellenform (getchar()
) zu erzeugen, um den Ausgang des Phasen-Detektors. Die Ausgabe ist dann " low-pass gefiltert ina
zu produzieren, die geglättet phase error signal, das verwendet wird zum einstellen der Schwingungsfrequenz desb
zu schiebena
Richtung 0. Die Natürliche Frequenz der Rechteckwelle, wenna == 0
ist fürb
zu erhöhen um 16 jede Probe, die erhöht es durch 512 (ein vollständiger Zyklus) alle 32 Proben. 32 Proben bei 8000 samples pro Sekunde, 1/250 Sekunde, das ist, warum die Natürliche Frequenz 250Hz.Dann
putchar()
dauert die niedrigen 8 bits desb
, die eine Sägezahn-Welle, bei 500Hz oder so, und spuckt Sie aus wie die output-audio-stream.Gibt es mehrere Dinge, die fehlen aus diesem einfachen Beispiel:
Es hat keinen guten Möglichkeit zu erkennen, lock. Wenn Sie Stille, Lärm, oder eine starke Reine 250Hz-input-Ton, in etwa null, und b oszillieren in seiner Standard-Frequenz. Abhängig von Ihrer Anwendung, möchten Sie vielleicht wissen, ob Sie gefunden haben, ein signal, oder nicht! Camenzind ' s Vorschlag in Kapitel 12 Designing Analog Chips füttern, eine zweite "phase detector" um 90° aus der phase von der realen phase detector; seine geglättet Ausgang gibt man die amplitude des Signals, das Sie haben theoretisch gelockt.
Die Natürliche Frequenz des Oszillators befestigt ist, und nicht fegen. Die Bildschirmausschnitt einer PLL, das Intervall der Frequenzen, innerhalb derer es zu bemerken, eine Schwingung, wenn es derzeit nicht "gelockt" ist, ist ziemlich schmal; seine lock range, über die es wird reichen, um zu Folgen dem signal wenn es einmal gesperrt, ist viel größer. Deshalb ist es üblich, die sweep-PLL-Frequenz alle über den Bereich, wo Sie erwarten, zu finden ein signal, bis Sie eine Sperre, und dann aufhören zu fegen.
Dem Golf gespielt version oben ist reduziert von einem sehr viel besser lesbar Beispiel einer software phase-locked-loop in C, dass ich schrieb heute, die nicht tun, blockiererkennung, aber nicht kehren. Es braucht über 100 CPU-Zyklen pro input-sample per PLL auf den Atom in meinem netbook.
Ich denke, dass, wenn ich in Ihrer situation wäre, würde ich Folgendes tun (abgesehen von offensichtlichen Dingen wie der Suche nach jemandem, der weiß mehr über die Signalverarbeitung als ich, und das erzeugen von test-Daten). Ich würde wahrscheinlich nicht filtern und downconvert das signal in einem front-end, da es bei derart niedrigen Frequenz schon. Downconverting zu einem 200Hz-400Hz band scheint kaum notwendig. Ich vermute, dass PSK bringen wird, bis einige neue Probleme mit sich, da, wenn das signal plötzlich verschiebt sich die phase um 90° oder mehr, verlieren Sie den phase-lock; aber ich vermute, dass diese Probleme leicht zu lösen sein, und es ist kaum noch unberührte Gebiet.
Haben Matlab mit Simulink? Es gibt PLL-demo-Dateien bereit, auf Matlab Central hier. Matlab-code-generation-Fähigkeiten vielleicht bekommen Sie von dort eine PLL in C geschrieben.