|
|
Impulsantwort durch inverse Faltung im Frequenzbereich |
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 02.03.2011, 16:41
Titel: Impulsantwort durch inverse Faltung im Frequenzbereich
|
|
|
|
|
Hallo zusammen,
ich habe im Bereich Programmierung zu diesem Thema schon etwas gepostet >>>hier<<<
Da es sich aber nicht um ein programmiertechnisches Problem handelt, passt es wohl besser in den Bereich der Signalverarbeitung.
Ich habe zwei Signale mit n=1024 Werten (siehe Bild1)
y[n] = Sprungantwort eines PT2 Systems
x[n] = Sprungfunktion
Die Sprungantwort erhalte ich durch Simulation mit der diskreten Übertragungsfunktion Gz und x[n] in Simulink. Nun möchte ich die Impulsantwort des Systems berechnen. Dazu transformiere ich beide Wertefolgen mit der FFT in den Frequenzbereich und führe dort die inverse Faltung durch.
H[f] = Y[f] / X[f]
Durch ifft erhalte ich dann meine Impulsantowrt h[n]. Da ich die Übertragungsfunktion habe, kann ich h[n] und impulse(Gz) vergleichen. Dies funktiert soweit auch alles. Nun bin ich allerdings auf ein Problem gestoßen, dass ich mir nicht erklären kann.
Einmal nutze ich den Step Block für das Eingangsignal, wodurch der Sprung von 0 auf 1 bzw. von 1 auf 0 nach einem Abtastwert erfolgt. Ist dabei die Anzahl der Werte zwischen den beiden Sprüngen ungerade, bekomme ich das richtige Ergebnis. Ist sie gerade, enthält der Ergebnisvektor der ifft -inf und inf. Dazu muss ich sagen, dass ich bei der Division im Frequenzbereich, einmal die Meldung erhalte, Div. durch 0, beim Element X[1025]. Es spielt dabei aber keine Rolle, wann der Sprung beginnt z.B. T=0 oder T=10*TS. Es variiert dadurch nur die Anzahl der Nullen in X[f]. Wenn ich die Division durch 0 noch abfange in dem ich einen Wert nahe 0 ersetzte, bekomme ich zwar ein Signal, aber mit einer hochfrequenten Störung überlagert (siehe Bild2).
Als zweite Sprungfunktion testete ich keinen "idealen" Sprung, sondern mit einer Verzögerung. Die Sprunghöhe wird nach z.B. 20 Abtastwerten erreicht (Rampe). Hier bekomme ich dann das Phänomen, wenn die Steigung von 0 auf 1 und 1 auf 0 identisch sind.
Irgendwie stehe ich grad auf dem Schlauch und wäre für Hilfe sehr dankbar. Hat das was mit den Harmonischen zu tun?
Beschreibung: |
|
Download |
Dateiname: |
Impulsantwort1.JPG |
Dateigröße: |
114.38 KB |
Heruntergeladen: |
1403 mal |
Beschreibung: |
|
Download |
Dateiname: |
Impulsantwort2.JPG |
Dateigröße: |
109.33 KB |
Heruntergeladen: |
1294 mal |
|
|
|
|
|
DSP |
Themenstarter
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 03.03.2011, 11:36
Titel:
|
|
Ich werde hier leider immer noch nicht schlau draus
Meine Eingangsvektoren für die FFT enthalten 1024 Werte Signal und 1024 Nullen um eine zyklische Faltung zu vermeiden.
Der Ergebnisvektor der FFT ist doch folgendermaßen aufgebaut?
X[1...N/2+1] = 0 Hz bis fa/2 Hz
X[N/2+1...N] = -fa/2 Hz bis -fa/N Hz
Mein Problem ist ja die Diffision durch 0 bei Y[f]/X[f]. Wenn also Element X[1025] im Frequenzbereich 0 (bei mir -120 dB, da ich auf diesen Wert begrenze) ist, ist das bei fa/2...also die Nyquist Frequenz. Bei ungerade Anzahl von Werten zwischen den Sprüngen hingegen habe ich hier 4.8e-004 oder -66dB.
H[1025]=Y[1025]/X[1025]=inf
Nach der ifft ist dann der komplette Ergebnisvektor in -inf und inf. Wenn ich nun X[1025] = 1 (0dB) setze, kommt nun das richtige Ergebnis raus. Aber ich kann nicht nachvollziehen, warum gerade und ungerade Anzahl von Abtastwerten zwischen den Sprüngen hier eine Rolle spielt.
|
|
|
Scriptor |
Forum-Century
|
|
Beiträge: 217
|
|
|
|
Anmeldedatum: 22.02.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 03.03.2011, 13:44
Titel:
|
|
Ich habe gelernt, wenn du irgendetwas faltest, findet alles im Zeitbereich statt.
Wenn du einen Dirac-Impuls auf einen Tiefpass zweiter Ordnung schickst, heißt das folgende
Du multiplizierst alles mit einer Übertragungsfunktion. Diese Übertragungsfunktion (des PT2 Glieds) ist mein im Frequenzbereich angegeben. Du musst als die ÜF invers transformieren. Das ist glaube ich dein Problem, wenn ich deine Ausführungen richtig verstanden habe . Sicher bin ich da nicht...
|
|
|
DSP |
Themenstarter
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 03.03.2011, 14:08
Titel:
|
|
Da ich kann ich dir jetzt leider nicht ganz folgen (bei dem Teil mit der inversen Übertragungsfkt.)...dennoch Danke für deine Antwort.
Aus der Systemtheorie ist bekannt, dass sich eine Sprungantwort durch die Faltung von Sprung und der Impulsantwort des Systems ergibt. Wechselt man in den Freq.-bereich wird aus der Faltung eine Multiplikation. Nun kann man die Formel auch umstellen und so die Impulsantwort oder das Eingangssignal auf des Systems rekonstruieren, in dem man die im ersten Post angegeben Rechnung vollzieht. Dies entspricht einer inversen Faltung, die es aber so im Zeitbereich gar nicht gibt.
Ich glaube aber ich habe mich hier zu sehr verrannt. Ich setzte einfach die Werte in X[f] die Null sind vor der Division auf 0.000001 = -120dB. Dann bekomme ich auch bei gerader Anzahl meine Impulsantwort.
|
|
|
DSP |
Themenstarter
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 03.03.2011, 15:22
Titel:
|
|
Ich war doch etwas vorschnell mit den -120dB. Bei meiner Sprungfuntkion mit der Rampe, bekomme ich leider wieder ein verrauschtes Signal. Hier hilft nur die Null bei X[fa/2] auf 1 zu setzen. Komisch das bei so einer größen Änderung des Ursprünglichen Signals am Ende dennoch die identische Impulsantwort herauskommt.
Allerdings zeigt sich nun bei einem zusätzlichen Störsignal aufaddiert auf den Sprung, dass die berechnete Impulsantwort nicht zu gebrauchen ist.
Die inverse Faltung im Freq.bereich kann ich also nur zur Rekonstruktion meines Eingangssignals nehmen. Die Impulsantwort des Systems muss ich dann vorher anderweitig bestimmen.
|
|
|
Scriptor |
Forum-Century
|
|
Beiträge: 217
|
|
|
|
Anmeldedatum: 22.02.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.03.2011, 18:06
Titel:
|
|
Ich verstehe immer noch nicht...
Was hast du für ein Signal und was willst du damit machen, machs mal ganz einfach, so schwer kann es nicht sein....
|
|
|
DSP |
Themenstarter
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 05.03.2011, 18:39
Titel:
|
|
|
|
|
Ein Messsensor nimmt mir die Sprungantwort auf...der Sensor selbst hat jedoch ein Einschwingverhalten, welches sich durch Filter nicht zufriedenstellend entfernen lässt. Mich interessiert jedoch das Eingangssignal, also der Sprung. Nun kann ich ja mit Hilfe der Sprungantwort und der Impulsantwort des Systems, durch die inverse Faltung im Freq.-bereich das Eingangssignal rekonstruieren. Das funktioniert auch schon. Nun benötige ich aber zunächst die Übertragungsfunktion bzw. Impulsantwort. Diese wollte ich ebenfalls durch das Verfahren gewinnen, in dem ich eine Testsprungfunktion x[n] nehme, wo ich Sprunghöhe etc. alles kenne. Mein Sensor misst wieder die Sprungantwort y[n]. Jetzt transformiere ich mit der FFT beide Signale in den Freq.bereich und erhalte damit Y[f] und X[f]. Jetzt kann ich damit die Impulsantwort durch...
H[f] = Y[f]/X[f] berechnen
h[n] = ifft(H[f]).
Auch das funktioniert soweit. Nun habe ich allerdings feststellen müssen, dass die Rechnung nur funktioniert, wenn die Testsprungfunktion x[n] zwischen den Sprüngen von 0 auf 1 und 1 auf 0 eine ungerade Anzahl von Messwerten enthält. Ansonsten bekomme ich Division durch 0 und das wars. Ich kann immer noch nicht nachvollziehen, warum die Anzahl hier eine Rolle spielt.
Als ich nun noch zusätzlich ein Störsignal zu x[n] addiert habe, zeigt sich aber ohnehin eine unbrauchbare Impulsantwort. h[n] muss ich also irgendwie anders bestimmen. Meine Idee ist momentan über ein ARX Modell.
Ich hoffe es ist jetzt klarer geworden.
|
|
|
Scriptor |
Forum-Century
|
|
Beiträge: 217
|
|
|
|
Anmeldedatum: 22.02.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 06.03.2011, 13:23
Titel:
|
|
|
|
|
Ich hätte mal eie ganz andere Frage, und zwar wundert mich, das du einfach die Spekra dividierst. Ich bin auch noch der Meinung, dass du Faltung und iverse Faltung im Freq gar nicht brauchst,d a die Gesetzmäßigkeiten meines Wissens anch andere sind. Das Dividiernen von Aus- durch Eingangsspektrum sollte reichen.
Deine Aufgabe scheint zu sein, eine Übertragungsfunktion zu generieren. Das willst du machen in dem du einen Sprung nimmst und ihn auf das System loslässt durch Faltung. Anschließend willst du Aus- durch Eingangsignal in den Frequenzbereich verfrachten und dann wie aufgezählt dividieren, richtig?
Ich sehe da Probleme. Sobald du diskret faltest, erhälst du eine längere Ausgangsmatrix. Das liegt an der Faltung. Dadurch lassen sich schlecht die Fouriermatrizen dividieren. Wie hast du dieses Problem gelöst? Hast du das Eingangsignal mit Nullen erweitert?
Eigentlich müsste es dann gehen, wenn man dann Aus- durch Eingangsspektrum wirklich Matrixpunktweise ( H[f]./Y[f]) dividierst. So würde ich vorgehen...
Mfg ich
|
|
|
DSP |
Themenstarter
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 06.03.2011, 15:46
Titel:
|
|
|
|
|
Ich merke nun, dass meine Überschrift wohl schlecht gewählt war. Es geht mir hier weniger um die Thematik inv. Faltung. Da habe ich ja schon etwas im Bereich Programmierung geschrieben und meine Algorithmen funktionieren ja schon (siehe Bild 1 erster Post). Ich habe das ganze erklärt, damit man den Zusammenhang von meinem Problem versteht.
Mir geht es in diesem Thread um das Division durch 0 Problem im Zusammenhang der Anzahl von Messwerten (un- und gerade) zwischen den beiden Sprüngen/Rampen. Ich habe es aber nun schon selber rausgefunden. Meine erste Vermutung mit den Harmonischen war richtig. Bei gerader Anzahl habe ich bei der Nyquistfreq. meines Eingangssignal keine Harmonische, sondern eine Nullstelle. Bei ungerader Anzahl ergibt sich hingegen dann eine Harmonsiche genau bei fa/2.
Nun erhalte ich (bei gerader Anzahl) eine Division durch 0, wodurch die Impulsantwort eben nicht berechnet werden kann. Ich müsste sie also in irgendeiner Form abfangen(sprich die Nullen in X[f] entfernen). Nun frage ich mich aber, ob ich dadurch nicht meine Ergebnis der Rechung Y[f]./X[f] verfälsche . Momentan ist dies zwar alles noch mit theoretischen Signalen, um die Funktionsweise und Genaukeit dieses Verfahrens zu bestimmen....aber an meinem realen System kann ich die Anzahl der Messwerte zwischen den Sprüngen nicht beeinflussen.
Ich hoffe es ist jetzt verständlicher
|
|
|
Scriptor |
Forum-Century
|
|
Beiträge: 217
|
|
|
|
Anmeldedatum: 22.02.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 06.03.2011, 16:01
Titel:
|
|
Demnach scheint ja alles iO zu sein oder?
Ist noch was im argen? Hast du jetzt eigentlich im Frequenzraum gefaltet oder einfach gepaddet und dividiert?.
Mfg Icke
|
|
|
DSP |
Themenstarter
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 06.03.2011, 16:14
Titel:
|
|
...gepaddet und dividiert!
Die Sprungantwort y[n] habe ich aus einem Model in Simulink, wo ich meine Testfunktion x[n] draufgebe. Dort findet dann natürlich eine Faltung statt
Im Frequenzbereich mache ich aber nur die inverse Faltung (Division).
|
|
|
Scriptor |
Forum-Century
|
|
Beiträge: 217
|
|
|
|
Anmeldedatum: 22.02.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 06.03.2011, 16:32
Titel:
|
|
kerl (oder Mädel) verwirr mich nicht so Ich bin doch auch nur Anfänger
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|