Z-Transformation



  • Hallo da,

    leider habe ich gerade ein Problem beim Nachvollziehen der Abtast-Halte-Z-Transformation wie sie beispielsweise unter https://de.wikipedia.org/wiki/Z-Transformation etwas weiter unten zu finden ist.

    Dort wird gezeigt, wie man ein die Reaktion eines kontinuierlichen linearen Systems sozusagen in die diskrete Rechnung "einbettet". Das könnte man wohl dazu verwenden, um das Verhalten eines solchen Systems im Rechner zu simulieren, wenn das reale ansonsten von einem digitalen Regler geregelt würde, ja?

    Nr. 1:
    Aber dort wird auch die Umkehrung besprochen. Die Zeichnung dazu zeigt einen Abtaster, dann der kontinuierliche Regler, dann ein Halteglied. Da stelle ich mir jetzt als Ergebnis die "gehaltene" Summe der Impuls-Antworten vor. Aber was soll das bedeuten, was fange ich damit an?
    Muss ich diese Variante wählen, wenn ich einen kontinuierlichen Standard-Regler im Rechner aufbauen will? Dort habe ich doch sowieso schon einen Abtaster und einen Halter "eingebaut", also würde ich jetzt denken, dass ich einfach die L-Übetragungs-Funktion Z-transformiere und dann auf die Differenzengleichung komme, die ich haben möchte.
    Aber ich habe hier ein Skript vorliegen, das den PID-Regler nachbaut durch:
    GPID(z)=z1zZ(GPID(s)s)=K_P+z11z1K_I+(1z1)KDG_{PID}(z) = \frac{z-1}{z} \mathcal{Z}(\frac{G_{PID}(s)}{s}) = K\_P + \frac{z^{-1}}{1-z^{-1}} K\_I + (1-z^{-1}) K_D
    und da erschließt sich mir so ganz der Sinn nicht.

    Wenn ich das ohne die Einbettung transformiere, komme ich so ziemlich auf das gleiche Ergebnis, nur dass auf den I-Teil nicht der letzte Wert addiert wird, sondern der aktuelle:
    GPID(z)=K_P+11z1K_I+(1z1)KDG'_{PID}(z) = K\_P + \frac{1}{1-z^{-1}} K\_I + (1-z^{-1}) K_D
    Der Unterschied ist nicht groß, aber so ganz klar ist er mir überhaupt nicht.

    Nr. 2:
    Als nächstes stelle ich mir die Frage, warum überall 1z11-z^{-1} als Z-Transformation der Ableitung angegeben wird, fehlt da nicht ein 1TA\frac{1}{T_A}?
    Nr. 3:
    Und dann wird hier im Anlehnung an den kontinuierlichen Fall noch die digitale Variante des realen PID-Reglers hergeleitet, wo ich mich frage, wozu? Der reale kontinuierliche Regler kann natürlich nicht realisiert werden, aber durch die Abtastung kann der digitale Regler ja sowieso nicht ideal differenzieren, wozu da noch eine extra "Tot"-Zeit (aka. PT1) einfügen?

    Würde mich über Antworten und Gedanken-Anregungen sehr freuen! Ansonsten euch ein schönes Wochenende!



  • Hrmm,

    zu meinem ersten Problem. Würde nicht diese Einbettung folgendes bedeuten:

    Ich habe ein digitales Abtastsystem, das mit einem kontinuierlichen Regler geregelt wird. Nun simuliere ich den Regler auch im digitalen System (womit ja die realen Abastast- und Haltevorgänge entfallen, also in die Simulation eingebaut werden müssen).
    Aber wozu? Kommt sowas vor? Wenn ich so darüber nachdenke und das nicht falsch ist, gibt es für mich keinen Sinn, diese Form der Transformation zu wählen, um die digitale Variante des kontinuierlichen herauszufinden.



  • Ist zwar schon eine Weile her die Frage, aber vielleicht guckst Du hier ja trotzdem nochmal rein...

    Eszett schrieb:

    Aber ich habe hier ein Skript vorliegen, das den PID-Regler nachbaut durch:
    GPID(z)=z1zZ(GPID(s)s)=K_P+z11z1K_I+(1z1)KDG_{PID}(z) = \frac{z-1}{z} \mathcal{Z}(\frac{G_{PID}(s)}{s}) = K\_P + \frac{z^{-1}}{1-z^{-1}} K\_I + (1-z^{-1}) K_D
    und da erschließt sich mir so ganz der Sinn nicht.

    Was verstehst Du daran denn nicht? Das ist eben einfach die Übertragungsfunktion von folgender Filter-Implementierung:

    struct pid_filter_1 {
       double state_sum;
       double state_last;
       double Kp, Ki, Kd;
    
       double operator()(double input) {
           double approx_d = input - state_last;
           double out = input * Kp + state_sum * Ki + approx_d * Kd;
           state_last = input;
           state_sum += input;
           return out;
       }
    };
    

    Eszett schrieb:

    Wenn ich das ohne die Einbettung transformiere, komme ich so ziemlich auf das gleiche Ergebnis, nur dass auf den I-Teil nicht der letzte Wert addiert wird, sondern der aktuelle:
    GPID(z)=K_P+11z1K_I+(1z1)KDG'_{PID}(z) = K\_P + \frac{1}{1-z^{-1}} K\_I + (1-z^{-1}) K_D
    Der Unterschied ist nicht groß, aber so ganz klar ist er mir überhaupt nicht.

    Jepp. Der Unterschied ist klein. Zumindest sehe ich nur einen: Statt z^-1 steht da 1 als Zähler für Ki. Das entspricht dann folgender Filterimplementierung:

    struct pid_filter_2 {
       double state_sum;
       double state_last;
       double Kp, Ki, Kd;
    
       double operator()(double input) {
           double approx_d = input - state_last;
           state_sum += input;
           double out = input * Kp + state_sum * Ki + approx_d * Kd;
           state_last = input;
           return out;
       }
    };
    

    Ich habe da jetzt nur "state_sum += input;" vor "double out = ..." hingeschoben. Der Unterschied beim Zähler vor Ki zwischen 1 und z^-1 ist nämlich nur eine Verzögernung von einem Sample.

    Du kannst sogar einen Zwischenweg gehen:
    GPID(z)=K_P+0.5+0.5z111z1K_I+(1z1)KDG''_{PID}(z) = K\_P + \frac{0.5 + 0.5 z^{-1}}{1 - 1 z^{-1}} K\_I + (1-z^{-1}) K_D

    Das sollte phasenmäßig genau dem entsprechen, was der ideale Integrator macht. Die Amplitudenantwort im hochfrequenten Bereich ist aber immer noch daneben. Die Frage ist: Ist das überhaupt wichtig, wie die Übertragungsfunktion bei hohen Frequenzen aussieht? Wenn dein Eingangssignal quasi "basslastig" ist, würde das ja keine Rolle spielen. Und wenn sie das nicht ist, solltest Du vielleicht die Abtastrate erhöhen.

    Eszett schrieb:

    Nr. 2:
    Als nächstes stelle ich mir die Frage, warum überall 1z11-z^{-1} als Z-Transformation der Ableitung angegeben wird, fehlt da nicht ein 1TA\frac{1}{T_A}?

    Ja, das könnte man so machen. Dann müsstest Du konsequenterweise auch den integrativen Teil mit TA multiplizieren. 🙂 Es kommt drauf an, mit was für Einheiten Du rechnen willst und was für eine Einheit deine Filterparameter Ki und Pd haben sollen.

    Eszett schrieb:

    Nr. 3:
    Und dann wird hier im Anlehnung an den kontinuierlichen Fall noch die digitale Variante des realen PID-Reglers hergeleitet, wo ich mich frage, wozu? Der reale kontinuierliche Regler kann natürlich nicht realisiert werden, aber durch die Abtastung kann der digitale Regler ja sowieso nicht ideal differenzieren, wozu da noch eine extra "Tot"-Zeit (aka. PT1) einfügen?

    Keine Ahnung. Bzgl digital differenzieren: Das kannst Du beliebig gut annähern, erhöht dann aber auch die Verzögerung und das will man beim Regeln wahrscheinlich nicht. Ich differenziere einige Signale, indem ich da quasi B-splines durch meine Daten lege. Das entspricht digitalen Filtern, die akausal sind. Das tut mir aber nicht weh, weil das eh keine Zeitsignale sind, die ich in real-time verzögerungsfrei verarbeiten muss. Das kombiniere ich dann auch noch mit 'nem Wiener-Filter zur Rauschunterdrückung.

    Gruß,
    kk



  • Eszett schrieb:

    Der reale kontinuierliche Regler kann natürlich nicht realisiert werden, aber durch die Abtastung kann der digitale Regler ja sowieso nicht ideal differenzieren, wozu da noch eine extra "Tot"-Zeit (aka. PT1) einfügen?

    Ich verstehe die Frage nicht. Wo wird eine Totzeit oder ein PT1 eingefügt? Im übrigen Totzeit != PT1.

    Was man oft macht ist, dass man einen PIDT1-Regler baut. Meinst du das?


Log in to reply