Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Heute wieder mal was neues von mir.
Ich hatte ja schon ein paar Themen in den letzten tagen gestartet mit diversen Problemen.
Heute wieder mal was neues...
Also es geht um folgendes, was ich mit einem testprogramm beschreiben möchte.
Ich erstelle in LabVIEW ein Signal bestehend aus 2 Sinussignalen mit den Frequenzen 100 und 200 Hz. Beide erhalten die gleiche
Amplitude.
Nun stelle ich bei beiden die gleiche Phasenverschiebung von 100° ein.
Siehe Bild 1:
Hier ist jetzt zu sehen, dass mir bei der Phase beim 1. Signal auf 100 Hz der gleiche Wert angezeigt wird wir beim 2. Signal bei 200Hz.
Im zusammengesetzten SIgnal 3 wird mir dann bei 200 und 100 Hz auch dieser Wert angezeigt.
Das heisst für mich, es steckt also eine Phaseninformation drin....
Bild2:
Hier nochmal das gleiche mit einer Phasenverschiebung von 10°
Zu meiner Problemstellung:
Ich möchte 1 Referenzsignal haben. Z.B. ein 50Hz Sinussignal.
Jetzt habe ich ein 2. Signal in dem unterschiedliche Frequenzen vorhanden sind. Z.B. 50,100,150,500Hz.
Von diesen Frequenzen möchte ich die Phasenlage jeder einzelnen bestimmen und auf mein referenzsignal beziehen.
Jetzt habe ich mir gedacht, da es den FFT Baustein gibt mit dem Anschluss "Phase". Kann ich die einzelnen Phasen der versch.
Frequenzen dort herausfinden.
Aber entweder ist da meine Denkweise oder Vorgehensweise falsch.
Von daher meine Frage. Das was mir dort als Phase angezeigt wird, wie habe ich das zu deuten?
Ich dachte eigentlich dort wird bei einem reinen Sinussignal ein fester Wert angezeigt, allerdings ergibt sich ja
ein regelrechter nicht zu deutender Phasenverlauf.
ANbei noch mein TestVI was mit meiner ursprünglichen Aufgabe zwar nichts zu tun hat,
aber mein problem ganz gut beschreibt.
Die Verzweiflung ist nachvollziebar, denn Phasenverschiebung im Sinne einer Konstanten ist nur bei 2 Signalen gleicher Frequenz definierbar, nicht aber zwischen einem 100Hz und einem 200Hz-Signal. Du jagst also einem Phantom hinterher, welches es gar nicht gibt..
' schrieb:Die Verzweiflung ist nachvollziebar, denn Phasenverschiebung im Sinne einer Konstanten ist nur bei 2 Signalen gleicher Frequenz definierbar, nicht aber zwischen einem 100Hz und einem 200Hz-Signal. Du jagst also einem Phantom hinterher, welches es gar nicht gibt..
Genau, sonst würden ja auch die hübschen Lissajou-Figuren auch nicht funktionieren.
Gruß, Rob
Bitte Beachten:
Die obenstehenden Texteile können unter Umständen Sarkasmus und Ironie enthalten, für nicht erkannten Sarkasmus oder nicht erkannte Ironie wird keine Haftung übernommen.
N.B.: "Multiple exclamation marks, " he went on, shaking his head, "are a sure sign of a deseased mind." - Terry Pratchett
23.03.2007, 08:33 (Dieser Beitrag wurde zuletzt bearbeitet: 23.03.2007 08:46 von Grobi.)
Hmm ich weiß nicht ob mein Problem richtig angekommen ist.
Der FFT Baustein gibt ja Betrag und Phase zurück. Die Beträge die ausgegeben werden, liegen ja halt genau bei den
zugehörigen Frequenzen und werden dort als Ausschlag in Form eines Striches angegeben.
Ich möchte aus dem FFT Ausgang Phase nicht direkt eine Phasenverschiebung ablesen, sondern z.B.
auch einen Ausschlag sehen..
100Hz, Phase 3,14 (in rad halt)
200 Hz Phase 1,22
Hier mal ganz "professionell :rolleyes:mit Paint reingemalt...
Normalerweise gibt doch eine FFT den Betrag mit zugehöriger Phase aus. wie ich das Ergebnis nachher weiterverarbeite ist dann ja
etwas anderes, aber dieser "kröselige" Verlauf der da angezeigt wird ist doch vollkommener Blödsinn wenn ich wirklich nur
ein einziges Signal von 100 Hz dort habe oder seh ich das verkehrt...
Als neuen Test einfach nur 1 VI in dem wirklich nur dieses eine Signal dargestellt wird..
Nochmal zur Frage, wenn ich wie hier 180° eingestellt habe, wird mir bei 100 Hz im Phasendiagramm 1,57 angezeigt was Pi/2 entspricht..
Warum sehe ich jetzt im Diagramm nicht nur! den einen dicken roten balken den ich da von Hand reingemalt habe, sondern irgendetwas nicht deutbares
was mich garnicht interessiert.
Vielleicht wird das Problem so etwas deutlicher.
Zu euren Antworten folgendes:
Das mit der Phasenverschiebung was ich vorhabe soll etwas anders laufen. Ich möchte den Nulldurchgang eines Referenzsignales bestimmen,
und dann über die angezeigten Phasen der anderen Frequenzen die Zeit bestimmen die zwischen den Nulldurchgängen liegt..
Bsp.
Ein Signal hat 50,100,150Hz Komponenten. Aus den angezeigten Phase erhalte ich jeweils, 1 2 2,7 als Werte
Da ich die Frequenzen mit den einzelnen Phasen jetzt weiß, möchte ich die Verschiebung der Nulldurchgänge untereinander bestimmen.
Aber! dafür muss ich erstmal wissen, was das ist was die FFT dort als Phase anzeigt..
Ich habe dies Forum echt schon dürchwühlt und auch im NI Forum keinen vernünftigen Beitrag dazu gefunden, was die Angabe der Phase wirklich
beschreibt..
Aber ignoriert das was ich vorhabe, da weiß ich selber noch net genau wie oder ob das überhaupt geht. Das Problem ist das Grundlegende der angezeigten Phase.
23.03.2007, 09:44 (Dieser Beitrag wurde zuletzt bearbeitet: 23.03.2007 09:53 von Lucki.)
Ja, da weiß man schon eher was Du meinst.
An den Diagrammen ist alles in Ordnung, alles ist normal. Trotzdem Du einen reinen Sinus von 10Hz eingegeben hast, besteht das Amplitudenspekrum nicht nur aus dieser einen Spektrallinie. Das sieht man in der logarithmischen Darstellung:
Ich nehme an, das hängt mit Digitalisierungsfehlern zusammen, gegen die man nichts machen kann. Die Phase berechnet sich zu
Phase = -arctan(Sinusamplitude/Cosinusamplitude).
Bei 10Hz kommt der Werte -Pi/2 richtig heraus, bei den anderen Frequenzen entsteht irgendein zufälliger Wert durch der Division von 2 Werten der Größenordnung 10^-18.
Dagegen kannst Du nur mit Nachbearbeitung der Arrays etwas machen. Z.B so, daß, wenn ein Amplitudenwert unterhalb einer Schranke liegt, der Phasenwert, weil uninteressant und weil er sich auf etwas quasi nicht Existierendes bezieht, nicht mehr dargestellt wird.
Tip(hat nichts mit dem Problem zu tun):
Als Samplezahl immer 2^n Werte verwenden, sonst kann die schnelle FFT nicht angewendet werden (z.B in Deinem Beipiel fs=1024 Hz und #s=1024).
Zitat:Dagegen kannst Du nur mit Nachbearbeitung der Arrays etwas machen. Z.B so, daß, wenn ein Amplitudenwert unterhalb einer Schranke liegt, der Phasenwert, weil uninteressant, nicht mehr dargestellt wird.
Das klingt schonmal irgendwie logisch.. An die Log.-Darstellung habe ich garnicht gedacht.
Allerdings weiß ich nicht ganz wie ich deinen Lösungsvorschlag umsetzen soll...
Ich erhalte ja jeweils ein Cluster der Amplitude und ein Cluster der Phase als Ausgang der FFT.
In diesen steht jeweils df unf f0 sowie einmal die Amplitude und bei dem andern halt die Phase...
Ich bin jetzt nicht so der Crack in Sachen Arrays.
Wie kann ich denn beim Amplituden Array z.B. alle Indizes der Werte < 10^-5 beispielsweise herausfinden und diese dann aus dem
anderen Phasenarray die zugehörigen Stellen entfernen?
Aber tausend Dank schonmal, dann habe ich die FFT grundsätzlich ja richtig gesehen, aber dass da noch irgendwelcher anderer Mist drinsteht...
Naja darauf muss man erstmal kommen.
Vielleicht hilft mir jetzt noch jemand bei der Arraysache und ich kann beruhigt ins Wochenende gehen..
*SchweißvonderStrinwisch :closedeyes:
23.03.2007, 10:27 (Dieser Beitrag wurde zuletzt bearbeitet: 23.03.2007 10:55 von Grobi.)
Wie krieg ich das jetzt aussorrtiert, so das aus dem Amplitudenarray
alle Werte kleiner 0,05 entfernt werden und ich dann die Indizes auch aus dem andern Array entfernen kann
um nur noch die Interessanten überzubehalten..
Habe Schwellwert getestet, geht aber ja nur wenn der vorherige Wert kleiner und der darauffolgende größer ist.
Bräuchte also eine Funktion die mir alle Indizes der Werte >3 oder so angibt und dann eine wo ich aus dem andern alle diese Indizes entfernt werden.
Max/Min kann ich ja net anwenden würd ja nur einen Wert finden..
Aber da gehen wir dann leider die Informationen verloren wo die gültigen Elemente vorher gestanden haben.
Sprich, ich kannzwar Werte größer 0 finden, aber die werden dann hintereinander in ein neues Array geschrieben und die Information ob
dieser Wert bei 100, 500 oder 1kHz war geht verloren.
23.03.2007, 11:11 (Dieser Beitrag wurde zuletzt bearbeitet: 23.03.2007 11:15 von Lucki.)