mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Übertragungsfunktion diskretisieren -> Koeffizienten (symbolisch) gesucht


Autor: Vincent H. (vinci)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grüß euch

Hat jemand eine Tabelle oder ein Tool zur Hand, mit dem ohne große 
Rechnerei die symbolischen Koeffizienten einer diskretisierten 
Übertragungsfunktion herausbekommt?

Sprich s-Bereich ->

             0.001572 s^3 + 1.22 s^2 + 28.69 s + 1.872
  ---------------------------------------------------------------
  1.603e-07 s^4 + 0.0003833 s^3 + 0.07381 s^2 + 0.3465 s + 0.0104


nach z ->
        84.94 z^3 - 79.75 z^2 + 0.1227 z - 1.224e-19
  ---------------------------------------------------------
  z^4 - 0.9786 z^3 + 0.008116 z^2 + 5.065e-20 z + 8.743e-39



Aber halt nicht irgendein numerischer Wert, sondern das entsprechende 
Symbol dafür bei Diskretisierungs-Methode XYZ...

Gibts da was?

Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Vincent H. (vinci)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Funktion liefert Koeffizienten als Symbolnamen?
Kann ich mir nicht vorstellen...

Liest sich wie das Äquvalent von c2d aus Matlab, von dem ich obige 
Ausgabe kopiert hab.

Autor: Dergute W. (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Alexander (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lediglich bis 3. Ordnung?

Autor: Vincent H. (vinci)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dergute W. schrieb:
> Moin,
>
> Suchst du das da?
>
> https://de.wikipedia.org/wiki/Bilineare_Transforma...
>
> Gruss
> WK

Nein. Ich kenne die Methoden zum Diskretisieren und könnte sie 
theoretisch anwenden. Bei komplexeren Ausdrücken ist das aber recht 
unlustig. Ich bin auch mit Matlab und Co vertraut, aber von denen bekomm 
ich nur numetische Werte.

Mein (recht simples) mathematisches Verständnis lässt mich aber 
vermuten, dass es zw. s- und z-Bereich einen direkten Zusammenhang gebeb 
müsste...? Ohne das man extra einsetzen und ausmultiplizieren muss.

Autor: Dergute W. (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Vincent H. schrieb:
> Mein (recht simples) mathematisches Verständnis lässt mich aber
> vermuten, dass es zw. s- und z-Bereich einen direkten Zusammenhang gebeb
> müsste...? Ohne das man extra einsetzen und ausmultiplizieren muss.

Hmmm - ich weiss nicht was du da vorhast...

z = exp(s * T_abtast)

waere ein Zusammenhang zwischen s und z. Aber ohne "einsetzen" und 
"ausmultiplizieren" wirst du nicht so recht weiterkommen...

Gruss
WK

Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht solltest du beschreiben wozu du das vorhast und was du dann 
mit diesen symbolischen Koeffizienten machst. Und ob es dann nicht 
sinnvoller wäre, Pol- und Nullstellen, statt dieser Koeffizienten zu 
überführen

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vincent H. schrieb:
> Mein (recht simples) mathematisches Verständnis lässt mich aber
> vermuten, dass es zw. s- und z-Bereich einen direkten Zusammenhang gebeb
> müsste...?

Gibt es nicht. Dein mathematisches Verständnis sollte dir sagen, dass 
alleine die Tatsache, dass in z-Bereich die Sache zyklisch mit der 
Abtastfrequenz wird, s aber nicht, dir da einen Strich durch die 
Rechnung macht.

Autor: Vincent H. (vinci)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, habs jetzt ausmultipliziert...

Geht man von folgender Form im Bildbereich aus:
b0 * s^4 + b1 * s^3 + b2 * s^2 + b3 * s + b4
--------------------------------------------
a0 * s^4 + a1 * s^3 + a2 * s^2 + a3 * s + a4

Dann ergeben sich beim Diskretisieren nach Tustin folgende Koeffizienten 
im Z-Bereich (T ^= Abtastzeit):
b0z = (b4*T^4 + 2*b3*T^3 + 4*b2*T^2 + 8*b1*T + 16*b0);
b1z = (4*b4*T^4 + 4*b3*T^3 - 16*b1*T - 64*b0);
b2z = (6*b4*T^4 - 8*b2*T^2 + 96*b0);
b3z = (4*b4*T^4 - 4*b3*T^3 + 16*b1*T - 64*b0);
b4z = (b4*T^4 - 2*b3*T^3 + 4*b2*T^2 - 8*b1*T + 16*b0);
a0z = (a4*T^4 + 2*a3*T^3 + 4*a2*T^2 + 8*a1*T + 16*a0);
a1z = (4*a4*T^4 + 4*a3*T^3 - 16*a1*T - 64*a0);
a2z = (6*a4*T^4 - 8*a2*T^2 + 96*a0);
a3z = (4*a4*T^4 - 4*a3*T^3 + 16*a1*T - 64*a0);
a4z = (a4*T^4 - 2*a3*T^3 + 4*a2*T^2 - 8*a1*T + 16*a0);


Wozu ich das gebraucht hab?
Ganz einfach. Ich finds ziemlich grauslich ein physikalisches Modell im 
Code zu haben, dass durch externe Tools mit irgendeiner "Magic"-Number 
gefüttert wird.

Statt sinnvolle Konstante ala
R1 = 10R
C1 = 0.1uF
T = 100us

irgendwo abgelegt zu haben, steht dann nur mehr
a0 = 0.0018241;


Im schlimmsten Fall kommt dann ein Kollege daher und meint ein 100us 
Timer frisst ja viel zu viel Rechenleistung. Wir stellen den Timer auf 
200us um... Und a0? Keine Ahnung was das macht. Oder vielleicht weiß ers 
doch, aber MATLAB und Python sind Fremdwörter, usw. usf.

Autor: Lukas (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Und was machst du jetzt, wenn dein Kollege ein System höherer Ordnung 
betrachten will?

Natürlich kannst du die Diskretisierung auch selbst programmieren. Aber 
dann doch lieber allgemeingültig und nicht auf bestimmte Systeme 
begrenzt? Wie das in python gemacht wird ist offen für jeden den es 
interessiert

Autor: Vincent H. (vinci)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Dann hoff ich für erm, dass a
a) mit Bleistift und Papier
oder
b) mit Matlab oder Python
umgehn kann.


Die obige Lösung ist für alle System bis 4.Ordnung gültig. Wie das 
gemacht wird ist auch offen für jeden... Wers nicht schafft s zu 
substituieren, der soll bitte ein Mathematik-Buch der Unterstufe 
organisieren.

Autor: Josef (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Ok, etwas spaet.
Hier ist eine Loesung in maxima.
http://maxima.sourceforge.net/

(%i505) Hs;
                           4       3       2
                       b0 s  + b1 s  + b2 s  + b3 s + b4
(%o505)                ---------------------------------
                           4       3       2
                       a0 s  + a1 s  + a2 s  + a3 s + a4
(%i506) sz;
                                   2 (z - 1)
(%o506)                            ---------
                                   (z + 1) T
(%i507) Hs, s=sz;
                                   2               3                4
        2 b3 (z - 1)   4 b2 (z - 1)    8 b1 (z - 1)    16 b0 (z - 1)
        ------------ + ------------- + ------------- + -------------- + b4
         (z + 1) T             2  2            3  3            4  4
                        (z + 1)  T      (z + 1)  T      (z + 1)  T
(%o507) ------------------------------------------------------------------
                                   2               3                4
        2 a3 (z - 1)   4 a2 (z - 1)    8 a1 (z - 1)    16 a0 (z - 1)
        ------------ + ------------- + ------------- + -------------- + a4
         (z + 1) T             2  2            3  3            4  4
                        (z + 1)  T      (z + 1)  T      (z + 1)  T
(%i508) ratsimp(%,z);
          2        4         2
(%o508) (z  (6 b4 T  - 8 b2 T  + 96 b0)
    3        4         3
 + z  (4 b4 T  + 4 b3 T  - 16 b1 T - 64 b0)
            4         3
 + z (4 b4 T  - 4 b3 T  + 16 b1 T - 64 b0)
    4      4         3         2                         4         3         2
 + z  (b4 T  + 2 b3 T  + 4 b2 T  + 8 b1 T + 16 b0) + b4 T  - 2 b3 T  + 4 b2 T
                     2        4         2
 - 8 b1 T + 16 b0)/(z  (6 a4 T  - 8 a2 T  + 96 a0)
    3        4         3
 + z  (4 a4 T  + 4 a3 T  - 16 a1 T - 64 a0)
            4         3
 + z (4 a4 T  - 4 a3 T  + 16 a1 T - 64 a0)
    4      4         3         2                         4         3         2
 + z  (a4 T  + 2 a3 T  + 4 a2 T  + 8 a1 T + 16 a0) + a4 T  - 2 a3 T  + 4 a2 T
 - 8 a1 T + 16 a0)
(%i509) string(%);
(%o509) (z^2*(6*b4*T^4-8*b2*T^2+96*b0)+z^3*(4*b4*T^4+4*b3*T^3-16*b1*T-64*b0)+z\
*(4*b4*T^4-4*b3*T^3+16*b1*T-64*b0)+z^4*(b4*T^4+2*b3*T^3+4*b2*T^2+8*b1*T+16*b0)\
+b4*T^4-2*b3*T^3+4*b2*T^2-8*b1*T+16*b0)/(z^2*(6*a4*T^4-8*a2*T^2+96*a0)+z^3*(4*\
a4*T^4+4*a3*T^3-16*a1*T-64*a0)+z*(4*a4*T^4-4*a3*T^3+16*a1*T-64*a0)+z^4*(a4*T^4\
+2*a3*T^3+4*a2*T^2+8*a1*T+16*a0)+a4*T^4-2*a3*T^3+4*a2*T^2-8*a1*T+16*a0)
(%i510) 

Autor: Vincent H. (vinci)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Trotzdem Danke für die Mühe und die Erwähnung dieses schönen Tools!

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.