WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Impulsantwort durch inverse Faltung im Frequenzbereich

 

DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 02.03.2011, 16:41     Titel: Impulsantwort durch inverse Faltung im Frequenzbereich
  Antworten mit Zitat      
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?

Impulsantwort1.JPG
 Beschreibung:
Bild1

Download
 Dateiname:  Impulsantwort1.JPG
 Dateigröße:  114.38 KB
 Heruntergeladen:  1403 mal
Impulsantwort2.JPG
 Beschreibung:
Bild2

Download
 Dateiname:  Impulsantwort2.JPG
 Dateigröße:  109.33 KB
 Heruntergeladen:  1294 mal
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 03.03.2011, 11:36     Titel:
  Antworten mit Zitat      
Ich werde hier leider immer noch nicht schlau draus Sad

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2011, 13:44     Titel:
  Antworten mit Zitat      
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 Very Happy . Sicher bin ich da nicht...
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 03.03.2011, 14:08     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 03.03.2011, 15:22     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2011, 18:06     Titel:
  Antworten mit Zitat      
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....
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 05.03.2011, 18:39     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2011, 13:23     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 06.03.2011, 15:46     Titel:
  Antworten mit Zitat      
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 Wink. 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 Embarassed
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2011, 16:01     Titel:
  Antworten mit Zitat      
Demnach scheint ja alles iO zu sein Very Happy oder?

Ist noch was im argen? Hast du jetzt eigentlich im Frequenzraum gefaltet oder einfach gepaddet und dividiert?.

Mfg Icke
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 06.03.2011, 16:14     Titel:
  Antworten mit Zitat      
...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 Wink
Im Frequenzbereich mache ich aber nur die inverse Faltung (Division).
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2011, 16:32     Titel:
  Antworten mit Zitat      
kerl (oder Mädel) verwirr mich nicht so Very Happy Ich bin doch auch nur Anfänger
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.