Bode-Diagramm plotten < Mathematica < Mathe-Software < Mathe < Vorhilfe
|
Hallo!
Ich möchte von einer Übertragungsfunktion G(p) bzw G(s) eines PT3-Gliedes das Bode-Diagramm zeichnen lassen.
Also Amplituden und Phasengang.
Allerdings habe ich keine Ahnung von der Syntax, auch meine Suche ergab keine wirkliche Hilfe.
Am besten wäre es, wenn mir jmd sagen könnte, wie ich für eine x-beliebige Funktion das Bode-diagramm zeichen kann.
Falls Mathematica das falsche Programm dafür ist, hätte ich auch noch Matlab. Vielleicht ist es damit einfacher.
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 13:56 So 14.06.2009 | Autor: | Disap |
Hallo!
Ich habe zur Zeit kein Matlab zur Verfügung und kann es nicht testen; aber die Matlab-Firma sagt dazu folgendes:
http://www.mathworks.com/access/helpdesk/help/toolbox/control/index.html?/access/helpdesk/help/toolbox/control/ref/bode.html&http://www.google.de/search?hl=de&q=matlab+bode&btnG=Google-Suche&meta=&aq=f&oq=
Scroll da mal nach unten zu "Example", so solltest du die Funktion einfach eingeben können, also speziell meine ich
g = tf([1 0.1 7.5],[1 0.12 9 0 0]);
bode(g)
für [mm] \frac{s^2+0.1s+7.5}{s^4+0.12s^3+9s^2}
[/mm]
Was bei tf eingegeben wurde, sieht man ja, die Faktoren von den s (absteigend), also 1 für [mm] 1s^2 [/mm] und 9 für [mm] s^2...
[/mm]
Vielleicht geht das ja so
MfG
Disap
|
|
|
|
|
Ich habe bei matlab in das command window systf=tf([3.6],[12.5 20 8.5 1]) getippt aber er antwortet ??? Undefined command/function 'tf'
also das kann ja nun nicht sein, dass er den Befehl nicht kennt!?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:26 So 14.06.2009 | Autor: | Disap |
Hi.
Also wie gesagt, ich kann das leider nicht testen
Ich würde 2 Sachen vorschlagen:
1. Kopier doch mal wirklich den Code, der auf der Seite angegeben ist
g = tf([1 0.1 7.5],[1 0.12 9 0 0]);
bode(g)
Und zwar ohne Abänderungen! Wenn das nicht geht, dann funktioniert der Befehl wohl leider nicht (weswegen auch immer).
> Ich habe bei matlab in das command window
> systf=tf([3.6],[12.5 20 8.5 1]) getippt aber er antwortet
> ??? Undefined command/function 'tf'
2. Als erstes dachte ich, man sollte zumindest ein Semikolon setzen, weil ich selbst gar nicht weiß, was tf überhaupt bedeutet. Ich vermute die Fehlerursache eher in
systf
In vielen Programmiersprachen darf man einige Wörter gar nicht verwenden, weil sie schon intern als Code verwendet werden
SYS - klingt schon mal fraglich, ob man das so verwenden darf
und dann das TF dahinter, ich würde vorschlagen, das wirklich nur
g
statt systf zu nennen, und zu gucken, ob es dann funktioniert.
> also das kann ja nun nicht sein, dass er den Befehl nicht
> kennt!?
Also wenn die Syntax unter 1. nicht geht, kann ich dir leider auch nicht helfen, Sorry
|
|
|
|
|
Ich habe herrausgefunden, warum es nicht geht.
Mein matlab hat ein modul nicht, was man dafür installieren muss.
übrigens tf bedeutet transfer function
bleibt die nun die frage wie man es mit mathematica hinbekommt.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 19:43 So 14.06.2009 | Autor: | Disap |
Das hast du schon gesehen:
https://matheraum.de/read?i=561513
oder?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:42 So 14.06.2009 | Autor: | Frasier |
Hallo,
bode und tf sind Befehle der Control System Toolbox für Matlab. Damit wäre es ganz einfach.
Du kannst das aber natürlich auch ohne diese Toolbox hinbekommen.
1: | %% mit Control System Toolbox
| 2: | clear all; clc;
| 3: |
| 4: | cst=ver('control'); % testen, ob die
| 5: | if (~isempty(cst)) % Toolbox installiert ist
| 6: | pt3=tf(1,[1 3 3 1]);
| 7: | bode(pt3)
| 8: | grid on;
| 9: | else
| 10: | disp('Control System Toolbox nicht installiert');
| 11: | end
| 12: |
| 13: |
| 14: | %% ohne Control System Toolbox
| 15: | clear all; clc;
| 16: | w=logspace(-1,1,1000);
| 17: | H=1./((i*w).^3+3*(i*w).^2+3*(i*w)+1);
| 18: | A=20*log10(abs(H));
| 19: | p=unwrap(angle(H))*180/pi;
| 20: | figure;
| 21: | subplot(2,1,1)
| 22: | semilogx(w,A);
| 23: | ylabel('Amplitude (dB)');
| 24: | grid on;
| 25: | subplot(2,1,2)
| 26: | semilogx(w,p);
| 27: | xt=[.1:.1:1 2:1:10]';
| 28: | set(gca,'xtick',xt);
| 29: | set(gca,'xticklabel',{num2str(xt(1:5),'%0.1f'),'','','','',num2str(xt(10:end))});
| 30: | set(gca,'ytick',-270:45:0);
| 31: | ylabel('Phase (°)');
| 32: | xlabel('Frequenz (rad/s)');
| 33: | grid on;
| 34: | suptitle('Bode-Diagramm'); % Eine Funktion aus dem File Exchange |
Für diejenigen ohne Control System Toolbox liegt das Ergebnis bei. Datei-Anhang
In Mathematica würde ich für dasselbe Beispiel so anfangen
1: | H[s_] := 1/(s^3 + 3 s^2 + 3*s + 1)
| 2: | Amplitude := 20*Log[10, Abs[H[I*w]]]
| 3: | Phase := Arg[H[I*w]]
| 4: | LogLinearPlot[Amplitude, {w, 0.1, 10}, GridLines -> Automatic]
| 5: | LogLinearPlot[Phase/Degree, {w, 0.1, 10}, GridLines -> Automatic] | Nur wie wird man hier den Phasensprung bei -180° los? Hier hoffe ich selbst noch auf Beiträge.
lg
F.
Dateianhänge: Anhang Nr. 1 (Typ: pdf) [nicht öffentlich]
|
|
|
|
|
super!
vielen dank, nach sowas hab ich gesucht.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:20 Di 16.06.2009 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 15:34 So 14.06.2009 | Autor: | Disap |
Hier kann ich das leider auch nicht testen :(
Aber guck am besten mal in die Dokumentation von Wolfram
http://documents.wolfram.com/applications/insydes/Tutorial/BodePlots.html
oder etwas komplizierter in diesem PDF
http://www.cs.wright.edu/~fdgarber/ee321/bode/mma/Bode.nb.pdf
Auf Seite 1 wird da h(s) = 1/s definiert.
durch HdB wird die Magnitude und durch Hangle die Phase zunächst berechnet. Bei 1/s - dem I-Glied - kann man diese beiden Sachen auch in der Tabelle nachschlagen; oder eben halt berechnen, und das geht in Mathematica anscheinend mit dem Code, den du im PDF sehen kannst
Und mittels LogLinearPlot kannst du logarithmische Achsen wählen (bzw. die beiden Zeilen sind dann halt dein Plotbefehl - warum ist eine andere Sache ;) )
MfG
Disap
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:20 Di 16.06.2009 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|