Archiv der Kategorie Scilab Shorties

Parametervariation for-Schleife (Scilab)

parametervariation.jpgSinus- und Kosinusfunktionen mit Amplitudenvariation von 1 bis 10 können über über eine Schleife realisiert werden. Scilabs matrizenorientierte Abarbeitung erspart den separaten Zähler. Die beiden Datensätze werden im zusammen dargestellt, sind aber eigenständige Datensätze, da durch das Apostroph die Matrix in Spalten umgebrochen wird. Deshalb werden in der grafischen Darstellung automatisch verschiedene Farben zugewiesen.

clf()
Sinus=sin([0:1/1000:2]*%pi);
plot2d(Sinus)
Cosinus=cos([0:1/1000:2]*%pi);
plot2d(Cosinus)
for Amplitude=1:10
  plot2d([Amplitude*Sinus' Amplitude*Cosinus'])
end

-> Scilab Schulungen

Schreiben einer ASCII Datei (Scilab)

unser1mal1.jpgFür Dateizugriffe stehen in Scilab eine Reihe von Befehlen zur Verfügung.

Wir können mit dem fprintfMat() Befehl eine Matrix in ein Datenfile im aktuellen Datenverzeichnis schreiben, z. B.:

x=[1:10]'; z=x*x'; fprintfMat("Unser1x1.txt",z,'%5.2f');

Das Format %5.2 entspricht 5 möglichen Vorkomma- und 2 Nachkommastellen.

Im Explorer finden wir unter dem aktuellen Verzeichnis die entsprechende Textdatei “Unser1×1.txt”:

Grafikfenster strukturieren (Scilab)

Die Funktion subplot() strukturiert das Grafikfenster in verschiedene Teilfenster und adressiert das aktuelle Unterfenster, z. B.

subplot(2,2,1);

subplot.jpgDie Aufteilung erfolgt in 2 Zeilen und 2 Spalten. Adressiert wird hier Fenster 1.
Die Fenster werden in Leserichtung (von links nach rechts, Zeile für Zeile) durchnummeriert.

Der Inhalt der Fenster wird mit einem plot() Befehl nach Adressierung des Teilfensters durch subplot() übertragen.

-> Scilab Schulungen, IT Dienstleistungen

Legende neu positionieren (Scilab)

positionierung.jpgDie an der Standardposition eingeblendete Legende soll an eine andere Position verschoben werden. Dazu müssen wir Zugriff auf die Eigenschaften des Grafik-Fensters nehmen. Die Eigenschaften des Grafik-Fensters lassen sich mit dem Befehl gca() auslesen, z. B.:

Achse=gca()

und erhalten als Ergebnis die Eigenschaften und Einstellungen des aktuellen Grafik-Fensters in der Konsole ausgegeben:

achshandle.jpg

Das Pendant dazu findet sich im Axes-Editor, in dem die meisten dieser Eigenschaften dem Benutzer grafisch zur manuellen Bedienung zugänglich gemacht wurden. Im Objekt-Browser des Dialogs sehen wir auch die hierarchische Struktur des Grafikbrowsers. Combound (Grafikobjekte, Komponenten) und Legend (Legende) liegen eine Ebene tiefer als das Axes Objekt.


achs-dialog.jpg

Diese hierarchische Beziehung wird auch in der Konsolenausgabe der Achsen-Eigenschaften deutlich.

parent: Figure

children: ["Compound";"Legend"]

Combound und Axes sind die Kinder (children) des Axes-Objekts, Figure ist das dazugehörige Elternobjekt (parent). Die Begriffe stammen aus der objektorientierten Programmierung und da Scilab eine objektorientierte Programmiersprache ist, folgt der Zugriff auf die Legende durch Referenzierung auf das zweite children Objekt in dieser Form:

Legende=Achse.children(2);

Nun können die aktuellen Einstellungen und Eigenschaften des referenzierten Objekts in der Konsole ausgegeben werden.

legendehandle.jpg

Auf die Position der Legende kann nun wie folgt Einfluss genommen werden:
Legende.legend_location ="in_upper_right";
Weitere locations sind z. B:

“in_upper_right” : rechte obere Ecke im Koordinatensystem
“in_upper_left”: linke obere Ecke
“in_lower_right”: untere rechte Ecke
“in_lower_left”: untere linke Ecke
“out_upper_right”: rechte obere Ecke außerhalb des Koordinatensystems
“out_upper_left”: außen obere linke Ecke
“out_lower_right”: außen untere rechte Ecke
“out_lower_left”: außen untere linke Ecke
“upper_caption”: oberhalb der linken Ecke des Koordinatensystems
“lower_caption”: unterhalb der linken Ecke der Achsen

-> Scilab Schulungen, Programmierdienstleistungen

Plot der Funktion sinx/x - Nullstellendivision (Scilab)

kardinalsinus.jpgUm eine Funktion darzustellen, benötigt man einen Wertevorrat, sonst ist das Ergebnis der Funktionsanwendung nur ein Einzelwert. Ein sinnvoller Wertevorrat für den Sinus läuft von -pi bis pi bzw. ein Vielfaches davon. Damit die Darstellung mit ausreichender Werteanzahl aufgelöst ist: Schrittweite von 1/100.

p=3
x=[-p:1/100:p]*%pi;

y=sin(x)/x;
plot2d(x,y)

Wenn jetzt eine Fehlermeldung in der Scilab Konsole auftaucht, liegt es zunächst daran, dass wir mit y eine Vektordivision durchgeführt haben, deren Ergebnis ein Einzelwert ist. Damit kann der Grafikplot nicht durchgeführt werden. Die Durchführung eine Elementdivision wird mit einen . (punkt) codiert, also:

y=sin(x)./x;

Nun ist das Operationsergebnis korrekt. Da dabei aber eine Division durch 0 durchgeführt wird, kommt es zu einer erneuten Fehlermeldung. Diese können wir vermeiden, indem wir z.B. zuvor eine Ausnahme definieren, z. B. durch den Befehle ieee(2). Der sorgt dafür, dass die Werte, die eine Fehlermeldung produzieren auf nan gesetzt werden. Nan steht für not a number. Diese Werte werden dann nicht ausgewertet.

Alternativ können vor der Berechnung die mit find() gefundenen Nullstellen des Wertevorrats als %nan definiert werden.

Nullenstellen=find(x==0);
x(Nullenstellen)=%nan;

Jetzt funktioniert die Darstellung der Funktion problemlos!

Die versierten Mathematiker erkennen in der Funktion sin(x)/x den Kardinalsinus, für den es in Scilab die Funktion sinc() gibt. Hier verkürzt sich unser Darstellungsproblem auf diese Zeilen:

sinusK=sinc([-3:1/100:3]*%pi)
plot2d(sinusK)

-> Scilab Schulungen

Ereignisanalyse - Schwellwert (Scilab)

schwellwertuberschreitung.jpg

Für die Messdatenauswertung ein unschätzbares Werkzeug: Logikoperationen. Diese lassen sich einsetzen, um z. B. kanalübergreifende Ereignisse zu finden.

Als Beispieldatensatz generieren wir eine Sinusfunktion.

ds=[0:1/1000:1]*2*%pi;

  Sinus=sin(ds);plot2d(ds,Sinus) Es sollen alle Werte im Datensatz gefunden werden, die einen Schwellwert von 0.5 überschreiten:

Status=(Sinus>0.5);

Das Ergebnis der Operation soll wieder grafisch dargestellt werden. Da mit plot2d() aber nur Zahlenwerte dargestellt werden können, das Ergebnis einer Logischen Operation aber eine Boolesche Variable mit den Werten True und False darstellt, muss das Ergebnis erst noch in einen Vektor konvertiert werden.

Status=bool2s(Status) ;

Die Darstellung im Grafik-Fenster mit Linienfarbe rot:

plot2d(ds,Status,5)

Der find() Befehl liefert die Postionen der Werte in Sinus, die den Schwellwert überschreiten. Die dazugehörigen y-Werte des Sinus schreiben wir in einen eigenen Datenvektor, den wir uns farbig im Grafikfenster anzeigen lassen.

Positionen=find(Status);yWerte=Sinus(Positionen);plot2d(ds(Positionen),yWerte,3)

-> Scilab Schulungen

Scilab: Mehrere Datensätze im gemeinsamen Koordinatensystem darstellen

kurvenfenster.jpgAls Beispieldaten generieren wir mehrere Sinusfunktionen. Den Wertevorrat xWerte_1000 für den Sinus erhalten wir aus einem Zeilenvektor aus 1000 Werten, aufgelöst auf 2*pi/1000 Schrittweite. Die Naturkonstante Pi wird in Scilab mit %pi angegeben.

Wir erzeugen nun drei Sinusfunktionen mit unterschiedlichen Amplituden und Frequenzen. Im Signal werden die drei Funktionen überlagert.

Nun sollen alle diese Beispieldaten in demselben Koordinatensystem als unterschiedliche Kurven dargestellt werden.

Wir weisen den verschiedenen miteinander darzustellenden Datenvektoren der Variable Sinua zu. Werte, die in eckigen Klammern übergeben werden, sind immer Matrizen. Würden wir die einzelnen Datensätze einfach hintereinander schreiben, würden deren Werte alle in einer Zeile stehen und wären somit ein einziger Wertevorrat. Die Zuweisung unterschiedlicher Styles, wie Farben oder Muster, wäre so nicht möglich (da alles derselbe Datenvektor).

Deshalb nutzen wir als Trennzeichen zwischen den Datenvektoren das Apostroph ‘. Dies bewirkt das “Umbrechen” des Zeilenvektors in eine neue Spalten, d. h. für jeden Datensatz existiert nun eine eigene Spalte in der Matrix. Da alle Datensätze gleich lang sind, kann der XY-Plot über dem x-Vektor xWerte_1000 erfolgen. Ansonsten muss darauf geachtet werden, dass der Wertevorrat auf der x-Achse dem darzustellenden Datenvektoren entspricht.

Mit xtitle() werden Texte übergeben, diese können sowohl in ‘Apostroph’ als auch in normale “Anführungszeichen” gesetzt werden. Hiermit wird der Titel der Grafik, sowie die x- und y-Achsenbeschriftung gesetzt.


xWerte_1000=[0:1:1000]*2*%pi/1000;
Sinus_1Hz=sin(xWerte_1000);

Sinus_7Hz=1/10*sin(7*xWerte_1000);

Sinus_13Hz=1/20*sin(13*xWerte_1000);

Signal=Sinus_1Hz+Sinus_7Hz+Sinus_13Hz;

Sinua=[Sinus_1Hz' Sinus_7Hz' Sinus_13Hz' Signal'];

plot(xWerte_1,Sinua);

xtitle('Signalgenerierung','Zeitachse','Signale');

-> Scilab Schulungen 

|