Hallo,
Wie kann ich aus einer Soll-Sprungantwort und einer Ist-Sprungantwort
die Koeffizienten eines FIR-Filters bestimmen, mit dem dann in Zukunft
das Soll-Signal gefiltert (=vorverzerrt) werden kann, um im "Ist" dem
"Soll" möglichst nahe zu kommen?
Ich habe mit Signalverarbeitung in der Praxis noch nicht gearbeitet,
könnte etwas "Starthilfe" gebrauchen. Als Hobbyprojekt (vorerst nur ein
Gedankenexperiment) geht es mir darum, das Impulsverhalten von
Lautsprecherchassis zu optimieren.
Ich messe also die Sprungantwort des Chassis, parallel überlege ich mir
wie die ideale Sprungantwort aussähe, die im Rahmen seiner Möglichkeiten
liegt.
Aus diesen beiden will ich ein Filter bestimmen, das sozusagen die
inverse Übertragungsfunktion des Chassis darstellt und mit dem ich dann
das Signal vorverzerren kann.
Da gibt es doch bestimmt was, aber noch kenne ich die Begriffe nicht,
nach denen ich googeln könnte.
Jörg
Soll- und Istwerte in den Frequenzbereich transformieren.
(Fenstern nicht vergessen)
Dann die Spektren durcheinander dividieren.
(Evtl. Phasen manipulieren)
Zurück in den Zeitbereich transformieren.
fertig
Ich habe vor einigen Jahren ein Entzerrungssystem gebaut (3kanalige DSP
Entzerrer) und bin derzeit dabei das Nachfolgegerät zu entwickeln.
Basierend auf nachfolgender Dissertation vom Sven:
http://www.anselmgoertz.de/Ubersicht_dt/Anselm_Goertz_dt/Veroffentlichungen_dt/SwenDiss.pdf
Viel Spaß beim lesen...
Das ist ein weites Feld. Eine quick/dirty Alternative geht so:
Du modellierts Dein unbekanntes System ebenfalls als fir-Filter mit den
Koeffizienten sys(k), die Sprungantworten sollen heißen ist(), soll(k),
das gesuchte Filter fir(k).
Dann gilt für die sys(k) :
ist(1)=sys(1)
ist(2)=sys(1)+sys(2)
ist(3)=sys(1)+sys(2)+sys(3)
.....
kurz:
ist()=h()*sys()
mit h() als Sprungfunktion und '*' als Faltungsoperator:
Diese Faltung des Sprungs mit den Koeffizienten des Systemmodells (=
dessen Impulsantwort) liefert Dir ein lineares Gleichungssystem, aus dem
sich die sys(k) berechnen lassen, das heißt dann Entfaltung.
Mit dergleichen Technik berechnest Du ein Signal x(k), für das dann
gelten soll:
x()*sys()=soll()
Dann noch ne Entfaltung (eine Dreientfaltigkeit!)
h()*fir()=x()
Das ganze läßt sich als ein lineares Gleichungssystem verwursten. Du muß
die Ordnung Deines Systemmodells und des gesuchten Filters wählen. Das
Gleichungssystem ist für kleine Systemordnungen überbestimmt und mit
entsprechenden Verfahren zu lösen. Das ganze funktioniert mäßig.
Cheers
Detlef
Schönen Dank für die konstruktiven Antworten! (Soll kein Abschluß sein,
weitere sind immer willkommen. ;-)
@Michael: Das war für mich Anfänger jetzt noch etwas knapp,
transformieren, dividieren, rücktransformieren, da reicht es bei mir
noch nicht. Das Script ist interessant, auch in anderen Aspekten, sehr
schön zu lesen, paßt zu meiner Vorbildung. Speziell den Teil zum
Filterdesign finde ich am schwierigsten, das muß ich mir noch mal in
Ruhe anschauen.
Ich habe irgendwie die Vorahnung, daß beim Umweg über den
Frequenzbereich das Impulsverhalten durch "Breitschmiereffekte" leidet,
man das besser im Zeitbereich macht...
@Detlef: Schon vor deiner Antwort hatte ich auch die Idee, das
formelmäßig aufzustellen, gleichzusetzen und algebraisch durchzukeulen
(roch nach Gleichungssystem), aber du hast das noch klarer ausgedrückt,
danke!
Die Entfaltung ist für eine Sprungfunktion ganz einfach, die
Filterkoeffizienten sind einfach die Differenzen der Antwort. Haarig ist
die eigentliche Faltung.
Wenn der Filter so lang ist wie die Sprungantworten, dann geht das genau
auf, ist nicht überbestimmt. Das Gleichungssystem ist "dreieckig", weil
vor dem Sprung alles auf Null ist, man kann das jeweils schrittweise
rückwärts einsetzen. Ich erhalte dann jeweils einen neuen Koeffizienten
für das Filter der nächsthöheren Ordnung, die vorherigen können so
bleiben.
Die entstehenden Terme für die Filterkoeffizienten werden aber rasch
eklig. Es kürzt sich zwar viel raus, bleibt aber noch genug übrig. Mit
Papier und Bleistift habe ich es bis n=4 geschafft (für mehr nimmt man
wohl besser ein Computeralgebrasystem), dann mit Excel an
Zahlenbeispielen überprüft. Noch erkenne ich leider kein Bildungsgesetz
für die Terme. (Binominal, etc.)
Es entstehen immer höhere Potenzen der Ist-Werte, speziell der frühen.
Kann gut sein daß das numerisch instabil ist, weil kleine Variationen
sich immer mehr verstärken. Der erste darf nicht Null sein, durch ihn
und seine Potenzen wird dividiert.
Meintest du sowas mit "funktioniert mäßig"?
Jörg
>>Wenn der Filter so lang ist wie die Sprungantworten, dann geht das genau>>auf, ist nicht überbestimmt.
Ja, aber man will das Filter ja kürzer haben. Dann gibts ein
überbestimmtes Gleichngssystem, das man mit gauss'scher
Ausgleichsrechnung lösen kann.
Warum willst Du denn die Dreiecksmatrix analytisch lösen, wiso nimmt du
nicht die Signale und machst das numerisch?
>>Meintest du sowas mit "funktioniert mäßig"?
Mit idealen, künstlichen Systemen und unverrauschten Meßwerten geht das
prima. Wenn das Verfahren aber auf reale Systeme/Meßwerte trifft läßt es
Robustheit vermissen. 'Systemidentifikation' ist möglicherweise eine
korrekte Google Frage.
Cheers
Detlef
Detlef _a schrieb:
> Ja, aber man will das Filter ja kürzer haben. Dann gibts ein> überbestimmtes Gleichngssystem, das man mit gauss'scher> Ausgleichsrechnung lösen kann.
Och, ich dachte, erst mal in die Vollen greifen! ;-)
> Warum willst Du denn die Dreiecksmatrix analytisch lösen, wiso nimmt du> nicht die Signale und machst das numerisch?
Ich wollte einfach mal neugierig dahinter gucken, was da passiert. Mit
einer analytischen Lösung braucht man später zur Laufzeit äh
Konfigurationszeit nur das rechnen, was gebraucht wird, so die naive
Idee. Viele Terme kürzen sich raus.
Was übrig bleibt ist aber trotzdem die Hölle. Am Wochenende habe ich das
mal computerunterstützt ein paar Ordnungen weitergetrieben. Ich erkenne
ein paar Bildungsgesetze, nach denen die höheren Terme dazukommen, aber
leider nicht alle.
> Mit idealen, künstlichen Systemen und unverrauschten Meßwerten geht das> prima. Wenn das Verfahren aber auf reale Systeme/Meßwerte trifft läßt es> Robustheit vermissen.
Kann ich mir gut vorstellen.
> 'Systemidentifikation' ist möglicherweise eine> korrekte Google Frage.
Hmm, ein weites Feld. Kalman-Filter kenne ich dem Namen nach. (Ich
fürchte, meine anfängliche Begeisterung für das Thema lässt leider
wieder nach...)
Jörg
Wenn Dich diese Faltungsrechnungen interessieren dann kuck mal Richtung
'Toeplitz Matrix' und 'Levinson Durban', das ist die Richtung. Sehr
interessant und aktuell, z.B. für Audiocodecs, 'Speex'.
>>Hmm, ein weites Feld. Kalman-Filter kenne ich dem Namen nach.
Kalman schätzt Dir die Zustandsgrößen des Systems, das System selbst muß
man vorgeben, ist also keine Systemidentifikation per se.
>>Ich fürchte, meine anfängliche Begeisterung für das Thema lässt leider>>wieder nach...)
Schade, sehr schade. Auf dem Feld gibts ne hochinteressante menage a
troi zwischen Mathematik, Signalverarbeitung und Elektrotechnik, da kann
man nen interessantes Berufsleben verbringen. Mit den fetten schnellen
FPGAs tun sich da aktuell neue Welten auf. Vielleicht solltest Du die
komplexe Aufgabe der Frequenzgangskompensation zunächst hintanstellen
(das war für mich die Semesteraufgabe in einem höheren Semester) und Dir
mal was anderes suchen, z.B. ne Echtzeitfaltung mit der Impulsantwort
von einer schön halligen Kirche oder sowas.
Math rulez!
Cheers
Detlef
> Auf dem Feld gibts ne hochinteressante menage a> troi zwischen Mathematik, Signalverarbeitung und Elektrotechnik, da kann> man nen interessantes Berufsleben verbringen.
"Problem" ist nur das ich schon eines habe. ;-)
Bin als Softwerker arbeitender E-Ing.
> Mit den fetten schnellen> FPGAs tun sich da aktuell neue Welten auf.
Ich dachte an Grafikkarten:
http://koonlab.com/CUDA_RealFIR/CUDA%20Real%20FIR.html
Zum Preis von einem Highend-DSP kriegt man die Leistung von hundert.
Vermutlich ist da auch mehr Rechenpower rauszuholen als aus FPGAs,
einfach weil die Chips so riesig und dabei bezahlbar sind.
Aber die Frage der Implementation stellt sich noch nicht (so nett es
auch ist, darüber zu fabulieren), solange man das Verfahren noch nicht
beherrscht, oder gar kennt.
Jörg
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.