Forum: Digitale Signalverarbeitung / DSP / Machine Learning Problem mit Bode/Tiefpass


von Tatjana J. (minnie)


Lesenswert?

Hallo,

ich soll das Bode-Diagramm eines Tiefpasses darstellen. Hab mich mal in 
Scilab versucht und weiß auch, wie die Diagramme aussehen sollen. So 
sieht das bei mir aber leider nicht aus.

Das hab ich bis jetzt geschrieben:

clear
clf()
xdel

R = 470;
C = 3,3E-7;
freq = logspace (0,6,60);
Amplitude = 1/sqrt(1+(2*%pi*freq*R*C)^2);
Amplitude_dB = 10 *log10(abs(Amplitude));
Phase = (-atan(2*%pi*freq *R*C));
subplot(2,1,1);

plot2d(freq,Amplitude_dB, logflag ="ln", style =5)
xgrid(3)
xtitle("Das Bodediagramm eines Tiefpasses 1.Ordnung", "Frequenz in Hz", 
"Amplitude in dB")
subplot(2,1,2)
plot2d(freq, Phase, logflag ="ln", style =5)
xgrid(3)
ylabel("Phase in Grad");


Dargestellt werden soll der Bereich von 1 Hz bis 1 MHz. Sieht vielleicht 
jemand auf den ersten Blick, was da genau der Fehler ist? Wenn es geht 
soll alles so einfach wie möglich bleiben, da ich absoluter 
Scilab-Neuling bin.

Noch was. Wie kann ich die Skalierung des ersten Plots der y-Achse 
ändern? Die ist viel zu hoch gegriffen.

Freue mich über jede hilfreiche Antwort!

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

http://www.mikrocontroller.net/articles/Digitalfilter_mit_ATmega#Literatur
In "Signal.pdf" steht vielleicht auch dazu ein Beispiel. Es gibt leider 
wenig Literatur zu Scilab-DSP

von Tatjana J. (minnie)


Lesenswert?

Danke. Ist nett. Ich schau mir das mal an.

von BJ (Gast)


Lesenswert?

Hallo,

spontan finde ich 2 Fehler:
1. Scilab verwendet standarmäßig den Punkt als Dezimalzeichen. Das heißt
C=3,3E-7 sind 3Farad und nicht 330nF. Dadurch ist deine Grenzfrequenz 
sehr, sehr niedrig.
2. Scilab arbeitet immer mit Vektoren. Wenn man ein Elementweise 
Multiplikation oder Division durchführen will muss mein ein . vor den 
Operator setzen. Das gilt auch für
Amplitude = 1/sqrt(1+(2*%pi*freq*R*C)^2);
Damit Scilab das ausrechnet was du meinst, müsste es heißen:
Amplitude = 1 ./sqrt(1+(2*%pi*freq*R*C)^2);
Dabei das Leerzeichen nach der 1 beachten, da Scilab ein 1. als 1.0 
interpretiert und damit dein Fehler erhalten bleiben würde wenn man es 
wegließe. Daher würde ich an der Stelle in der Regel das so schreiben:
Amplitude = (sqrt(1+(2*%pi*freq*R*C)^2)).^(-1);

Der Variablenname freq ist ungünstig, da es in Scilab eine Funktion 
gleichen Namens bereits gibt.

Grüße,

Björn

von Tatjana J. (minnie)


Lesenswert?

Hallo Björn,

wow, mit einmal sieht der ganze Plot so richtig aus!

Mein einziges Problem ist noch, dass die Skalierung bei der Phase nicht 
hinkommt. Die y-Achste geht dabei von 0 bis -1,6, obwohl 0 - 90° 
passender wäre. Kann ich das ändern oder warum geschieht das 
automatisch?

von Helmut S. (helmuts)


Lesenswert?

Deine Phase ist im Bogenmaß. Grad gibt es durch multiplizieren mit 
180/%pi

Hier auf Seite 10 ein Beispiel unter Verwendung der Funktion bode(). Da 
ist die Anzeige in Grad.
http://www.fh-kl.de/~kubitzki/scilab/scilab_sysdyn.pdf



// Name: sysbode1.sce
// WK, 20.06.2004
// for SciLab-Tutorial
// Data P-T2, second order lag
T=0.5; //T in s
d=0.6; // Damping
Kp=1.5;
// Transferfunction
p=poly(0,'p');
Fs1=syslin('c',(Kp/(T^2*p^2+2*d*T*p+1)));
// frequency range from 0,01Hz to 100Hz
fmin=0.01;
fmax=100;
title='Bodeplot of a second order system';
bode(Fs1,fmin,fmax,title);

von Tatjana J. (minnie)


Lesenswert?

Super cool. Hat geklappt. Vielen lieben Dank!

von Tatjana J. (minnie)


Angehängte Dateien:

Lesenswert?

Ich hätt mal noch mal ne kurze Frage an Björn.

Brauche das ganze Ding natürlich auch noch für einen Hochpass und 
irgendwie klappt das mit Formeländerung, glaub ich mal, nicht so 
richtig.

Formel hab ich mit angehängt. Geschrieben hab ich das in Scilab 
folgendermaßen

Amplitude = 1 ./1 +(1 ./2*%pi*frequ*R*C)^2;

Sieht aber verkehrt aus laut Plot.

von Floh (Gast)


Lesenswert?

Tatjana J. schrieb:
> Amplitude = 1 ./1 +(1 ./2*%pi*frequ*R*C)^2;

Da fehlt die Wurzel?

Übrigends, wenn das Schaltungen sind, deren Übertagungsfunktion du 
wissen willst, warum simulierst du nicht direkt die Schaltung z.B. mit 
LT-Spice? Dann sparst du dir das Formelaufstellen und hast direkt das 
Bodediagramm mit einer Frequenzanalyse.

von Helmut S. (helmuts)


Lesenswert?

> Da fehlt die Wurzel?

Nicht nur die, sondern auch die Klammern.
1/1+... So nicht! Also da würde ich sagen hundert mal schreiben 
1/(1+...) :-)
Eigentlich muss es heißen: 1/sqrt(...)

frequ*frequ geht da nicht, wenn das ein Vektor ist.

frequ.*frequ

von Tatjana J. (minnie)


Lesenswert?

Ich hatte so viele Varianten versucht, dass ich versehentlich die ohne 
Wurzel reinkopiert habe.

Also das ist mein aktueller Stand

Amplitude = 1 ./sqrt(1 +(1 ./2*%pi*frequ*R*C)^2);

Da ist die Wurzel und Klammer. Noch was verkehrt?

@Floh:

Ja, sind Schaltungen. LTSpice habe ich auch schon in Erwägung gezogen 
aber das hab ich nich mal auf dem Rechner und demzufolge auch noch kein 
einziges Mal mit gearbeitet...

von Tatjana J. (minnie)


Lesenswert?

Hab die Klammern verkehrt gesetzt.

Jetzt funktioniert es. Vielen Dank erstmal!

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.