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!
Ich möchte gerne ein sog. Kundt´sches Rohr (Impedanzrohr) bauen und eine entsprechende Software mit Labview erstellen. Mit diesem Rohr kann man den Absorptionsgrad eines Prüfstückes ermitteln. Allgemein funktioniert ein solches Rohr folgendermaßen:
Ein Rohr der länge x ist an einer Seite geschlossen und an der anderen Seite ist ein Lautsprecher angebracht. An zwei Positionen im Rohr wird via eines Mikrofons der Druckunterschied zwischen der einen Position und der anderen Position gemessen. Dabei ist der Druckunterschied des einfallenden Signals (von LS zur Probe) an Mikrofonposition 1 und Mikrofonposition 2 und der Druckunterschied des reflektierten Signals (von Probe zu LS zurück) an den Mikropositionen zu ermitteln. Aus der Abnahme des Druckes kann ermittelt werden wieviel Energie dem Signal entzogen wurde und daraus folgt dann der Absorptionsgrad.
In der Theorie relativ einfach, aber in der Praxis stellen sich folgende Probleme:
1) um den Absorptionsgrad über ein Frequenzband zu bestimmen muss ein Rauschen genutzt werden, dass im interessanten Frequenzbereich ein stationeres Signal mit einer konstanten Sektraldichte besitzt.
2) Weder den Schalldruck des einfallenden noch des reflektierten Signals kann man messen, nur die Überlagerung beider kann man messen.
Zu 1) Stellt sich die Frage, was für ein Rauschen man da nehmen könnte (Ich weiß evtl off Topic, aber vielleicht weiß ja jemand eine Möglichkeit ein Rauschen mit konstanter Spektraldichte zu erzeugen)
Zu 2) Das Problem habe ich in soweit gelöst, dass wenn ich ein Rauschen bestimmter Amplitude in das Rohr hineinschicke, weiß ich theoretisch zu jeder Position des Mikros im Rohr den entsprechenden Druck (Amplitude). Und wenn ich das Rauschen über eine FFT auflöse, kenne ich auch die Amplitude jeder im Rauschen enthaltenden Frequenz an einer bestimmten Position (über die Wellenlänge lässt sich das rausfinden). Genauso kenne ich, durch Messung, die Amplitude jeder Frequenz des Überlagerten Rauschens. Über das Superpositionsprinzip (Amplitude ges. = Amplitude hin + Amplitude zurück) kann ich dann bestimmen wie die Amplitude jeder Frequenz des reflektierten Rauschens ist.
Lange Einführung ich weiß, aber ich wollte mal die Gesamtsituation beschreiben.
Nun zu meinem Problem:
Die im Rauschen vertretender Frequenzen kann ich über das Leistungsdichtespektrum einer FFT ermitteln, aber wie erhalte ich die Amplituden der einzelnen Frequenzen??
Ich habe es schon mal mit einem Sinussignal versucht und habe festgestellt, dass ich über die FFT nach Betrag und Phase nicht die Amplitude des Sinussignals angezeigt bekomme, bzw. der Betrag der FFT bleibt immer gleich, obwohl die Amplitude des Sinussignls sich ja mit jedem Abtastwert verändert?!
Ich habe auch schon ein VI gefunden indem mir die Amplitude des Eingangsignals angezeigt wird, aber leider nur über den gesammten Abtastzeitraum und nicht für jeden einzelnen Abtastwert. Zur Bestimmung der Amplituden an einer beliebigen Position des Mikros brauche ich aber für jeden Abtastwert die Amplituden.
Ich hoffe das war verständlich?! Ansonsten hier nochmal hier die ganz einfache Version: Ich möchte aus einem Überlagertem Signal (2 Sinussignale), wobei das Überlagerte Signal und ein Signal mit Amplitude und Frequenz bekannt sind, die Amplitude des zweiten Signals und zwar für jeden Abtastwert.
Vielen Dank schonmal für eure Hilfe
lG
P.S. die LabView Version it der ich arbeite ist die 2009 er.
Alo ich hab schon mal ein Teilerfolgserlebnis: Ich habe es fast geschafft die Amplitude einer Schwingung an einem beliebigen Ort x zu bestimmen.
Folgendes hab ich dabei gemacht bzw. entdeckt:
Und zwar wird bei der FFT nach Betrag und Phase doch die richtige Amplitude ausgegeben, nur dass man diesen Wert noch mit Wurzel aus 2 multiplizieren muss, aber das ist ja eigentlich nichts Neues. So habe ich also für jede im Eingangsignal enthaltene Frequenz die entsprechende Amplitude. Diese hab ich dann den Frequenzen zugeordnet, indem ich die Anzahl der Samples in ein Array geschrieben habe und über das Zusammenführen mit den Amplituden, habe ich nun für jede Frequenz die entsprechende Amplitude.
D.h. ich habe nun die Frequenz und die maximale Amplitude jeder im Eingangssignal enthaltenden Schwingung und über die Beziehung
(Ort x / Wellenlänge) * maximale Amplitude = Amplitude am Ort x!
Dachte ich zumindest gestern.
Heute bin ich wieder ein bisschen schlauer und habe herausgefunden, dass obige Gleichung nur für die erste Vollschwinung gilt, also muss der Ort x innerhalb von der Wellenlänge der Schwingung liegen. Aber das ist ja nicht Sinn der Sache, weil erstens der Ort x auch weiter weg liegen können soll und zweitens ich viele Frequenzen habe. Also habe ich mir folgendes überlegt:
Wenn mein Ort x nun bei z.B. 24.76 Vollschwingungen einer bestimmten Wellenlänge liegt, interessiert mich ja eigentlich nur die Amplitude bei dem 0.76fachen Wellenlänge. Daraus folgt, dass ich eine Schleife brauche die prüft, ob der Ort x nun mehr als 1 Vollschwingung entfernt liegt und wenn ja von dem Wert 1 abzieht. Des Weiteren ist mir aufgefallen, dass die Amplitude gar nicht negativ wird, obwohl das wichtig ist, da bei einer Überlagerung eines Schwingungsmaximums und eines Schwinungsminimums gleicher Amplitude adiieren diese sich zu NULL auf (ich weiß gilt nur bei gleicher Frequenz, aber ich hoffe es ist klar was ich meine). So habe ich gleichzeit noch eine weitere Funktion eingebaut, die testet, ob der Ort x nun über dem 0,5 fachen der Wellenlänge liegt, oder nicht und wenn dem so ist soll der Wert negiert werden.
Dies klappt auch wunderbar für eine Frequenz, aber für mein Array aus Frequenzen und zugehörigen Amplituden klappt das nicht. Da ich die Überprüfung, ob der Ort x > 1 an eine Casestruktur gehangen habe, wird mir der Fehler genannt, dass meine Datenquelle ein Array aus Bool´schen Werten ist und meine Datensenke nur True oder False.
Also mein Problem momentan ist, dass ich für jede Frequenz und deren max. Amplitude prüfen möchte, ob der Ort x innerhalb einer Wellenlänge ist und wenn dies dann so ist (durch Abziehen von 1 bis der Wert < 1), ob der Wert größer 0,5 ist oder nicht. Wie kann ich das verwirklichen?
Hier ist mal ein Bild: Die Version mit der ich arbeite ist die 2009er
P.S. in dem Bild fehlt die trigonometrische Ergänzung, sodass man wirklich auf die Amplitude kommt. Also es müssen noch die Beträge gebildet werden usw.
Vielleicht drücke ich mich auch einfach zu kompliziert aus.
Mein aktuelles Problem ist, dass ich ein Array mit 11000 Werten auslesen möchte und für jeden einzelnen Wert bestimmen möchte, ob dieser größer oder kleiner als 1 ist und im nächsten Schritt, ob dieser Wert größer als 0,5 ist oder nicht. Wie kriege ich das vernünftig gelöst?
Ich habe da was im Kopf, dass ich die Werte in ein Array von Bool´schen Werten übertrage, je nachdem ob größer 1 oder kleiner, aber ich weiß nicht genau, wie das geht...
Danke schon mal im vorraus.
lG und einen guten Start in die neue Arbeitswoche
25.10.2010, 08:16 (Dieser Beitrag wurde zuletzt bearbeitet: 25.10.2010 08:20 von GerdW.)
Zitat:Ich habe da was im Kopf, dass ich die Werte in ein Array von Bool´schen Werten übertrage, je nachdem ob größer 1 oder kleiner, aber ich weiß nicht genau, wie das geht...
Genau das machst du doch schon in deinem VI/Bild... Du vergleichst ein Array mit 1 und bekommst ein boolsches Array mit den Vergleichsergebnissen. Du versuchst nur nicht richtig, dieses auszuwerten - man kann halt kein Array an einen CaseSelektor anschließen... (Evtl. würde für deine Aufgabe auch die InRangeAndCoerce-Funktion hilfreich sein.)
Wenn du jeden Wert des Arrays einzeln auswerten willst, könntest du eine ForLoop verwenden, die mit ihrem AutoIndexing gleich für die Einzelwertzugriffe sorgt
Die ForLoop ist eine gute Idee, hab ich auch schon ausprobiert und funktioniert auch fast so, wie ich es möchte.
Nun hab eich noch das Problem, dass die Werte, die hinten rauskommen sollen (bei "Amplitude am Ort x) nur zum Teil richtig sind.
Bsp: Wenn ich eine Sinuswelle 1000x innerhalb einer Periode abtaste und mir die Amplitude anzeigen lasse, erwarte ich 250x ansteigende Werte bis zur maximal Amplitude, 250x sinkende Werte bis 0, 250x steigenden negative Werte bis maximal negativen Amplitude und 250x wieder ansteugend bis 0.
Das was ich aber angezeigt bekomme ist aber alles 0, nur bei den Frequenz der Sinuswelle bekomme ich die maximal Amplitude angezeigt und wie oben beschrieben ist das nict ganz Sinn der Sache.
Ist aus meinem oben angehangten Bild vielleicht schon ein Fehler zu erkennen,oder denke ich einfach falsch?
lG
25.10.2010, 09:01 (Dieser Beitrag wurde zuletzt bearbeitet: 25.10.2010 09:02 von GerdW.)
bei 1000 Samples pro Sinus erwarte ich 3 Nullwerte sowie 499 positive und 498 negative Werte (in etwa)... Oder auch: 499 mal positiver Anstieg und 499 mal negativer Anstieg sowie 2mal Anstieg=0. Ich sehe aber nirgends die Berechnung des Anstiegs - der ja der ersten Ableitung entspricht!
Zitat:Das was ich aber angezeigt bekomme ist aber alles 0, nur bei den Frequenz der Sinuswelle bekomme ich die maximal Amplitude angezeigt
??? Laut deinem Bild bekommst du noch gar nichts, weil das VI nicht lauffähig ist. Und wie du Frequenz und Amplitude vergleichen willst, ist mir auch schleierhaft. Wie wäre es mal mit einem richtigen VI (statt eines uralten Bildes), dann bräuchte man keine
' schrieb:der Betrag der FFT bleibt immer gleich, obwohl die Amplitude des Sinussignls sich ja mit jedem Abtastwert verändert?!
Die Ampitude ist der Spitzenwert eines periodischen Signals, nicht zu verwechsln mit den zeitabhängigen Momentanwerten. Ein einzelner Abtastwert ist ein Momentanwert und nicht die Amülitude.
Zitat:D.h. ich habe nun die Frequenz und die maximale Amplitude jeder im Eingangssignal enthaltenden Schwingung und über die Beziehung
Zitat:Also mein Problem momentan ist, dass ich für jede Frequenz und deren max. Amplitude prüfen möchte
Die Amplitude ist der Maximalwert der Augenblickswerte. Trotzdem kann es sinnvoll sein, von "maximaler Amplitude" zu sprechen, z.B. bei einer amplitudenmodulierten Schwingung. Hier habe ich aber den Verdacht, daß der Ausdruck eher ein "weisser Schimmel" ist.
Zitat:dass die Amplitude gar nicht negativ wird
Die Amplitude ist im allgemeinen ein Betrag. Man kann natürlich bei Formeln wie Y=-1*sin(x) rein formal von einer "sinusförmigen Schwingung mit negativer Amplitude" sprechen, aber normalerweise vermeidet man das. Bei FFT gibt es jedenfalls keine negativen Ampituden, es gibt nur Phasen, die um 180° liegen können.
25.10.2010, 10:10 (Dieser Beitrag wurde zuletzt bearbeitet: 25.10.2010 10:23 von banman.)
' schrieb:Und wie du Frequenz und Amplitude vergleichen willst, ist mir auch schleierhaft.
Ich möchte gar nicht die Frequenz mit einer Amplitude "vergleichen", sondern ich möchte aus einem Rauschen via FFT die beteiligten Frequenzen ermitteln und an einem bestimmten Ort x die momentane Auslenkung einer jeden im Rauschen enhaltenen Frequenz angezeigt bekommen. D.h. ich möchte eine Zuordnung von Frequenz und momentaner Auslenkung am Ort x.
Bsp.: am Ort 1,3m (von der Quelle des Rauschens aus gesehen) besitzt die Welle mit einer Frequenz von 200 Hz eine momentane Auslenkung von 0,3m und die Welle mit Frequenz von 500 Hz eine momentane Auslenkung von 0,132 m usw.
' schrieb:Klärung von Begriffen:
Die Ampitude ist der Spitzenwert eines periodischen Signals, nicht zu verwechsln mit den zeitabhängigen Momentanwerten. Ein einzelner Abtastwert ist ein Momentanwert und nicht die Amülitude.
Die Amplitude ist der Maximalwert der Augenblickswerte. Trotzdem kann es sinnvoll sein, von "maximaler Amplitude" zu sprechen, z.B. bei einer amplitudenmodulierten Schwingung. Hier habe ich aber den Verdacht, daß der Ausdruck eher ein "weisser Schimmel" ist.
Sorry da hab ich mich nicht klar genug ausgedrückt:
Mit "Amplitude" meinte ich momentane Auslenkung.
Mit "maximaler Amplitude" meinte ich die bei amplitudenmodulierten Schwinungen einstellbare Amplitude, also die maximale Auslenkung
' schrieb:Die Amplitude ist im allgemeinen ein Betrag. Man kann natürlich bei Formeln wie Y=-1*sin(x) rein formal von einer "sinusförmigen Schwingung mit negativer Amplitude" sprechen, aber normalerweise vermeidet man das. Bei FFT gibt es jedenfalls keine negativen Ampituden, es gibt nur Phasen, die um 180° liegen können.
Dass die Beträge einer FFT immer positv sind und nur die Phase Auskunft darüber gibt, ob die Auslenkung in positiver oder negativer Richtung der y-Achse liegt, ist mir bewusst. Der Betrag gibt aber doch einen Wert wieder, der nur noch mit Wurzel 2 multipliziert werden muss, um die momentane Auslenkung zu erhalten, oder?
Wenn das nämlich der Fall ist kann ich doch über die Wellenlänge und den Abstand von der Quelle sagen, ob der Wert innerhalb der "positiven" Halbwelle liegt oder innerhalb der "negativen" und dementsprechend, ob der Betrag in positive Richtung der y-Achse zeigt, oder in die negative. Oder habe ich die FFT nach Betrag und Phase falsch verstanden?
' schrieb:Dass die Beträge einer FFT immer positv sind und nur die Phase Auskunft darüber gibt, ob die Auslenkung in positiver oder negativer Richtung der y-Achse liegt, ist mir bewusst. Der Betrag gibt aber doch einen Wert wieder, der nur noch mit Wurzel 2 multipliziert werden muss, um die momentane Auslenkung zu erhalten, oder?
Warum orakeln, wenn es zu FFT wie zu jeder anderen Funktion eine ausführliche Hilfe gibt? Dort steht:
Für das Kürzel eintippen: l v 0 9 (ohne die Leerzeichen)