Forum: Digitale Signalverarbeitung / DSP / Machine Learning wie FIR-Filter aus Soll- und Ist-Sprungantwort bestimmen?


von Jörg H. (idc-dragon)


Lesenswert?

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

von Michael O. (mischu)


Lesenswert?

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...

von Detlef _. (detlef_a)


Lesenswert?

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

von Jörg H. (idc-dragon)


Lesenswert?

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

von Detlef _. (detlef_a)


Lesenswert?

>>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

von Jörg H. (idc-dragon)


Lesenswert?

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

von Detlef _. (detlef_a)


Lesenswert?

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

von Jörg H. (idc-dragon)


Lesenswert?

> 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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.