Archiv der Kategorie Software

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 

Scilab als Auswertesoftware für Messdaten

Feature Schau ScilabScilab ist ein „Clon“ von Matlab für Anwendungen im Mathematikbereich. Eher selten wird Scilab im kommerziellen Bereich zur praktischen Messdatenanalyse eingesetzt. Dabei muss sich das auch für Firmenanwendungen kostenlose Programm in keinster Weise hinter den teuer erkauften professionellen Anwendungen verstecken.
Der Vorteil von Open Source ermöglicht im Gegenteil benutzerindividuelle Anpassungen und Programmerweiterungen, da alle Schnittstellen und der Source Code offengelegt sind. Dies wiederum bedeutet aber auch, dass Software, die auf diesem Programm fusst, ebenfalls wieder als Open Source, also kostenlos, zur Verfügung gestellt werden muss.

Kurzcheck: Funktionen, Datenvisualisierung

Einen Vergleich mit der Signalanalyse Software FAMOS in Hinblick auf Funktionsumfang und Features im Kurvenfenster muss Scilab nicht fürchten. Im Gegenteil FAMOS bietet ca. 400 Funktionen, Scilab kommt inzwischen auf über 1000 Funktionen, darunter Features wie:

  • Matrizenrechnung
  • Objekte, Objektdefinitionen, Objektverwaltungen
  • komplexe Strukturen
  • Polynome
  • symbolisches Rechnen
  • Vektorenrechnung (Skalarprodukt, Vektorensuche)
  • offen gelegte Schnittstellen
  • Anbindung an LateX (prinzipiell jede beliebe Dokumentstruktur: Druckbilder)
  • Umfangreiche Toolboxen (z. B. Imageprozessing: ermöglicht u. a. Kantensuche in der Bildverarbeitung)
  • Binärvergleiche (logische Vergleiche auf Datensatzebene)
  • Reguläre Ausdrücke (sehr mächtiges, hocheffizientes „Programmierwerkzeug“ im Hinblick z. B. für die Programmierung von Einlesefilter für unterschiedliche Datenformate)
  • Variablenfenster
  • Erstellung eigener Oberflächen
  • Animation und Simulation
  • CACSD (Computer Aided Control System Design)

Erstellung eigener Benutzeroberflächen
Aus Demo: Erstellung eigener Benutzeroberflächen

Das Grafikfenster von Scilab bietet alle Freiheitsgrade und Möglichkeiten, z. B.:

  • Anzeige von Fehlerbalken
  • Freie Positionierung von Texten, Markern
  • Farbkarten
  • Isolinien
  • Darstellung von Bode-Diagrammen, Nyquist-Darstellung
  • 3D Darstellungen
  • 3D Animationen
  • Vektorfelder
  • Histogramme
  • Freie Definition von Ticks usw.

Grafikfenster mit Achsendialog
Demo: Grafikfenster mit Achsen-Eigenschaftendialog

Hürden für den Praktiker

Die erste Hürde für den Endanwender ist den Überblick über die umfangreichen Funktionen und deren korrekte Anwendung zu erhalten. Eine Einarbeitung in das z. B. für Famos Anwender wohl „kryptischere“ Programmierkonzept kann langwierig und frustierend sein (da es sich dabei um einen Matlab Clon handelt, stellt der Umstieg vom Matlab nach Scilab kaum ein Problem dar).

Die zweite Hürde besteht darin, „echte“ Messdaten von bestehenden Messsystemen nach Scilab zu importieren. Über ASCII können diese eingelesen werden. Im Prinzip kann für Scilab der Import jeglicher entsprechender Dateiformate realisiert werden.

Die dritte Hürde besteht in der akademischen Herkunft des Programmes. Das Problem liegt hier erst mal in der unterschiedlichen Herangehensweise, dem Auffinden vergleichbarer Befehle, bzw. dem exakten Formulieren der mathematischen Auswertealgorithmen. Es setzt auf jeden Fall gute mathematische und physikalische Kenntnisse voraus, denn für reale Messdaten ist die Herangehensweise einer Auswertung natürlich etwas anders als für rein mathematische Probleme.
Man muss viel genauer wissen, was man aus den Daten eigentlich herauskitzeln will und wie eine mathematisch und syntaxtechnisch richtige Formulierung in Scilab lautet. Für den praktischen Anwender, der sich nicht oder nicht mehr mit akademischen Fragen auseinandersetzen möchte, sondern schnell Antworten braucht, kann das frustierend sein.

Die Vorteile von Signalanalyseprogrammen wie FAMOS, Dasylab oder Flexpro liegen hier auf der Hand:
Für den Praktiker kann das Auffinden der richtigen Auswertelösung viel einfacher „erspielt“ werden. Befehle wie Alle0(), xMaxi() usw. (FAMOS) erleichtern die Auswertearbeit ungemein. Umfangreiche Hilfen bieten Unterstützung. Doch auch hier ist ein Grundverständnis der Programmphilosophie und die Kenntnis der wichtigsten Befehle und Sequenz unumgänglich. Die Bedienoberfläche ist für Windowsanwender intuitiver und erleichert sicherlich die Akzeptanz mit dem Produkt zu arbeiten. Die Einarbeitungszeit für sporadische Nutzer hält sich mit qualifizierten Schulungen in Grenzen.

Wie löst man signalanalytische Probleme mit Scilab?

Alle Auswertesequenzen für Messdaten lassen sich natürlich auch mit Scilab umsetzen!
Aber der Anwender muss sattelfest in der theoretischen Materie sein und u. U. mehrere mathematische Operationen mit den richtigen Parametern ausführen lassen, um dann zu einem vergleichbaren Ergebnis zu kommen. Doch diese Auswertealgorithmen müssen auch hier nur einmal realisiert werden, lassen sich dann in eigene Funktionen ableiten und können danach ebenfalls einfach angewendet werden.
Eigene Oberflächen für Auswertungen (vgl. Dialogeditor FAMOS) lassen sich mit den GUI Funktionen erzeugen. Nach der Einarbeitung in das Programm und ausreichende Kenntnis über Programmsyntax und Funktionen überzeugen die schier unbegrenzten Möglichkeiten.

Was nicht passt, wird passend gemacht!

Open Source bedeutet jeder kann Erweiterungen, Funktionen, Anwendungsergänzungen nach Belieben erstellen und hat Zugriff auf den ursprünglichen Code.
Wer Kosten sparen will und dabei auf überdurchschnittliche Leistung nicht verzichten möchte, ist mit Scilab z. B. auch als Signalanalysewerkzeug gut beraten. Die Kosten für Einarbeitung, evtl. Anpassung und Umsetzung bestehender Projekte in Scilab sind ggfs. mit einmaligen finanziellen Aufwand für Dienstleistungen wie Schulung und Programmierarbeit abgegolten, während das eigentliche Softwareprodukt einer permanenten Verbesserung in Funktionsumfang und stetigen Erweiterungen unterliegt..

Das Scilab als Freeware kein mathematisches „Spielzeug“ ist, beweist allein die Liste der professionellen Anwender. Firmen wie EADS, Peugeot, Renault gehören mit zum Konsortium, die sich an der Weiterentwicklung des Programmes maßgeblich beteiligen.

www.scilab.org

Fazit: Uns begeistert Scilab.

Als unabhängiger Dienstleister beraten Sie gerne über die entsprechenden Einsatzmöglichkeiten von Scilab und helfen Ihnen bei der Umsetzung eigener Projekte in Scilab oder bei der schnellen Einarbeitung mit speziell auf Ihren Anwendungsbereich abgestimmten professionellen Schulungen.

Unsere Dienstleistungen:

Schulungen, z. B. Messdatenanalyse mit Scilab,
Erstellung von Einlesefiltern, Umsetzung bestehender Auswerteprogramme in Scilab, Erstellung von Prüfstandssoftware

Fragen Sie uns. Mit ELEXON ist fast alles möglich.

 

|