Hallo, um ein stark abgeschwächtes optisches Signal zu messen, stellt sich für mich die Frage entweder die Korrelationsmethode zu verwenden, also das Signal, eine Null und eine Eins mit einem Code (pseudozufälliges Rauschen) zu versehen und das empfange Signal eben damit zu korrelieren, oder einen Lock-In Verstärker zu verwenden. Ich bin möglichst an der Amplitude des empfangenen Signals interessiert. Die Frage ist jetzt die Machbarkeit. Sicher geht beides. Einen einfachen selbstgelöteten Lock In oder lieber zwei Mikrocontroller mit Ram und AD/DA Wandlern... Was dürfte einfacher zu realisieren sein, bzw. die besseren Ergebnisse bringen? 3N
Ein Lock-in und Korrelation ist im Wesentlichen dasselbe. Es geht darum dem System einen Zustand aufzudruecken und den dann extrem schmalbandig zu detektieren. Um mal mit ein paar Vorurteilen abzufahren... So schnell loetet man einen Lock-in nicht zusammen. Die Hardware ist fast dieselebe, der Unterschied ist die Anregung. Einmal einen Sinus, das andere Mal eine Pseudorandomfolge. Fang mal mit der analogen Version an.
Lock in ist durchaus machbar, nur keine Ahnung wie gut. Es gab da im Journal of Physics einige Artikel mit Schaltplänen, so im Eurokartenformat. Angenommen man müsste einen 2000 Byte langen Code 20 mal pro Sekunde senden, dann wird es knapp für einen AVR das aus dem Speicher zu holen, in den Speicher zu packen und zu rechnen, oder? Selbst wenn man zwei nimmt? Ob sich woas vielleicht diskret besser aufbauen lässt? 3N
Mich wundert immer noch, dass man mit einem AD-Wandler begrenzter Bitbreite noch Signale weit unter der Amplitudenschrittweite nachzuweisen kann, aber anscheinend geht das bei der Pseudozufallsfolge. Ist das Ergebnis der Korrelation linear mit der Amplitude verknüpft? Bei GPS klappts ja auch, innerhalb einer 1MHz Hochfrequenz-Bandbreite noch pseudozufällige Signale von ein paar Hz Bandbreite zu decodieren.
Der Lock-In als Hardware kann zeitsynchron arbeiten weil du ja Lichtsignale benutzt. Das ist dann für den AVR die geringste Belastung. Der Lock-In-Amplifier ist dann im Grunde nicht anders als ein mit Rechteck getakteter synchroner Gleichrichter mit nachfolgendem Integrator. Möchstes du eine Korrelation per Software machen dann ist das Speicher und Rechenintensiv. Je nach gesendetem Signal bieten sich verschiedene Verfahren an. Entweder die Keule FFT oder auch die FHT -> Fast Hadamard Transformation. Dazu musst du aber als Code für deine Signal spezielle Codes benutzen, orthognale Codes. Am einfachsten sind MLS -> Maximum Length Sequencies -> Pseudo Zufalls Funktionen per Shiftregister die eine maximale Länge besitzen. Dann kannst du für die FHT zwei Permutationsmatrizen berechnen und das empfangene Signal mit der FHT korrelieren. Diese Korrelation benötigt dann nur Additionen und Subtraktionen. Da du aber das Signal selber aussendest und auch empfängst bietet sich der Lock-In-Amplifier geradezu an. Schau mal hier http://cappels.org/dproj/dlmom/dlmom.html http://www.cappels.org/dproj/selflocksyncdet/Synchronous_Detector.html Gruß Hagen
>> Mich wundert immer noch, dass man mit einem AD-Wandler begrenzter
Ja, man spreizt über diese Pseudozufallssequenzen die orthogonal sind
die Information im Spektrum und erhöht damit den SNR. Je länger diese
Sequenz desto höher der SNR, man kommt damit unter die Rauschgrenze des
Übertragungskanales. Wichtig ist das die Autokorrelation des Signales
einen Dirac Implus gibt, im idealfalle. Und das die Kreuzkorrelation der
verschiednenen Codes untereinander sehr flach ist. Leider gibt es nicht
sehr viele dieser Codes mit idealen Eigenschaften. Siehe Barker Codes,
MLS, Gold Codes, Komplementäre Sequenzen usw.
Gruß Hagen
Mit der Forumssuche werden mehrere Threads zu lock-in gefunden, da wird mehrfach der AD630 empfohlen, ein Synchrondemodulator. Im Datenblatt auf Seite 10 ist eine Applikation unter der Überschrift LOCK-IN AMPLIFIER APPLICATIONS: http://www.analog.com/UploadedFiles/Data_Sheets/AD630.pdf
Wooha! Das Datenblatt und die Links sehen ja super aus. Das ist auf jeden Fall einfacher als mit nem AVR groß rumzurechnen. Danke Leute!
Pseudezufallssequenzen macht man sinvollerweise mit einem CPLD. Dort benotigt man fuer jedes bit des rueckgekoppelten Schieberegisters ein Flipflop. Mit 20bit ist man schon bei einer Sequenzlaenge von 1 million. Allerdings bringt das nur was wenn man mehrere Kanaele verwendet, die einander nicht sehen sollen. Nein ? Der AD630 ist gut und geeignet. Man muss sich aber etwas Muehe geben.
Hast Du einen Link wie das mit einem CPLD geht? Ich kann dazu irgendwie nicht viel finden. Muss wohl nach den falschen Stichworten suchen...
Ja, das waere dann eine Xilinx App note : 210, 211, 217 & 220 ( XApp210.pdf, XApp211.pdf,XApp217.pdf, XApp220.pdf )
also falls es nicht gerade 100MSPS an Pseudozufallsequenzen sein soll dann ist ein CPLD/FPGA überdimensioniert. Sendest du deine Codes mit 50-100KHz raus dann reicht ein AVR vollauf. Sinnvoll ist also relativ und in den wenigsten Fällen ist ein CPLD/FPGA wirklich sinnvoll für einen Bastler. Auch wenn ein LFSR nicht wirklich schwierig ist in einen CPLD zu pressen. Das gilt aber auch für einen AVR. Anbei mal eine Impementierung eines SR-LFSRs als Vergleich. Das ist ein Self-Shrinking-Linear-Feadback-Shift-Register, also quasi 2 LFSRs in einem mit einer Periode von 2^63-1. Man sieht im ASM Source das dies nur wenige Befehle sind. Davon abgesehen schätze ich mal das du nicht sofort mit 20 Bit LFSR's also mit 2^20-1 langen Sequenzen anfangen möchtest. Sequenzen mit 127,255 oder 511 Bits reichen für den Anfang erstmal aus. Man muß auch bedenken das je länger diese Sequenzen sind zwar der SNR weiter zunimmt aber auch die notwenige Bandbreite und damit Verarbeitungseschwindigkeit immer stärker anwächst, oder eben die effektive Datenübertragungsrate immer geringer wird. Bei einem 20 Bit LFSR sind das 2^20-1 Chips. Wolltest du 1 Baud Datenrate damit ereichen müssen deine Chips mit 1048575 also rund 1Mhz rausgesendet werden. Also 1Mhz Baseband um 1 Bit pro Sekunde zu übertragen. Ein 20 Bit LFSR als MLS ist also schon sehr anspruchsvoll. Bei meinen Experimenten mit MLS und der FHT benutze ich Sequenzlängen von 63 bis 2047 Bits. Sequenzen mit zb. 16-32Kbits sind schon zeitaufwendiger selbst für einen PC der eine Soundkarten Input als Stereosignal per FHT auswertete (48Khz Samplingfrequenz und 12Khz BPSK kodierte MLS Sequenz). Gruß Hagen
Hagen, das ist interessant. Weshalb kriegt man nur ein Bit pro LFSR Periode durch ? Das ist doch frei waehlbar. Der Gewinn an SNR ist natuerlich das Verhaeltnis der Bandbreiten. Der Nachteil der kurzen LFSR ist der zunehmende DC Anteil. Die Periode hat ja immer eine Null mehr als Einsen.
Hallo ich würde das nach Möglichkeit das alles im AVR machen. Einen Timer - Interrupt setzten (z.B. von 1 ms) und darin messen und danach den Sinalpin toggeln. Die Werte in einem Ring speichern und die Summe bilden. z.B. so ähnlich, je nach Compiler: static int feld[100], i, z; static long summe; Timer_interrupt() { feld[z] = read_adc(0); PORTC.0 = z % 2; // PORT toggeln z++; z%100; for(i = summe = 0; i<100; i++) if ( i%2 == 0) summe = summe + feld[i] ; else summe = summe - feld [i] ; // Die Summenbildung koennte man noch vereinfachen (falls erforderlich). } // Achtung : Das Programm ist nicht getestet ! Die Auswertung enthält Werte der letzten 100ms. Das Programm läuft im Hintergrund und der AVR kann für andere Zwecke genutzt werden. Für eine Lichtschranke sollte das genügen. Gruß Fritz
Ergänzung: statt z%100; ist z %= 100; zu schreiben, da das ja gespeichert werden muss. Fritz
Mit einer analogen Loesung bekommt man einiges mehr an Signal to Noise als wenn man mit einem AVR mit 1ms choppert. Mit einem AD630 kann man das Signal aus 100dB noise noch rausziehen, gemaess Appnote. Ich hab meine Muehe damit, dass das mit einem AVR noch moeglich sein soll. Zumal der dynamische Bereich des ADC gerade mal 60dB ist.
Hallo GPS, das mit der besseren Lösung mit dem AD630 ist unbestritten. Aber die AVR Lösung ist um Größenornungen einfacher. Falls jemand eine Platine hat und mit dem Compiler umgehen kann, ist das in 2 Stunden erledigt. Die schwächere Leisung beim AVR kommt von der Speichetiefe. Falls aber diese Leistung (aber trotzdem eine beachtliche Steigerung gegenüber einer einfachen Messung) ausreichend ist, sollte man eine uC Lösung ins Auge fassen. Ein Print mit 100 dB Störabstand ist auch nicht so leicht gemacht. Gruß Fritz
>Hagen, >das ist interessant. Weshalb kriegt man nur ein Bit pro LFSR Periode >durch ? Das ist doch frei waehlbar. Der Gewinn an SNR ist natuerlich das >Verhaeltnis der Bandbreiten. Der Nachteil der kurzen LFSR ist der >zunehmende DC Anteil. Die Periode hat ja immer eine Null mehr als >Einsen. Die Autokorrelations- und Kreuzkorrelations- Eigenschaften einer MLS beziehen sich immer auf die komplette Sequnez in kompletter Länge. Ein 8 Bit LFSR mit nicht reduzierbarem Polynom erzeugt eine Sequenz von 2^8 -1 Bits = 255 Nutzbits. Nur die komplette Sequenz besitzt die orthogonalen Eingenschaften die dann in der Autokorrelation einee Dirac-artigen Impulsantwort liefert. Verkürzt man das so vernichtet man quasi die Eigenschaften die man sucht. Aber das bezieht sicht jetzt auf die Korrelation wenn man per Software zb. mit der FHT korrelieren möchte. Bei einem Lock-in Amplifier, getaktetem synchronen Gleichrichter, ist das weniger relevant sollte aber berücksichtig werden wenn man das bestmögliche rausholen möchte. DIe Mathematik dahinter bleibt nämlich die Gleiche. Der DC Anteil kann vernachlässigt werden. In beiden Fälle akkumuliert man meisten nicht den DC Anteil im Integrator. Meistens nimmt man auch einen getakteten Integrator der nach einer Meßperiode zurückgesetzt wird. Also keinen kontinuierlichen Integrator. Eine MLS Sequenz beschreibt ja exakt 1 Datenbit, also warum sollte man im Integrator über diese Datenbit-Grenzen = MLS Länge hinweg weiter integrieren wollen ? Möchte man bei eienr Lichtschranke nur die Störunanfälligkeit mit dieser Methode erhöhen dann braucht man nicht die math. Eigenschaften der Korrelation, eine x-beliebige Zufallsfolge synchron ausgesendet und gleichzeitig synchron auf Empfängerseite gleichgerichtet, reicht dann aus. Problematisch wird es erst dann wenn im gleichen Medium mehrere dieser Lichtschranken sich beeinflussen könnten. Dann muss man wirklich MLS Sequenzen benutzen und für jede Lichtschranke eine andere. So wird dann math. korrekt sichergestellt das die gegenseitige Beeinflussung der Lichschranbken untereinander auf eine Minimu reduziert wird. In diesem Falle würde ich aber keine MLS benutzen sondern Gold- oder Kasami Codes. Das sind quasi 2 MLS verknüpft. Verknüpft man als Goldcode 8 Bit MLS dann hat man 256+1 verschiedene wählbares Codes mit 2x 8 Bit LFSRs. Deren Auto-/Kreuzkorrelation ist zwar leicht schlechter als bei puren MLS dafür aber hat man viel mehr verschiedene mögliche Codes. Es gibt zb. nur 16 Polynome, also nur 16 verschiedene nutzbare MLS mit Länge 255. Bei 6 Bit MLS, 63 Bit Länge, nur noch 6 verschiedene nutzbare Polynome. Dabei muß man aber berücksichtigen das davon die Hälfte der Polynome nur das Inverse Polynom der anderen Hälfte sind, quasi die MLS rückwärts betrachtet. Bei 12 Bit LFSRs gibt es gerademal 144 nutzbare Polynome, also 72 vorwärts und 72 rückwärts betrachtet, quasi inverse Polynome. Gruß Hagen
Man könnte zwar mehrere Bits nun mit verschiedenen Sequenzen kodieren, aber das wäre bei so wenig nutzbaren Sequenzen Verschwendung. Im Allgmeinen kodiert man mit einer MLS ein Bit. +1 wird mit der normalen MLS kodiert und -1 mit der invertierten MLS. Im DC-Integrator entsteht so eine Spannung die abweichend vom virtuellen 0-Punkt, zb. 2.5Volt nach +5V oder 0V ausschlägt. Je größere diese Abweichung desto sicherer hat man den Kode erkannt, bzw. desto suaberer und Störungsfrei wurde der Kode übertragen. Gruß Hagen
Die Sendediode würde ich per BPSK koderter MLS ansteuern. Das ist das einfachste. BPSK ist dann nichts anderes als Manchaster Kodierung aber eben mit dem Unterschied das sich die Effektivfrequenz des Signales halbiert. Erhöht man den Takt um's 2 fache so hat man BPSK aus Manchaster. Exakt so habe ich meine Experimente mit der Soundkarte gemacht. Stereo, Linker und Rechter Kanal mit 2 unterschiedlichen MLS in BPSK kodiert gefüttert. Beie Lautsprecher im Abstand von 30 cm zueinander ausgerichtet und mit dem Monomikrofon sofort wieder aufgenommen. Über die Laufzeitunterschiede nach der Dekodierung per FHT wurde dann die Position des Mikros trianguliert. Gruß Hagen
Ach übrigens, wegen dem DC-Offset. Der wird durch die FHT selber eliminiert. Eine FHT kann nur mit Matrizen effizient arbeiten die eine Potenz von 2 sind. Für eine 8 Bit = 255 Chip lange MLS muß man also eine FHT mit 256 Elementen durchführen. Man expandiert nun einfach die 255 Chip MLS um eine führende 0. Am anderen Ende der FHT nimmt man diesen 0-Index und hat den DC-Anteil = DC-Offset ermittelt. In den restlichen 255 Ausgängen findet man den Slot der den größten Ausschlag besitzt, das ist quasi der zeitliche Offset an dem die höchste Übereinstimung mit der gesuchten MLS im empfangen Signal gemessen wurde. Möchte man beim Lock-In-Amplifier noch ein Quentchen mehr rausholen so baut man 2 Lockin-Amplifier auf. Also I/Q Kanäle und am Ende wird mit R = Sqrt(I^2 + Q^2) das Effektivsignal berechnet. So werden Phasenunterschiede eliminiert und der SNR nochmals erhöht. Gruß Hagen
Hagen Re wrote: > Nur die komplette Sequenz besitzt die orthogonalen > Eingenschaften die dann in der Autokorrelation einee Dirac-artigen > Impulsantwort liefert. Verkürzt man das so vernichtet man quasi die > Eigenschaften die man sucht. So drastisch würde ich das nicht ausdrücken. Auch wenn man die Folge abschneidet bleiben die AK-Eigenschaften noch "relativ" gut. > In diesem Falle würde ich aber keine MLS benutzen sondern Gold- oder > Kasami Codes. Das sind quasi 2 MLS verknüpft. Verknüpft man als Goldcode > 8 Bit MLS dann hat man 256+1 verschiedene wählbares Codes mit 2x 8 Bit > LFSRs. Deren Auto-/Kreuzkorrelation ist zwar leicht schlechter als bei > puren MLS dafür aber hat man viel mehr verschiedene mögliche Codes. Die Autokorrelation ist schlechter, die Kreuzkorrelation ist dafür besser.
>So drastisch würde ich das nicht ausdrücken. Auch wenn man die Folge >abschneidet bleiben die AK-Eigenschaften noch "relativ" gut. Schon richtig, deshalb gibts ja in der Praxis auch solche Verfahren. Mathematisch betrachtet ist es aber wirklich so das man nur so das beste machbare und vorausberechenbare SNR erhält. >Die Autokorrelation ist schlechter, die Kreuzkorrelation ist dafür >besser. Auch dem kann ich zustimmen. Allerdings gilt das dann nur für speziell seektierte Goldcodes. Also nicht alle der math. machbaren Goldcodes innerhalb dieser Sequenzen sind gleich gut. Selektiert man nach bester Qualität so reduziert sich drastisch die Anzahl der gute Goldcodes. Das hat dann zur Folge das der Vorteil der größeren Anzahl an machbaren Goldcodes wieder sich soweit reduziert das sie mit MLS vergleichbar wären. Da man dies nicht möchte, man also die Vielzahl an Goldcodes benötigt, reduziert sich eben die Auto- und Kreuzkorrelation in deren Qualität wieder, eben betrachtet auf den Durchschnitt aller Goldcodes einer Sequenz. Das habe ich übrigens experminetell nachvollziehen können, ich habe ein PC Program geschrieben um MLS/GoldCodes und die nötigen Permutationsmatrizen für die FHT zur berechnen, also die irreducibel Polynome, und innerhalb einer Gruppe die Autokorrelationen und Kreuzkorrelationen berechnet und dann daraus die besten Codes ausgewählt. Schraubt man die Qualitätsvorgaben so hoch wie bei MLS um Goldcodes zu bewerten dann ist es tatsächlich so das deren Anzahl drastisch sinkt. Dazu gibt es im WEB aber auch Seite die das mathematisch erklären. Nicht aus jeder Kombination zweier MLS entstehen gute Goldcodes. Kasami Codes empfand ich als generell schlechter und auch aufwendiger zu programmieren. Mit Goldcodes bin ich bei Kodierungen von Daten noch am besten gefahren. Für zb. Tiangulierungsprobleme, Schall/Ultraschall mit MLS. Wobei aus dem Ultraschallprojekt eine Leiche geworden ist, wie so oft ;) Gruß Hagen
Nochmal genau, meine Software erzeugte alle MLS und Goldcodes mit zb. 127 Bit Länge und verglich alle möglichen Codes mit sich selber und auch untereinander per Auto-/Kreuzkorrelation um die besten Codes zu finden. Das Resultat als durchschnittliche Summe zeigte das MLS eine bessere Auto- und Kreuzkorrelation als die Goldcodes haben. Nur wenn man eine selektierte Auswahl an Goldcodes im Vergleich zum Durchschhnitt aller MLS betrachtete stimmte deine Aussage ! Deswegen gilt eben auch das nicht jede Kombination zweier MLS eine guten Goldcode ergibt. Gruß Hagen
Hagen, Danke fuer die ausfuehrlichen Erklaerungen zu den MLS und deren Anwendungen im Detail. Das sollte man in ein Tutorial rausziehen.
> Nicht aus jeder Kombination zweier MLS entstehen gute Goldcodes. Nicht aus jeder Kombination zweier MLS entstehen Gold-Codes. Gold-Codes haben alle die selben AK- und KK-Eigenschaften. Siehe z.B. http://books.google.com/books?id=hQ6bl3RG04sC&pg=PA257&hl=de&sig=8NJcwOIweGjoUHNAVETKJ80aL0Y#PPA257,M1.
@Andreas, hast Recht ich habe nochmal in meinen PDFs nachgeschaut. Nur frage ich mich jetzt warum ich den Aufwand in meiner Software überhaupt betrieben habe um "prefered Pairs" zu finden. Goldcodes haben noch einen anderen Nachteil. Ich habe keine Methode gefunden sie per FHT korrelieren zu können. Das Einzigste was ich als machbar umgesetzt habe ist bei einem synchronisiertem Signal das empfangene Signal mit einer der beiden MLS aus dem Goldcode zu XOR'en und dieses Resulat dann per FHT für die zweite benutze MLS im Goldcode zu korrelieren. Leider kann man das nicht effizient bei nicht synchonisierten Signalen benutzen. Also zur Synchronisation benutzen. Gruß Hagen
Hallo, das mit den MLS Codes ist doch etwas übertrieben. Es geht ja nur um einen Sensor ("um ein stark abgeschwächtes optisches Signal zu messen") und nicht um mehrere Signale gleichzeitig. Aus desem Grund ist ein Chirp viel günstiger. Die Pseudozufallsgeneratoren haben leider "Nebenmaxima" bei der Korrelation. Der Chirp hat eine sehr scharfe Korrelationsspitze. (Sehr interessant ist auch ein Chirp, der tatsächlich von einer Fledermaus abgegeben wird. Steigt logarithmisch und hat mehrere Frequnzen gleichzeitig.) Also einfach einen linearen Chirp nehmen. Von den Fledermäusen lernen! Gruß Fritz
Ich weiß jetzt mit "Sweep" nichts anzufangen. Aber eine Folge von z.B. 1011001110001111000011111100000 oder jede Frequenz ca gleich lang z.B. 101010101010110011001100111000111000 führt zu eine scharfen Autokorrelierten. Gruß Fritz
Ein Chirp ist ein endlicher Pulszug, der ueblicherweise einen steigenden Sweep enthaelt. Dh zuerst kommen die tiefen Frequenzen, dann die hohen. Vom Ursprung des Begriffes, ein Vogel ruft so, ist das Wort ein amerikanisches Wort, das die Bedeuting im Klang selbst enthaelt. Zuerst kommen die tiefen Frequenzen, dann die hohen. Also : 00000111110000111100011100110100000 vereinfacht.
Ein binärer Chirp hat auf keinen Fall bessere AK-Eigenschaften als eine MLS. Wenn ich mich richtig erinnere ist die MLS sogar optimal.
Hat es jemand von Euch geschafft, den Lock-In Verstärker mit dem AD630 zu realisieren? Ich muss das Gleiche ls Praxisprojekt machen und komme ohne Hilfe nicht weiter :-( Grüße
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.