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


von Vincent H. (vinci)


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?

von Lukas (Gast)


Lesenswert?


von Vincent H. (vinci)


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.

von Dergute W. (derguteweka)


Lesenswert?


von Alexander (Gast)


Lesenswert?

Lediglich bis 3. Ordnung?

von Vincent H. (vinci)


Lesenswert?

Dergute W. schrieb:
> Moin,
>
> Suchst du das da?
>
> https://de.wikipedia.org/wiki/Bilineare_Transformation_(Signalverarbeitung)
>
> 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.

von Dergute W. (derguteweka)


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

von Lukas (Gast)


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

von Wolfgang (Gast)


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.

von Vincent H. (vinci)


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.

von Lukas (Gast)


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

von Vincent H. (vinci)


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.

von Josef (Gast)


Lesenswert?

Ok, etwas spaet.
Hier ist eine Loesung in maxima.
http://maxima.sourceforge.net/
1
(%i505) Hs;
2
                           4       3       2
3
                       b0 s  + b1 s  + b2 s  + b3 s + b4
4
(%o505)                ---------------------------------
5
                           4       3       2
6
                       a0 s  + a1 s  + a2 s  + a3 s + a4
7
(%i506) sz;
8
                                   2 (z - 1)
9
(%o506)                            ---------
10
                                   (z + 1) T
11
(%i507) Hs, s=sz;
12
                                   2               3                4
13
        2 b3 (z - 1)   4 b2 (z - 1)    8 b1 (z - 1)    16 b0 (z - 1)
14
        ------------ + ------------- + ------------- + -------------- + b4
15
         (z + 1) T             2  2            3  3            4  4
16
                        (z + 1)  T      (z + 1)  T      (z + 1)  T
17
(%o507) ------------------------------------------------------------------
18
                                   2               3                4
19
        2 a3 (z - 1)   4 a2 (z - 1)    8 a1 (z - 1)    16 a0 (z - 1)
20
        ------------ + ------------- + ------------- + -------------- + a4
21
         (z + 1) T             2  2            3  3            4  4
22
                        (z + 1)  T      (z + 1)  T      (z + 1)  T
23
(%i508) ratsimp(%,z);
24
          2        4         2
25
(%o508) (z  (6 b4 T  - 8 b2 T  + 96 b0)
26
    3        4         3
27
 + z  (4 b4 T  + 4 b3 T  - 16 b1 T - 64 b0)
28
            4         3
29
 + z (4 b4 T  - 4 b3 T  + 16 b1 T - 64 b0)
30
    4      4         3         2                         4         3         2
31
 + z  (b4 T  + 2 b3 T  + 4 b2 T  + 8 b1 T + 16 b0) + b4 T  - 2 b3 T  + 4 b2 T
32
                     2        4         2
33
 - 8 b1 T + 16 b0)/(z  (6 a4 T  - 8 a2 T  + 96 a0)
34
    3        4         3
35
 + z  (4 a4 T  + 4 a3 T  - 16 a1 T - 64 a0)
36
            4         3
37
 + z (4 a4 T  - 4 a3 T  + 16 a1 T - 64 a0)
38
    4      4         3         2                         4         3         2
39
 + z  (a4 T  + 2 a3 T  + 4 a2 T  + 8 a1 T + 16 a0) + a4 T  - 2 a3 T  + 4 a2 T
40
 - 8 a1 T + 16 a0)
41
(%i509) string(%);
42
(%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\
43
*(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)\
44
+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*\
45
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\
46
+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)
47
(%i510)

von Vincent H. (vinci)


Lesenswert?

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

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.