numerisches lösen einer übertragungsfunktion



  • hallo

    ich möchte gerne eine übertragungsfunktion der form 1/(1+s+s^2) numerisch lösen (phasen und amplitudengang).die übertragungsfunktion kann auch höherer ordnung sein.
    vielleicht kennt jemand eine gute internetseite oder hat eine idee wie ich das
    numerisch lösen kann.

    s ist die laplacetransformierte oder j*w

    gruss tobias



  • Ist zwar schon etwas älter der Beitrag, ich frag aber trotzdem noch mal nach:
    Was genau meinst du mit numerisch lösen? Brauchst du die Knickfrequenzen oder willst du den Frequenzgang plotten? Mit C++, Java, Maple, Matlab, auf Papier?



  • also du willst funktionen der art
    1/(a1 + a2 * x^2 + ... + an * x^n) = const.
    nach x auflösen?
    ich kann dir zwar dabei nicht helfen, aber vielleicht dieser link:
    Numerical Recipes in C

    mfg
    Sebastianh



  • hallo fubar

    numerisch lösen auf dem pc. mit c oder basic... spielt eigentlich keine rolle.
    dann den frequengang und phasengang plotten.
    ich wollte einfach einmal wissen wie ich das überhaubt numerisch lösen kann.
    die programmierte funktione würde dann das gleiche wie der befehl "bode" in matlab machen. mein problem ist eigentlich ich übergebe der funktion die übertragungsfunktion 1/(1+s+s2...sn). wie kann ich nun diese funktion numerisch in amplitude und phase trennen?

    gruss tobias



  • Hallo,

    falls du auch C++ benutzen kannst, wäre die Complex-(Template)Klasse hilfreich.
    Dann könntest du die Übertragungsfunktion direkt mit abs und arg in Betrag und Phase zerlegen. Ansonsten würde ich G(jω) nach Potenzen sortieren
    (es gilt:

    jn={1,n=4kj,n=4k+11,n=4k+2j,n=4k+3j^n= \left\{ \begin{array}{ll} 1,\; n = 4k \\ j,\; n= 4k+1 \\ -1,\; n= 4k+2 \\ -j,\; n= 4k+3 \\ \end{array} \right.

    )
    Dann noch in Real- & Imaginärteil aufspalten und schon kannst du auch Betrag und Phase ausrechnen. Wäre jetzt so meine erste Idee...



  • hallo fubar

    c++ kann ich leider nicht gebrauchen. aber deine zweite idee würde mich ein
    bisschen mehr interessieren. ich schaue nur noch nicht ganz durch.

    bsp: übertragrungsfunktion wäre 1/(1 + a0*j*w + a1*(j*w)^2) -> die höchste potenz zu finden sollte kein problem sein und dann ordnen auch nicht. mein array würde dann ja wie folgt aussehen {a1*j*w;a0*j*w;1}. nun wie kann ich das jetzt in real und imaginär teil aufteilen? oder verstehe ich etwas falsch.

    besten dank

    tobias



  • Das was du suchst hat nichts mit der Lösung dieses Ausdrucks zu tun. Du suchst das Bode Diagramm. Dazu setzt du s=j*w ein, trennst das ganze nach Real- und Imaginärteil auf. Der Betrag A(w) ist dann Wurzel aus (Realt^2 + Imagt^2) und die Phase arctan(imagt/realt), wobei hier noch ne Fallunterscheidung nötig wird, aber zunächst langts so mal.



  • G(jω)=11+a_1jω+a_2(jω)2=1(1a2ω2)+ja1ωG(j\omega) = \frac 1 { 1+a\_1j\omega+a\_2(j\omega)^{2} } = \frac 1 {\left( 1-a_{{2}}{\omega}^{2} \right) + ja_{{1}}\omega}
    daraus folgt:
    G(jω)dB=20log(1a_2ω2)2+a_12=10log((1a_2ω2)2+a_12)|G(j\omega)|_{dB} = - 20 \log \sqrt {(1-a\_2\omega^2)^2 + a\_1^2} = - 10 \log ((1-a\_2\omega^2)^2 + a\_1^2)
    So kannst du dann auch die Phase berechnen, wobei arg1z=argz\arg \frac 1 z = - \arg z.



  • danke fubar

    werde das mal so programmieren. noch eine weiterführende frage.
    wie könnte ich numerisch die pol und die nullstellen der übertragrungsfunktion berechnen?

    gruss tobias



  • Schau dir mal Kapitel 9.5 (Roots of Polynomials) in den Numerical Recipes an; Link siehe Beitrag von sebhofer. Oder google nach Verfahren von Newton/Bairstow...


Anmelden zum Antworten