mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Nichtlineares System linearisieren


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Harald W. (wilhelms)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael (Gast)
Datum:

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

Autor: vorverzerrer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Weltbester FPGA-Pongo (Gast)
Datum:

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

Autor: Jan K. (jan_k)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sigi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.