Hallo ich würde gerne die Phasenverschiebung von zwei Sinussignalen mit einem uC messen (am liebsten AVR).... Die Umwandlung erfolgt 1. durch Optokoppler bzw. durch OPV und einem XOR-Gatter Die Messgenauigkeit soll 1uS betragen is das überhaupt möglich? oder gibt es da einfachere analoge Lösungen? Danke und herzliche Grüße
Wie die Signale Vorliegen ist irgendwie nicht ganz klar. Da könnte es schon schwer werden das die Flanken genau erkannt werden. Eine Zeit mit 1 µs Genauigkeit zu messen ist für einen µC kein wirklich großes Problem. Die meisten AVRs haben eine ICP Einheit um damit ein Zeit zu messen, einige größere haben auch 2 ICP Einheiten - damit wäre es am Einfachsten. Sonst müsste man das ganze für den einen Eingang in Software mit einem Interrupt realisieren. Das geht für 1 µs auch, wenn auch nicht ganz so einfach. Es gibt auch eine relativ einfache analoge Lösung mit dem Phasendetektor aus eimem PLL IC wie 74HC4046. Da bekommt man dann aber eher die Phase und nicht direkt die Verzögerung heraus.
Alternativ kannst Du auch 2 identische Schmidt-Trigger verwenden (z.Bsp. Inverter mit Schmidt-Trigger Verhalten) und dahinter ein XOR-Gatter verwenden. Dieses ist dann immer High am Ausgang, wenn die Eingangssignale unterschiedlich sind. Wenn Du eine Phasenverschiebung von 0 hast, so hast Du am Ausgang immer low. Bei einer Phasenverschiebung von 180° hast Du am Ausgang immer High. Dazwischen erhältst Du ein PWM-Signal mit einem Tastverhältnis proportional zum Phasenversatz. Da die Ausgangsspannungen des Gatters sicherlich nicht genau bei 0 und 5 Volt sind, ist es eventuell sinnvoll einen Begrenzerverstärker nach zu schalten, die Eingänge regelmäßig zu tauschen (damit Du einmal das Signal, dann 180°-Das Signal bekommst), oder einen Gatter daneben als Referenz zu verwenden.
es handelt sich um ein 50hz AC signal, welches um einige us verschoben ist. (Verlustfaktorbestimmung)
Einfach beide Signale abtasten und die Kreuzkorrelation berechnen?
SNR schrieb: > Einfach beide Signale abtasten und die Kreuzkorrelation berechnen? Schlechte Idee, da der interne AD-Wandler die Signale nur sequentiell abtasten kann, nicht aber parallel. Der durch die Sequenzierung entstehende Fehler ist auch ungefähr in der Größenordnung des Messwerts. Für die Lösung wäre ein externer AD-Wandler erforderlich und der Rechenaufwand dieser Lösung ist für so ein einfaches Problem eigentlich unnötig hoch.
SNR schrieb: > Einfach beide Signale abtasten und die Kreuzkorrelation berechnen? ROFL. Klasse Idee mit einem 8Bit µC :-)
1. Beide Signale mittels OP hoch verstärken, so dass "nahezu" ein Rechteck entsteht. 2. Beide Rechtecksignale auf ein schnelles XOR-Gatter geben. 3. Die Länge des H-Signals ist gleich die Zeit der Phasenverschiebung, die nun mittels µC gemessen werden kann. 4. Fertig
Hi, das ergibt dann ja eine gewünschte Messgenauigkeit/Auflösung von 18m°. Das ist schon extrem wenig. Messgeräte die das "wirklich" können sind nicht billig und das baut man auch nicht einfach so. Berechne mal die Ansteigsgeschwindigkeit des Sinus im Nulldurchgang und um wie viel Volt sich dort die Spannung pro 1us ändert. Wir lösen das seit längerem auch über die Kreuzkorrelation. Da bekommst du mit relativ wenig aufwand gute Ergebnisse. Leider nicht auf 8bit uC, außer du hast x Sekunden Zeit um die Messung auzuwerten und verwendest externe Wandler (müssen synchron sampeln!) Gruß Lars
Lars schrieb: > das ergibt dann ja eine gewünschte Messgenauigkeit/Auflösung von 18m°. > Das ist schon extrem wenig. Messgeräte die das "wirklich" können sind > nicht billig und das baut man auch nicht einfach so. Berechne mal die > Ansteigsgeschwindigkeit des Sinus im Nulldurchgang und um wie viel Volt > sich dort die Spannung pro 1us ändert. Das ist korrekt, das sieht mal wieder nach einer gewünschten Genauigkeit aus, über die man nicht groß nachgedacht hat. Lars schrieb: > Wir lösen das seit längerem auch über die Kreuzkorrelation. Da bekommst > du mit relativ wenig aufwand gute Ergebnisse. Na ja das wenig Aufwand ist relativ. Vor allem wenn du mit der Kreuzkorrelationsmethode auf die oben angegebene Genauigkeit kommen willst. Du brauchst ne ganze Menge synchrone und genau Abtastwerte und musst mit denen auch noch recht aufwendig Rechnen. Wobei natürlich die Störunterdrückung bei einer Berechnung über Kreuzkorrelation das groß Plus ist.
Das synchron sampeln ist nicht unbedingt nötig, denn die Verzögerung beim AD im µC ist konstant und bekannt. Man kann die also raus rechnen. Wenn man ein kleine Verzögerung hat, wäre aber eine gleichzeitige Abtastung schon besser. Für die volle Kreuzkorrelation reicht ein 8 Bit µC eher nicht. Für ein paar Punkte, z.B. um den Nulldurchgang sollte es aber reichen. Da man nur eine bekannte Frequenz hat, könnte man die Auswertung auch etwas anders machen, ggf. auch noch mit dem 8 Bit µC: die beiden Signal für sich analysieren und die Phase zu einer gedachten internen Ref. per Fouriertransformation (keine FFT, sondern zu Fuss weil man nur 2 Punkte braucht) bestimmen. Im Prinzip sollte sich die Aufgabe auch mit der Soundkarte am PC lösen lassen. Gegen Drift im Analogen Eingangsfilter könnte man ggf. die Kanäle einmal per Relais tauschen, wenn man etwas Zeit hat. Für den PC ist die Korrelationsfunktion keine Herausforderung mehr. Die eher analoge Lösung mit genauer Messung von nur den Nulldurchgängen hängt davon ab wie viele Störungen man im Signal hat. Direkt mit der Wellenform von der Netzspannung wird das schon sehr schwer. Da braucht man dann erst eine Filterung um die Oberwellen zu entfernen und kann dann möglichst alle Flanken auswerte. Die Schwierigkeit liegt darin den Filter Driftarm zu bekommen, der Teil mit dem µC ist dagegen eher Einfach.
_Gast aus HL_ schrieb: > Schlechte Idee, da der interne AD-Wandler die Signale nur sequentiell > abtasten kann, nicht aber parallel Das kommt drauf an was für einen uC Du hast. Manche haben 2 SAH drin, manche auch gleich mehrere AD-Wandler. Udo Schmitt schrieb: > ROFL. Klasse Idee mit einem 8Bit µC :-) 50Hz mit dementsprechender Überabtastung bekommt selbst ein 8-Bitter hin. Timer wo die ADCs triggert über Interrupt. 2x Ringpuffer. Nachdem der Puffer voll ist die Berechnung durchführen. In der Zeit braucht man ja nicht unbedingt weiter Sampeln. Wobei er nicht explizit 8-Bit-uC gesagt hat. Kann also auch ein AVR32 sein. Gruß
Ulrich schrieb: > Für die volle Kreuzkorrelation reicht ein 8 Bit µC eher nicht. Für ein > paar Punkte, z.B. um den Nulldurchgang sollte es aber reichen. Hmm, stimmt eigentlich. Solange die maximal zu erwartende Verschiebung deutlich innerhalb des Abtastfensters ist würde das doch reichen. Aber wenn ich eine Genauigkeit von etwa 1µs erreichen will muss doch meine Abtastrate mindestens 2MSamples/s sein (Stimmt doch?), und wenn die Phasenverschiebung größer werden kann dann brauche ich entsprechend viele Messwerte oder muss die Phasenverscheibung entsprechend ungefähr kennen, so daß ich nur zwei Ausschnitte sample mit entsprechendem Versatz und die KK nur für einen Teilbereich berechne. Ulrich schrieb: > Im Prinzip sollte sich die Aufgabe auch mit der Soundkarte am PC lösen > lassen. Wie willst du damit auf eine zeitliche Auflösung im µs-Bereich kommen?
Die Abtastpunkte müssen nicht so nahe zusammenliegen. Zum einen gibt der AD Wandler ja nicht nur 0 und 1 aus, sondern auch zwischenwert. Zum anderen wird man deutlich mehr als 1 Periode messen und kann entsprechend mitteln für mehr Auflösung. Das gilt für den AD Wandler im µC und auch die Soundkarte. Wenn man den AD Wandler nutzt geht es ja gerade nicht darum zu sehen zwischen Elchen Sampeln der Nulldurchgang ist, sondern man nutzt die ganze Wellenform aus. Einfach nur der Nulldurchgang wäre die andere Methode mit einem analogen Filter und dann einer klassischen Zeitmessung, z.B. per ICP. Wenn man sich die Auswertung so vorstellt, das man vom Signal den Sinus und Cosinus Anteil bestimmt, muss man für 1 µs in der Zeit, bzw,, 0.018 Grad, den kleineren Teil auf etwa 13 Bit genau bestimmen. Das ist keine so besonders hohe Anforderung und sollte auch mit nur 8 Bit Auflösung des ADs noch ganz gut gehen, weil man je relativ viele Samples (z.B. 5000 pro Sekunde) mittelt. Man braucht aber schon ein bisschen Zeit (ein paar Sekunden ?) für die Messung. Eine Wichtige Frage ist dabei noch wie viele Störungen das Signal hat - also ob die 50 Hz aus dem Netz kommen, oder von einem extra Funktionsgenerator.
Warum einfach, wenn es auch kompliziert geht? ich würde an beide Signalquellen einen simplen Komparator anschließen (MAX999 oä.) und damit nen Counter starten bzw. stoppen oder ne angeschlossene Captureeinheit triggern, kurzum die Zeitunterschiede der Nulldurchgänge digital erfassen. Immerhin kann man mit gängigen uC mit Takten im 10 MHz-Bereich Zeiten mit 100 ns auflösen. Sollte doch ausreichen. Und wenn man dann noch die Ergebnisse von - sagen wir mal 10 Messungen - überlagert, also Mittelwert bildet, dann sollte der Einfluß von Fremdsignalen auch wegzukriegen sein. W.S.
W.S. schrieb: > ich würde an beide Signalquellen einen simplen Komparator anschließen Hast du dir das mal ausgerechnet? Die Anstiegsgeschwindigkeit des Sinussignals im Nulldurchgang beträgt U' = 2*pi*f*Us Bei einem Singal mit 50Hz und 1V Uspitze gibt das 314V pro Sekunde. Oder eben 314uV pro Sekunde. 314uV genügen zwar um einen Komparator zu kippen, aber du hast bestimmt noch Rauschen etc. auf dem Signal und dann Schaltet der Komparator im Nulldurchgang unzählige male bis er sich endlich entschieden kann wohin er will. Klar kann man das Signal verstärken und begrenzen, dass der Nulldurchgang viel steiler wird, aber dann kommt die Phasenverschiebung der Verstärker wieder dazu. Ok die kann man herausrechnen wenn sie konstannt bleibt, aber bleibt sie das? Ist sie Amplitudenabhängig? (Und das wird sie sein!) Ohne jetzt werbung machen zu wollen, nur als Vergleich: http://www.omicron.at/fileadmin/user_upload/files/pdf/en/CMC-256plus-Technical-Data-ENU.pdf Das hier beschriebene Gerät kosten so viel wie ein Mittelklassewagen und erreicht eine Phasengenauigkeit von 5m°. Die Messgeräte im Kalibrierraum sind gerade so im Stande diese Genauigkeit zu messen und sind mit die Besten auf dem Markt. (Messung über Kreuzkorrelation). Mit einer Komparatorlösung kommst du auf ca. 100m° und dann ist ziemlich bald schluss. Ich würde die Lösung mit AD Wandler vorschlagen. Etwas Mathematik mit komplexen Zahlen und dann wird das schon.
Wie schon oben gesagt wurde, Kreuzkorrelation oder FFT der Signale sind der zielführende Weg. Mit einem AVR wird das vermutlich nix, eher DSP oder zumindest ARM Cortex. Als ADC würd ich einen Audio Typ nehmen, die haben meist 2 Kanäle, die synchron sampeln.Die Abtastrate muss aufgrund der Mittelungseigenschaften von FFT/Kreuzkorrelation nicht extrem hoch sein. Die üblichen 192kHz sollten völlig ausreichen. Die analoge Signalaufbereitung sollte so einfach und qualitativ hochwertig wie möglich sein (Phasenverschiebungen).Hab das mal für Leistungsmessung am Netz gemacht und war dann bei 10,24kHz Abtastrate doch auf ca. 0,1° reproduzierbar. Grüsse
der Neuling schrieb: > is das überhaupt möglich? oder gibt es da einfachere analoge Lösungen? Deinem Namen zufolge hast Du vielleicht noch Probleme mit Auflösung und Genauigkeit, mit Anspruch und Wirklichkleit. Eine einfache Möglichkeit, Deine Signale zu bewerten findet sich in der Codesammlung unter Beitrag "Stoppuhr – Geschwindigkeit – Pulsweite mit Atmega88". Mit der Schaltung kannst Du die Phasenverschiebung messen und sehen, wie stabil die Signalaufbereitung arbeitet. Unter Umständen siehst Du, dass auch eine geringere Genauigkeit völlig ausreichend ist.
der Neuling schrieb: > ich würde gerne die Phasenverschiebung von zwei Sinussignalen mit einem > uC messen Möglicherweise interessiert es ja einen.
Wenn man schon den Aufwand treibt und die Kreuzkorrelation ausrechnet, dann sollte man danach nicht nur das Maximum als größten Einzelwert suchen, sondern besser da noch einmal eine Sinusfunktion anpassen, oder wenigstens eine Parabel in der Nähe des Maximums. Wenn man einen nähungsweisen Sinus Signal mit bekannter Frequenz hat, kann man auch gleich einen Sinus an die beiden Signal anpassen. Das geht auch bei nicht genau bekannter Frequenz noch recht schnell und liefert dann auch ein recht genaues Ergebnis. Die Korrelationsfunktion braucht man eigentlich nur, wenn man die Signalform nicht kennt und man eine Verzögerung bestimmen will.
Die Kreuzkorrelation kannste fuer diese Anwendung in die Tonne kloppen. Die Anforderungen sind ein ueblicher akademischer Furz. Bei 20ms periodendauer ist 1us gleich 50ppm. Die Kreuskorrelation hat ein extrem flaches Maximum fuer Phasengleichheit eines Sinus. Was besser ist, ist die Kreuskorrelation mit einem 90 grad verschobenen Sinus. Den erhaelt man mit einem PLL, der mit dem Netz mitlaeuft. Schade, wenn das Netzsignal nicht exakt Sinus ist. dh man muesste erst mal einen Oberwellenfilter drueberlassen. Ich wuerd die Kreuzkorrelation durch eine Multiplikation und langsamem Tiefpass erstzen.
Pico Oschi schrieb: > Die Kreuskorrelation hat ein extrem > flaches Maximum fuer Phasengleichheit eines Sinus. Was besser ist, ist > die Kreuskorrelation mit einem 90 grad verschobenen Sinus. Reden wir über unterschiedliche Dinge? Die „Flachheit“ des Maximums ändert sich doch nicht mit der Phasenverschiebung der beiden Signale. Auch wenn es wie ein akademischer „Furz“ klingt. Bei AKF und KKF bleibt das periodische Signal absolut gleich nur die Amplitude ändert sich. Bei der AKF geht die Phase verloren (ist immer ein Cosinus) und bei der KKF ist das periodische Signal genau um die Phasendifferenz verschoben. Man muß ja auch nicht das Maximum der KKF nehmen, es geht ja auch der Nulldurchgang.
Wie schon oben geschrieben: wenn man die Form des Signals vorher kennt, bringt einem die Korrelation keinen wirklichen Vorteil - und wenn dann sollte man danach auch die ganze Kurve und nicht nur das Maximum oder ersatzweise den Nulldurchgang auswerten. Wobei der Nulldurchgang auch nur geht, wenn man die Signalform genau kennt. Hier soll aber die Signalform bekannt sein (Sinus, jedenfalls näherungsweise). Wenn es um so etwas die Dielektrische Verluste im Medium geht, kann man eigentlich auch nur die Grundwelle gebrauchen, wie die Verschiebung dann bei den Oberwellen ist, kann man nicht allgemein sagen - nur eine obere und untere Grenze kann man angeben, die liegen aber weit (d.h. Faktor 4 und mehr) auseinander. Entsprechend stören die Oberwellen im Signal nur und sollten auch bei der Korrelationsfunktion nicht genutzt werden.
Wenn ich zwei orthogonale Funktionen kreuzkorreliere, dann erhalte ich Null. Deswegen ist es einfacher die Phasenverschiebung zweier fast 90 verschiedener Funktionen zu messen wie wenn sie in der Phase fast gleich sind. Wenn man den vollen Phasenwinkel Bereich messen will muss man somit simultan mit Sin & Cos multiplizieren und dann den Quotienten nehmen. Und sinnvollerweise nimmt man nicht das versaute Netz, sondern generierte saubere Spannungen.
Udo Schmitt schrieb: > ROFL. Klasse Idee mit einem 8Bit µC :-) Da spricht der Fachmann. Für die KKF reicht eine Multiplikation mit +/-1, d.h. eine simple Invertierung des Signals. Das sollte wohl auch ein 8-Bit µC oft genug hinbekommen.
Pico Oschi schrieb: > Wenn ich zwei orthogonale Funktionen kreuzkorreliere, dann erhalte ich > Null. Das ist mathematisch unsauber formuliert und deshalb die Missverständnisse. Das Skalarprodukt zweier orthogonaler Vektoren ist der Nullvektor. Wenden wir dieses Gesetz auf unsere zwei Funktionen an so folgt daraus, dass das (Skalar)Produkt zweier orthogonaler Funktionen Null ergibt. Das möglicherweise umgangssprachlich verwendete Wort „korreliere“ meint also das Skalarprodukt. Die Kreuzkorrelationsfunktion ist jedoch anders definiert. Die Kreuzkorrelation zweier orthogonaler harmonischer Funktionen gleicher Frequenz ist wiederum eine harmonische Funktion derselben Frequenz mit einer Phasenverschiebung. Die Phasenverschiebung entspricht genau der Phasendifferenz der Ursprungfunktionen Ulrich schrieb: > Wie schon oben geschrieben: wenn man die Form des Signals vorher kennt, > bringt einem die Korrelation keinen wirklichen Vorteil Man darf auch etwas über den Tellerrand schauen. Die Auto- und Kreuzkorrelation dürfen natürlich überall dort angewendet werden wo sie mathematische Vorteile versprechen. Dazu sollte man jedoch genau ihre Eigenschaften kennen. Es lassen sich schnell unzählige Beispiele für den Einsatz der Auto- und Kreuzkorrelation bei bekannten Signalen (Signalformen) finden. GPS – Signal der einzelnen Satelliten bekannt, KKF berechnet die Signallaufzeit Mode-Pickung der Modalanalyse – Signalform bekannt AKF und KKF schätzen die Übertragungsfunktionen
Werner schrieb: > Da spricht der Fachmann. Für die KKF reicht eine Multiplikation mit > +/-1, d.h. eine simple Invertierung des Signals. Offensichtlich kritisiert mich gerade ein Fachmann. Mein Wissen ist ca. 25 Jahre alt, aber jeder Wert einer Kreuzkorrelation ist doch die Summe aller Multiplikationen zwischen dem einen Signal un dem anderen Signal + Tau. Und das dürfte wohl einen 8Bit µC ordentlich beschäftigen zumindest wenn das quasi in Echtzeit erfogen soll. Was die Multiplikation mit +-1 betrifft darfst du mir das gerne mal erklären. Quelle meines Wissens: (Hänsler, statistische Signaltheorie, TH Darmstadt) Das Wesentlich der KK wurde hier im Übrigen meines Erachtens überhaupt nicht erwähnt daß sich nämlich statistisch verteilte Störungen herausmitteln. Deswegen wird doch im Handy und Satellitenfunk KK verwendet weil man damit ein Nutzsignal noch aus einem um Größenordnungen größerem Rauschen herausbekommen kann. Es gibt im übrigen Versuche mit dem man nachweisen kann daß unser Hirn beim Hören was ähnliches macht um z.B. das Sprechen einer Person aus dem Hintergrungrauschen (z.B. Lärm in einer Kneipe) herauszufiltern.
Udo Schmitt schrieb: > Was die Multiplikation mit +-1 betrifft darfst du mir das gerne mal > erklären. Für mich bitte auch! Udo Schmitt schrieb: > Das Wesentlich der KK wurde hier im Übrigen meines Erachtens überhaupt > nicht erwähnt daß sich nämlich statistisch verteilte Störungen > herausmitteln. Genau deshalb hatte ich in meinem PDF (etwas weiter oben) zu jedem der beiden Signale zwei jeweils unkorrelierte (!) Störungen (50 %) dazu addiert. In der Grafik der KKF sieht man sehr schön wie die Störungen rausgemittelt werden.
Man kann die Korrelationsfunktion mit Hilfe der FFT Ausrechnen. Da würde es dann von der Rechenzeit ggf. schon mit dem 8 bit µC gehen - nur man braucht auch einiges an RAM, und das kann man nicht durch mehr Zeit ausgleichen. Die Methode der Wahl ist da schon eher die direkte Anpassung einer Sinusfunktion an beide Signale. Das geht bei einigermaßen bekannter Frequenz auch mit einem 8 Bit µC noch in Echtzeit recht genau - wenn es sein muss mit etwas extra Messzeit zum genauen messen der Frequenz vorab.
Ulrich schrieb: > Die Methode der Wahl ist da schon eher die direkte Anpassung einer > Sinusfunktion an beide Signale. Nehmen wir mal ein stark gestörtes Sinussignal (siehe Bild) wie mache ich da eine Anpassung?
An einfachsten ist es wenn man die Frequenz genau kennt: Für die Anpassung berechnet man einfach die Korrelation des Signals mit einem gerechneten (oder am µC auch aus einer Tabelle) Sinus und Cosinus. Wenn das Messintervall gerade ein vielfaches der Periode ist hat man damit gleich die Anteile als Sinus und Cosinus, sonst kommt noch eine kleine Korrektur dazu. Aus dem Verhältnis und dem Arcustangens bekommt man die Phase der einzelnen Signale. Für jeden wert vom AD Wandler braucht man damit nur 2 Multiplikationen mit einem Wert aus der Tabelle und 2 Additionen, bei variabler Frequenz noch eine 3. Addition für den Tabellenindex. Das schöne dabei ist, das man die einzelnen Werte nicht alle Speichern muss. Wenn es sein muss kann man auch einen Offset vom AD Wandler noch berücksichtigen. Dazu kommen dann am Ende ggf ein paar extra Operationen und dann 2 mal der Arcustangens (bzw. atan2() in C) als relativ langsame Fließkommafunktion. Aber auch das schaft ein 8 Bit µC unter 10 ms. Wenn man die Frequenz nicht genau (hier wohl etwa +-0,1 Hz) kennt, wird es ggf. etwas komplizierter, könnte aber geschickt programmiert immer noch in Echtzeit, ohne Speichern aller Werte reichen, der Aufwand sollte sich etwa verdoppeln.
Ulrich schrieb: > Aus dem Verhältnis und dem Arcustangens bekommt man die Phase der > einzelnen Signale. Arcustangens ist ja auch immer eine so gute Option wenn man genaue Werte haben möchte ;-)
der Neuling schrieb: > ich würde gerne die Phasenverschiebung von zwei Sinussignalen mit einem > uC messen (am liebsten AVR).... Ein Weg wäre, durch Phasenverschiebung um 90° zu dem Sinus B den Cosinus B zu erzeugen bzw. entsprechende Rechtecksignale. Aus den beiden Mittelwerten über Sinus A * Sinus B bzw. Sinus A * Cosinus B ergibt sich direkt der Phasenwinkel. Statt der Multiplikation mit Sinus B bzw. Cosinus B kann man auch mit den entsprechenden Rechtecksignalen multiplizieren, was die Rechnung auf dem µC sehr einfach macht.
Ulrich schrieb: > Für die > Anpassung berechnet man einfach die Korrelation des Signals mit einem > gerechneten (oder am µC auch aus einer Tabelle) Sinus und Cosinus. Was ist die Korrelation für eine Rechenoperation? Ich kenne Addition, Subtraktion, Multiplikation, Integration, die Korrelationsfunktion (siehe oben), den Korrelationskoeffizienten …, jedoch keine Korrelation. Was müsste ich rechnen? Matthias schrieb: > Ein Weg wäre, durch Phasenverschiebung um 90° zu dem Sinus B den Cosinus > B zu erzeugen bzw. entsprechende Rechtecksignale. Wie erzeugt man (rechentechnisch) von einem furchtbar verrauschten harmonischen Ausgangssignal ein unverrauschtes harmonisches Signal das genau um 90 Grad phasenverschoben ist?
Da wir zuvor so viel über Korrelation diskutiert haben, dachte ich die Erklärung könnte ich mir Sparen. Für die Kooreltation des Signal mit einem Siunus, berechnet man erst mal in Echtzeit die Summe über Messwert * Sinuswert (beim µC wohl aus der Tabelle). Am Ende kann man dann noch auf die Zahl der Summanden normieren - muss es da aber nicht so genau nehmen, denn es kommt ja nur auf das Verhältnis für Sinus und Cosinus an.
Also, ich würde ein solches Signal erstmal über einen analogen Bandpaß schicken...
Man könnte die 90° verschobenen Signale über eine digitale oder analoge Phasenregelschleife erzeugen. Wenn das Quellsignal verrauscht ist, hilft wohl nur die Spikes zu filtern, bzw. die Bandbreite des Reglers so zu begrenzen, dass kurze Störungen nicht für eine große Verstimmung der erzeugten Frequenz sorgen. Ist aber jetzt eher theoretisch. So würde ich es probieren (in einem Mikrocontroller).
Ulrich schrieb: > Da wir zuvor so viel über Korrelation diskutiert haben, dachte ich die > Erklärung könnte ich mir Sparen. Für die Kooreltation des Signal mit > einem Siunus, berechnet man erst mal in Echtzeit die Summe über Messwert > * Sinuswert (beim µC wohl aus der Tabelle). Ich begreife es trotzdem nicht. Wenn ich zwei Vektoren habe, Vektor 1 enthalt das Messsignal und Vektor 2 einen Sinus (meinetwegen in einer Tabelle) und ich multipliziere Elementweise die beiden Vektorgrößen und summiere sie dann auf, dann erhalte ich doch zum Schluss nur eine reelle Zahl. Was sagt mir die aus, unhabhängig ob ich diese Zahl noch auf die Vektorlänge normiere oder nicht. Bsp. V1 = [1,2,3,4] V2 = [9,8,7,6] E = 1*9+2*8+3*7+4*6
Joe G. schrieb: > Wie erzeugt man (rechentechnisch) von einem furchtbar verrauschten > harmonischen Ausgangssignal ein unverrauschtes harmonisches Signal das > genau um 90 Grad phasenverschoben ist? Gut zu wissen, dass deine Signale beide furchtbar verrauscht sind. Möchtest du die Phasenverschiebung bei einer bestimmten Frequenz messen oder die Zeitverschiebung zwischen zwei (im Prinzip) beliebigen, aber gleichen Signalen? Was weißst du denn überhaupt von deinem Signal? Ohne irgendwelche Zusatzinformationen wird es sonst beliebig lustig da etwas Sinnvolles zu messen. Zeig doch mal ein Bild.
Ist schon OK. Eigentlich wollte ich nur auf die Kreuzkorrelationsfunktion hinweisen. Viele haben davon gesprochen, dass es einfacher geht. Man könnte z.B. mit Sin und Cos multiplizieren und den aufsummierten Mittelwert bilden, man könnte den Sin nachbilden, eine um 90 Grad phasenverschobene Funktion nutzen, man könnte „korrelieren“, usw. usw. JA ihr habt alle recht! Doch nun schaut noch mal genauer hin. Es ist und bleibt die Kreuzkorrelationsfunktion, in diesem Fall mit tau = 0.
Anbei ein Matlab script, das die Frequenz, Amplitude und Phase eines gegebenen Sinus bestimmt. Das funktioniert auch gut unter Rauschen. Das script nimmt keine Rücksicht auf Speicherplatz. Das Ganze läßt sich modifiziert auch auf einem kleinen uC ausführen. Braucht man die Phasenverschiebung zweier Signale macht man die Prozedur für beide Signale. Wenn man die Frequenz des gesuchten Signals kennt gibt es bessere Verfahren. Dieses Verfahren hat Prony erfunden. Cheers Detlef clear w=15.3*2*pi/128 sig = 1.34*sin(w*(0:127)+0.123); n=length(sig); %sig(n-1)+sig(n+1)=2*cos(w)*sig(n); s1=sig(1:n-2)+sig(3:n); s2=sig(2:n-1); % Regression s1 auf s2 M= [s2.' ones(length(s1),1)]; coff=inv(M'*M)*M'*s1.'; wn=acos(coff(1)/2); M=[cos((0:n-1)*wn).' sin((0:n-1)*wn).']; coff=inv(M'*M)*M'*sig.'; cc=coff(2)+j*coff(1); amp=abs(cc); ph=angle(cc);
Ulrich schrieb: > Das synchron sampeln ist nicht unbedingt nötig, denn die Verzögerung > beim AD im µC ist konstant und bekannt wie willst Du den Jitter rausrechnen? Bei einem MC-gesteurten ADc wirst Du einiges an Problemen haben.
Detlef _a schrieb: > Wenn man die Frequenz des gesuchten Signals kennt gibt es bessere > Verfahren. Dieses Verfahren hat Prony erfunden. Da gibt es auch noch andere Methoden: http://schulen.eduhi.at/htlbraunau/lehrer/ploetz/Labbsp/prony.pdf
Detlef _a schrieb: > Anbei ein Matlab script, das die Frequenz, Amplitude und Phase eines > gegebenen Sinus bestimmt. Warum hat sich das bei Matlab eigentlich eingebürgert maximal unlesbare Variablennamen zu benutzen?
Simon K. schrieb: > Warum hat sich das bei Matlab eigentlich eingebürgert maximal unlesbare > Variablennamen zu benutzen? Weil es cool ist, weil man sich vermeintlich damit von den "Nichtwissenden" abhebt.
Entschuldigt wenn ich diesen Beitag wieder ausgrabe, ich versuche mich gerade an der implementierung eines ähnlichen Verfahrens, habe aber dabei so meine Probleme. Insbesondere ist mir nicht klar wo ich bei Detlefs Regressionsverfahren die Freqeunz des Signals erhalte. Phase und Amplitude ja - aber die Freqeunz? Vielleicht liest Detlef ja noch mit - oder jemand anderes kundiges. Grüße Sepp
Hallo Sepp. Hier wn=acos(coff(1)/2); ist wn die Frequenz des Sinus. Cheers Detlef
:
Bearbeitet durch User
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.