Forum: Digitale Signalverarbeitung / DSP / Machine Learning Nichtlineares System linearisieren


von Michael (Gast)


Lesenswert?

Ich habe ein analoges System das mir für einen gewissen Wertebereich 
meines Eingangssignales x, am Ausgang näherungsweise f(x) = a*x^2 + b*x 
+ c liefert.
Die Koeffizienten a,b und c habe ich bereits ermittelt und die Näherung 
funktioniert tadellos.

Jetzt möchte ich den Ausgang aber linearisieren, oder auch beliebig 
ändern.

Wenn ich sage mein momentaner Ausgang ist U1 = f(a1,b1,c1,x) und ich 
berechne mir Koeffizienten a2, b2 und c2 damit ich folgenden Ausgang U 
erzeuge: U = U1 - (U1 - U2)/2 dann funktioniert dass auch tadellos.

Allerdings nur in der Matlab Simulation. Im echten Leben müsste ich das 
Eingangssignal x so bearbeiten, dass ich am Ausgang eben diese Funktion 
U = U1 - (U1 - U2)/2 erzeuge. Den Ausgang selbst kann ich ja nicht 
beeinflussen.

Ich stehe dabei gerade voll auf der Leitung. Wie mache ich denn das? 
Kann ich das überhaupt im Zeitbereich machen oder muss ich alles in den 
Frequenzbereich transformieren?

Beste Grüße,
Michael

von Harald W. (wilhelms)


Lesenswert?

Michael schrieb:

> Ich stehe dabei gerade voll auf der Leitung. Wie mache ich denn das?

Am einfachsten mit einer Tabelle, die man mit einem µC ausliest.

von Michael (Gast)


Lesenswert?

Ich weiß einfach nicht genau was ich rechnerisch mit dem Eingangssignal 
x machen muss?

von vorverzerrer (Gast)


Lesenswert?

Du willst ja linearisieren, d.h. du musst das Signal bevor es die 
Kennlinie f(x) erfährt mit einer Kennlinie f⁻¹(x) beaufschlagen. Die 
Kennlinie erhältst du durch Spiegeln an der Geraten y=x oder mit Gain 
halt y=cx.
Die Kennlinie kannst du natürlich  wie Harald sagt schon als Lookup 
Table irgendwo ablegen.

Gruß

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Was lernt ihr in der Schule? LGS lösen, heisst die Aufgabe. "Lineare 
Regression", fällt mir noch als Stuchwort ein.

von Jan K. (jan_k)


Lesenswert?

Theoretisch möchtest du, wie schon geschrieben wurde auf dein f(x) die 
Umkehrfunktion f⁻¹(x) anwenden. In Theorie bekommst du damit ein perfekt 
linearisiertes Signal.
Das fiese ist aber, dass die Umkehrfunktion nur bei bijektiven 
Funktionen eindeutig existiert, sonst musst du den Wertebereich 
einschränken.

Einige Möglichkeiten:
- fitten (Regression) der kompletten Umkehrfunktion (also y und x Achse 
deines f(x) tauschen)
- analytische Berechnung der Umkehrfunktion von f(x) (in deinem Fall 
nicht möglich)
- stückweise Regression (z.B. stückweise linear fitten), musst aber die 
Intervalle vernünftig legen
- einfach alles in eine Lookup table packen und zwischen den 
Stützstellen interpolieren (ist sehr ähnlich zu einem Punkt weiter oben)

Das alles sind allerdings auch keine Allheilmittel, da die 
nicht-Bijektivität ja erhalten bleibt, d.h. du kannst für mehrere x 
Werten ein und dasselbe y bekommen (das die Surjektivität, eine 
Voraussetzung der Bijektivität, siehe 
https://de.wikipedia.org/wiki/Bijektive_Funktion). Möchtest du jetzt die 
Umkehrfunktion haben, hast du auf einmal zu einem y mehrere x Werte und 
weißt nicht ohne weitere Einschränkung, welches x du nehmen möchtest.

Schöne Grüße

von Sigi (Gast)


Lesenswert?

Abgesehen davon, dass ein Grossteil von deinem Beitrag
kaum zu verstehen ist, gehe ich mal auf den 3. bzw. 4.
Absatz ein:
Du hast U1 = f(a1,b1,c1,x) bzw. U2 = f(a2,b2,c2,x)
mit gegebenen a1,b1,c1 und unbekannten a2,b2,c2 und
dem Ziel U = U1 - (U1-U2)/2 . Das wird am Besten
umformuliert in 2*U - U1 = U2. Der llinke Teil kann
ja ausgerechnet oÄ werden, d.h. U2 ist damit gegeben.
a2,b2 und c2 kann dann z.B. bequem per minim. quadr.
Abweichung bestimmt werden. x muss dazu nicht
geändert werden.

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.