22
matlab.tex KB 20010929 MATLAB 1 – der Name steht als Abkürzung für Matrix Laboratory – war ur- sprünglich konzipiert als einfache Skriptumgebung (Frontend ) zur Benutzung der Mathematik-Pakete LINPACK [1] und EISPACK [2], die für das Rechnen mit Matrizen entwickelt worden waren. Inzwischen sind diese Pakete weitge- hend durch LAPACK [3] ersetzt, das jetzt auch die Basis von MATLAB bildet. Heute ist MATLAB – aktuell in der Version 6.1 (Release 12.1) – ein sehr um- fangreiches und komplexes Programmsystem, das kommerziell ständig weiter- entwickelt wird. Für viele Bereiche, insbesondere auch für industrielle Anwen- dungen, wurden spezialisierte Zusatzpakete (Toolboxes) entwickelt, so für Si- gnalverarbeitung und -analyse, Regelung, Simulation, nichtlineare Optimierung. Über seine Möglichkeiten in der Numerik hinaus bietet MATLAB eine Fülle von Funktionen zur Datenvisualisierung [4], zur Erstellung von graphischen Benut- zeroberflächen (GUI ) sowie zur Anbindung von Messgeräten über Standard- schnittstellen oder geeignete Zusatzprogramme. Insbesondere diese inzwischen weit über das ursprüngliche Konzept hinaus gehenden Erweiterungen machen MATLAB zu einer idealen Arbeitsumgebung im Praktikum. 1 MATLAB ist ein eingetragenes Warenzeichen von The MathWorks Inc.

Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

  • Upload
    hacong

  • View
    228

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

FACHBEREICH PHYSIKElektronikPraktikum

Messen mit MATLAB matlab.tex KB 20010929

MATLAB1 – der Name steht als Abkürzung für Matrix Laboratory – war ur-sprünglich konzipiert als einfache Skriptumgebung (Frontend) zur Benutzungder Mathematik-Pakete LINPACK [1] und EISPACK [2], die für das Rechnenmit Matrizen entwickelt worden waren. Inzwischen sind diese Pakete weitge-hend durch LAPACK [3] ersetzt, das jetzt auch die Basis von MATLAB bildet.Heute ist MATLAB – aktuell in der Version 6.1 (Release 12.1) – ein sehr um-fangreiches und komplexes Programmsystem, das kommerziell ständig weiter-entwickelt wird. Für viele Bereiche, insbesondere auch für industrielle Anwen-dungen, wurden spezialisierte Zusatzpakete (Toolboxes) entwickelt, so für Si-gnalverarbeitung und -analyse, Regelung, Simulation, nichtlineare Optimierung.Über seine Möglichkeiten in der Numerik hinaus bietet MATLAB eine Fülle vonFunktionen zur Datenvisualisierung [4], zur Erstellung von graphischen Benut-zeroberflächen (GUI) sowie zur Anbindung von Messgeräten über Standard-schnittstellen oder geeignete Zusatzprogramme. Insbesondere diese inzwischenweit über das ursprüngliche Konzept hinaus gehenden Erweiterungen machenMATLAB zu einer idealen Arbeitsumgebung im Praktikum.

1 MATLABr ist ein eingetragenes Warenzeichen von The MathWorks Inc.

Page 2: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

2 Elektronik–Praktikum Physik

Inhaltsverzeichnis

1 Ziele 3

2 MATLAB – kein Tutorial 3

2.1 Datenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.2 Operatoren und Funktionen . . . . . . . . . . . . . . . . . . . . . . 6

2.3 M-Files – Skripte und Funktionen . . . . . . . . . . . . . . . . . . . 7

2.4 Visualisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.5 Dateiformate für Daten . . . . . . . . . . . . . . . . . . . . . . . . . 10

3 MATLAB als Messumgebung 11

3.1 Serielle Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3.2 Java, Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.3 Externe Programme . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.4 MEX-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.5 MATLAB als ‘Engine’ . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.6 Graphische Benutzeroberflächen . . . . . . . . . . . . . . . . . . . 13

4 Messgeräte 16

4.1 Funktionsgenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4.2 Oszilloskop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4.3 Mess- und Steuergerät . . . . . . . . . . . . . . . . . . . . . . . . . 19

5 Aufgaben 21

Literatur und Links 22

Page 3: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

Messen mit MATLAB 3

1 Ziele

• Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate,

• Visualisierung von Daten mit MATLAB, einfache Plotfunktionen, HandleGraphics, PostScript-Dateien (EPS),

• Serielle Schnittstellen unter MATLAB,

• MATLAB und Java, Ethernet-Schnittstelle,

• Graphische Benutzeroberflächen (GUI) in MATLAB,

• Betrieb der Messgeräte: Funktionsgenerator, Oszilloskop, Mess- und Steu-ergerät,

• Einfache Messungen: Widerstand, Tiefpass.

2 MATLAB – kein Tutorial

Zu MATLAB gibt es eine ganze Reihe von Büchern, meist werden darin – nacheiner kurzen Einführung in MATLAB – Numerik-Anwendungen behandelt [5]. Aufverschiedenen Servern sind einführende Online-Skripten zu finden, so beispiels-weise an der Southern Illinois University [6], der Uni Hamburg [7] oder an der UniKarlsruhe [8], letzteres mit vielen Links auf andere MATLAB-Tutorials. Ab Versi-on 6 (Release 12) ist die Online-Hilfe gegenüber früheren Versionen deutlichverbessert, bei vielen Fragen und Problemen kann man dort mit der Suche be-ginnen. Zum Einstieg in MATLAB ist der Menüpunkt (im MATLAB-Hauptfenster)

Help --> MATLAB Help --> Learning MATLAB ...

empfehlenswert. Darüber hinaus sind im Lieferumfang von MATLAB eine größe-re Zahl von Demos enthalten, an denen man sich die MATLAB-Syntax ansehenkann.

2.1 Datenstrukturen

MATLAB wurde zum Rechnen mit Feldern entwickelt, der Standardvariablentypist das zweidimensionales Feld (Matrix) mit komplexen, doppelt genauen Ele-menten. Eindimensionale Felder (Vektoren) und Skalare sind in MATLAB immernur als eingeschränkte Spezialfälle des Standardtyps zu sehen. Um bei spei-cherintensiven Anwendungen (Bildverarbeitung u. ä.) Platz zu sparen, könnenauch Variablen mit niedrigerer Genauigkeit ( uint8 , uint16 , int8 , . . . ) ver-wendet werden, diese aber mit (derzeit noch) sehr reduzierten Rechenmöglich-keiten.

Weitere Datentypen Neben den zweidimensionalen Feldern kennt MATLABauch Felder mit mehr als zwei Dimensionen, Felder, deren Elemente wiederum(unterschiedlich große) Felder sind, sowie dünn besetzte Matrizen als weitereTypen. Näheres dazu finden Sie in der Online-Hilfe unter den Stichworten multi-dimensional arrays, cell arrays sowie sparse matrix.

Page 4: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

4 Elektronik–Praktikum Physik

Initialisierung von Daten Als Numerikprogramm benötigt MATLAB seine Va-riablen in diskretisierter Form – als Vektoren, Matrizen oder höherdimensionaleFelder mit gleichartigen Elementen, um damit zu rechnen oder um Parameter(unabhängige Variable) bei einer Messung vorzugeben. Um solche Datenstruk-turen einfach erstellen zu können, enthält MATLAB verschiedene Konstrukte.

Eckige Klammern können verwendet werden, um Werte zu einem Feld zusam-[ , ] [ ; ]menzupacken:

a = [0.1,0.3,0.5,0.7];

definiert einen Zeilenvektor mit vier Elementen (Komma als Trenner),

a = [0.1;0.3;0.5;0.7];

dagegen einen Spaltenvektor (Semikolon als Trenner),

a = [1,3,5,7;2,4,6,8];

eine Matrix mit zwei Zeilen und vier Spalten.

Um Zeilenvektoren aus äquidistanten Werten zu erzeugen, ist der Doppelpunkt-:-OperatorOperator nützlich. Die Syntax dafür ist

<Startwert> : <Schrittweite> : <Endwert>

oder (Schrittweite 1 !)

<Startwert> : <Endwert> .

Den obigen Zeilenvektor könnte man somit auch mit

a = 0.1:0.2:0.7; oder a = [0.1:0.2:0.7];

die obige Matrix mit

a = [1:2:7;2:2:8];

bereitstellen.

Ähnlich wie der Doppelpunkt-Operator arbeitet die Funktion linspace , stattlinspaceeiner Schrittweite ist die Werteanzahl anzugeben:

a = linspace(0.1,0.7,4);

würde ebenfalls den obigen Zeilenvektor erstellen.

Eine logarithmisch äquidistante Wertefolge – nützlich für Messungen mit ei-logspacener logarithmischen x-Achse (Frequenz) – erhält man mit logspace , stattAnfangs- und Endwert wird der jeweilige Exponent (Basis 10) angegeben:

a = logspace(0,2,5);

erstellt den Zeilenvektor

1.0000 3.1623 10.0000 31.6228 100.0000 .

Die einzelnen Elemente innerhalb der eckigen Klammern können ihrerseits wie-[[.],.]der Felder sein, auf diese Weise kann man einen Vektor aus Messwerten wäh-rend einer Messung dynamisch erweitern, ohne eine Indexvariable zu verwen-den:

current = [];

Page 5: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

Messen mit MATLAB 5

voltage = [];while <CONDITION>

[cmeas,vmeas] = one_measurement_function;current = [current,cmeas];voltage = [voltage,vmeas];

end;

würde eine Messung mit zunächst unbestimmter Anzahl von Messwerten rea-lisieren. Gestartet wird mit leeren Vektoren ([] ), die solange durch Messwerteerweitert werden, wie die Bedingung wahr ist (zur Syntax von Funktionsaufrufenvgl. 2.3).

Mit eckigen Klammern ist man auf zweidimensionale Felder beschränkt (Kommacatund Semikolon für Zeilen und Spalten), ähnlich wie die Klammern arbeitet dieMATLAB-Funktion cat , die nicht in dieser Weise beschränkt ist (Online-Hilfecat).

Indizes Generell sollte man es bei MATLAB vermeiden, mit einzelnen Feld-elementen zu rechnen, da das Programm nur beim Rechnen mit Feldern effi-zient arbeitet, bei Einzelelementen, Programmschleifen usw. zeigt sich deutlichder Geschwindigkeitsnachteil eines Interpretersystems. In Messanwendungenmuss man jedoch bisweilen von diesem Prinzip abgehen, da Messgeräte in derRegel keine Datenfelder abliefern sondern nur einzelne Messwerte.

Ein Einzelelement aus einem Feld A wird mit A(m,n,..) ausgewählt, dabeiist m die Zeilen-, n die Spaltennummer. Im Gegensatz zu fast allen modernenProgrammiersprachen beginnt die Zählung – Fortran lässt grüßen – bei 1.

Man kann mehrere Feldelemente gleichzeitig auswählen, indem man für die In-dizes geeignete Zeilenvektoren verwendet. Dadurch können Teilbereiche ausFeldern kopiert, umgerechnet oder mit Werten besetzt werden.

Ein Zeilenvektor aus 20 Elementen, bei dem alle mit geradzahligem Index 1, allemit ungeradzahligem 0 sind, könnte mit

A(2:2:20) = 1;

erstellt werden (bei der Erstellung werden dazwischen liegende, nicht initialisier-te Elemente auf 0 gesetzt).

Die punktweise Ableitung des Vektors (Differenzen aufeinanderfolgender Werte)liefert:

deltaA = A(2:20) - A(1:19); .

Einzelne Werte aus einem Feld könnten mit

B = A([1,4,5,8]);

in ein kleineres Feld B umkopiert werden.

Teilbereiche eines Feld löschen könnte man mit

A(11:20) = []; oder A(1:2:19) = [] .

Für bestimmte Indizes gibt es Abkürzungen, mit einem Doppelpunkt ohne wei-

Page 6: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

6 Elektronik–Praktikum Physik

tere Parameter sind alle gemeint, mit end der jeweils größte. Alle Elemente derletzten Spalte einer Matrix würde man also mit

B = A(:,end);

der Variablen B zuweisen.

Speicher-Management Variablen brauchen vor ihrer Initialisierung nicht de-klariert zu werden, um etwa Speicher dafür zu reservieren. Das wird bei derInitialisierung automatisch erledigt. Datenfelder können beliebig wachsen oderschrumpfen, indem Bereiche zusätzlich initialisiert werden oder Teilbereiche mit[] verworfen werden (s. o.). Bei Messanwendungen ist eine solche dynami-sche Handhabung der Feldgröße in der Regel unproblematisch, bei Numerik-Anwendungen ist es aus Geschwindigkeitsgründen dagegen meist zweckmäßig,die benötigte Feldgröße bei der ersten Initialisierung fest einzustellen.

Um Variablen endgültig aus dem Speicher zu entfernen, verwendet man dieAnweisung clear , wenn alle, bzw. clear x y , wenn einzelne Variablencleargemeint sind.

Welche Variablen aktuell im Speicher sind, erfährt man mit who oder – aus-whoführlicher – mit whos. Die Größe von Feldern erfragt man mit size , so gibtsizesize(A,2) die Größe von A in der 2. Dimension an (Anzahl der Spalten).

2.2 Operatoren und Funktionen

Alle Operatoren und die eingebauten Funktionen setzen als Operanden zweidi-mensionale Felder voraus und sind grundsätzlich dafür passend implementiert.So geht die Multiplikation mit ‘* ’ davon aus, dass man eine Matrixmultiplika-*-Operatortion wünscht. Eine elementweise Multiplikation von Feldern muss man etwaskomplizierter – mit ‘.* ’ – anordnen. Entsprechendes gilt für die Division. Un-.*-Operatorproblematisch (beide Schreibweisen liefern das gleiche Ergebnis) sind dagegenAddition und Subtraktion, ebenso Multiplikation oder Division mit Skalaren.

Bei allen binären Operatoren müssen die Dimensionen der Operanden zuein-ander passen, so können Felder nur dann addiert werden, wenn sie gleich großsind oder mindestens eins ein Skalar ist.

Oft muss man Vektoren oder Matrizen transponieren, damit sie in der richtigenForm sind, dafür hat MATLAB die Funktion transpose bzw. deren Kurzform‘.’ ’. So wird mit B = A.’ aus A die entsprechende transponierte Matrix B.’-Operatoroder aus einem Zeilenvektor ein Spaltenvektor und umgekehrt.

Funktionen, die skalaren Charakter haben, sind in MATLAB sinngemäß auf Fel-der erweitert. So werden sin oder exp elementweise berechnet, das Funkti-onsergebnis hat exakt die gleiche Feldgröße wie das Funktionsargument.

Außer den skalaren Funktionen bietet MATLAB eine Fülle von spezialisiertenMatrix-Funktionen. Eine Auflistung der MATLAB-Funktionen liefern u. a. die Auf-rufe:

help elmat (Elementary matrices and matrix manipulation),help elfun (Elementary math functions),

Page 7: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

Messen mit MATLAB 7

help specfun (Specialized math functions),help matfun (Matrix functions - numerical linear algebra),help datafun (Data analysis and Fourier transforms),help polyfun (Interpolation and polynomials),help funfun (Function functions and ODE solvers)

am MATLAB-Befehlsprompt. Nähere Informationen zu den einzelnen Funktio-nen erhält man dann durch weitere help –Aufrufe ( help sin ) oder – um-fangreicher und freundlicher formatiert – in der Online-Hilfe.

2.3 M-Files – Skripte und Funktionen

MATLAB arbeitet als Interpreter, am Befehlsprompt eingegebene Anweisungenwerden sofort ausgeführt, das Resultat erscheint zeitnah. Frühere Anweisungs-zeilen können mit den Cursor-Tasten wieder an den Befehlsprompt zurückgeholtund ediert werden oder durch Anklicken im History-Fenster ungeändert noch-mals ausgeführt werden.

M-Files Trotz dieses Bedienungskomforts auf Befehlszeilenebene sollte mansich angewöhnen, MATLAB-Abläufe in Text-Dateien – M-Files – abzulegen.

Der MATLAB-eigene Editor wird aus dem MATLAB-Hauptfenster mit

File --> New --> M-File

aufgerufen.

Einzelne MATLAB-Anweisungen werden durch ein (oder auch mehrere) Semi-kolon, Komma oder Zeilenende beendet und voneinander getrennt. Semikolonnach einer Anweisung unterdrückt die zugehörige Ausgabe.

Lange Zeilen können in der Folgezeile fortgesetzt werden, die Fortsetzungsan-weisung am Zeilenende sind drei aufeinanderfolgende Punkte ( ... ).

Kommentare beginnt man mit einem Prozentzeichen ( %), der Rest der Zeile istdann Kommentar.

Die in der Text-Datei abgelegte Anweisungsfolge kann innerhalb des Editorsschrittweise ( Taste F10 ) oder komplett ( Taste F5 ) getestet werden, dabeisind umfangreiche Debug-Möglichkeiten vorgesehen.

Aus MATLAB (oder auch aus anderen M-Files) werden die fertigen Programm-sequenzen durch Eingabe des Dateinamens des M-Files (ohne die Erweiterung.m ) aufgerufen.

Skripte Die einfachste Form von M-Files sind Skripte, eine Folge von Anwei-sungen, die im globalen Rahmen (global scope) ausgeführt werden. Alle Skript-Variablen sind global, alle globalen Variablen sind im Skript sichtbar. Das Skriptdient nur dazu, eine Anweisungsfolge wiederverwendbar zu einem ‘Programm’zusammenzufassen.

Page 8: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

8 Elektronik–Praktikum Physik

Funktionen Zusätzliche Möglichkeiten bieten Funktions-M-Files. Wie bei an-deren Programmiersprachen können an die Funktion Parameter übergeben undResultate zurückgegeben werden. Alle Variablen in Funktionen sind grundsätz-lich lokal und dynamisch (Ausnahmen durch die Anweisungen global undpersistent ). Gekennzeichnet werden Funktionen durch das Schlüsselwortfunction , das die erste Anweisung des M-Files sein muss. Die Parameter-übergabe erfolgt nach dem Schema

function [x, y] = userfunc (a, b) .

Die rechte Parameterliste definiert die formalen Eingabeparameter a und b,die linke die Ausgabeparameter x und y . Alle Namen (auch userfunc ) sindnur lokal, innerhalb der Funktion, gültig. Den Ausgabeparametern müssen in-nerhalb der Funktion Werte zugewiesen werden, die Eingabeparameter können(müssen nicht) innerhalb der Funktion verwendet werden.

Aus MATLAB wird die Funktion unter dem Namen des M-Files aufgerufen:

[v, w] = mfilename (r, s); .

Die Parameterlisten können beim Aufruf kürzer sein als in der Funktionsdefini-tion, fehlende Ausgabewerte werden verworfen, fehlende Eingabewerte solltendurch Voreinstellungen abgefangen werden, etwa wie folgt:

function [x, y] = userfunc (a, b)if nargin<2, b=0; end;if nargin<1, a=0; end; .

Die Variable nargin enthält die tatsächliche Anzahl der Eingabeparameterbeim Funktionsaufruf. Entsprechend kann man mit nargout die Zahl der an-geforderten Ausgabeparameter feststellen und gegebenenfalls davon abhängi-ge Rückgabewerte produzieren.

Eine Typenüberprüfung findet bei der Parameterübergabe nicht statt, wie in MAT-LAB üblich, sind alle Variablen grundsätzlich zweidimensionale Felder. Wenn nö-tig, kann man den Typ eines Übergabeparameters innerhalb der Funktion fest-stellen, z. B. mit isnumeric oder mit ischar , und passend reagieren.

Innerhalb eines Funktions-M-Files können weitere Funktionen definiert werden,diese sind aber nur lokal, im M-File, sichtbar. Man sollte diese Möglichkeit zursinnvollen Strukturierung nutzen (Vermeidung von Spaghetti-Code). Eine Funk-tion zur Messung einer Frequenzabhängigkeit könnte mithin aus dem folgendenGerüst bestehen:

function [freq, int] = freq_char(loglo, loghi, points)% measure frequency characteristics, log scale

if nargin<3, points=50; end;if nargin<2, usage; return; end;if nargout~=2, usage; return; end;freq = logspace(loglo, loghi, points);int = [];for x = freq

setfrequency(x);int = [int, getdata];

Page 9: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

Messen mit MATLAB 9

end;% local subfunctionsfunction usage

disp(’...’);...

function setfrequency(x)...

function y = getdata...

Alle Detailabläufe sind in lokale Unterfunktionen ausgegliedert, dadurch wird dieHauptfunktion kurz und übersichtlich. Bei länger dauernden Messabläufen sollteman innerhalb der for –Schleife den Benutzer über den Stand der Messunginformieren (plotten der Daten, Textausgabe o. ä.).

Funktionen können selbstverständlich auch rekursiv verwendet werden, als Bei-spiel die stets beliebte Berechnung der Fakultät, in MATLAB natürlich für Felder:

function y = fac(x)y = (x<=0);if ~isempty(find(x>0))

y = y + x.*fac(x-1);end; .

Es wurde – was meist zweckmäßig ist – für den M-File der gleiche Name wie fürdie Funktion gewählt ( fac.m ), das macht die rekursive Verwendung klarer.

Der MATLAB-Aufruf fac([1:5;6:10]) der Funktion liefert erwartungsgemäß

1 2 6 24 120720 5040 40320 362880 3628800 .

Versuchen Sie die Besonderheiten zu verstehen, die sich dadurch ergeben,dass das Funktionsargument n ein Feld sein kann.

2.4 Visualisierung

Für die meisten Anwendungen im Elektronik-Praktikum ist eine zweidimensio-nale Darstellung der Messdaten ausreichend. Eine Liste der für diesem Bereichzuständigen MATLAB-Funktionen erhält man durch die Hilferufe

help graphics und help graph2d .

Die wichtigste Plotfunktion ist plot , sie wird aufgerufen mit den darzustellen-den Daten als Parametern, z. B. gleich großen Vektoren für die Abszissen- undOrdinatenwerte einer Messkurve. Die Darstellung der mit der Funktion freq_chardes vorstehenden Abschnitts gemessenen Frequenzcharakteristik könnte mithindurch

h = plot(freq, int);

erledigt werden. Mit der Handle h kann man nachträglich Eigenschaften derdargestellten Kurve einstellen, get(h) lieferte eine Liste der einstellbaren Ei-genschaften, set(h) zeigt die aktuellen Einstellungen an. Für Linienbreite undFarbe würde man mit

Page 10: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

10 Elektronik–Praktikum Physik

set(h, ’Linewidth’, 2, ’Color’, [0 0 0.5]);

2 Points (1 Point = 1/72 Zoll) und dunkelblau anordnen.

Mehrere Messkurven in einem Bild realisiert man am einfachsten durch mehrereplot –Anweisungen; mit der Anweisung hold on nach der ersten verhindertman, dass vorhergehende Kurven gelöscht werden. Will man darüber hinausunterschiedliche Ordinatenachsen an der linken und rechten Seite des Plots,verwendet man plotyy .

Für die Koordinaten ist ein Axes–Objekt zuständig, dessen Handle man sichmit gca verschaffen kann, für das Gesamtbild ein Figure–Objekt ( gcf ). Einelogarithmische Frequenzachse würde man mit

set(gca, ’XScale’, ’log’);

einstellen.

Mehr zu den 2D- und 3D-Graphik-Möglichkeiten in MATLAB sowie zum Konzeptder Handle–Graphics finden Sie in den Handbüchern und der Online-Hilfe zuMATLAB sowie im Skriptum zur Vorlesung Graphik-Workshop [4].

2.5 Dateiformate für Daten

MATLAB kann eine ganze Anzahl von Dateiformaten direkt erstellen und lesen,daneben sind verschiedene Funktionen implementiert, mit denen die Ein- undAusgabe sehr flexibel gesteuert werden kann. Reicht dies alles nicht aus, sobleibt noch die Möglichkeit, eigene Funktionen in C/C++, Fortran oder Java zuimplementieren.

SAVE und LOAD Die Standardfunktionen zum Schreiben und Lesen von Da-ten sind save und load . Ohne Argumente speichert save alle Variablender aktuellen MATLAB-Sitzung binär in der Datei matlab.mat , mit loadwird diese Datei wieder gelesen, die Variablen werden wiederhergestellt. DurchArgumente kann man bei save den Namen der Datei, die zu speicherndenVariablen, die Formatierung und die Datengenauigkeit vorgeben. So werden mit

save <fname> X Y Z

die Variablen (Matrizen) X, Y und Z in der Datei <fname> im MATLAB-eigenen Datenformat gespeichert, mit

save <fname> Z -ASCII -DOUBLE

wird MATLAB angewiesen, Z in Textformat mit hoher Genauigkeit (16-stellig) zuspeichern. Bei Textdateien (Option -ASCII ) ist es meist nicht sinnvoll, mehre-re Datenfelder anzugeben, da die Matrizen nacheinander geschrieben werden,ohne dass die Größe und der Variablenname vermerkt werden. Dies kann beimWiedereinlesen Probleme machen, insbesondere dann, wenn die Spaltenan-zahl der Matrizen unterschiedlich ist. Will man – wie bei Messdaten üblich – alsSpaltenvektoren vorliegende Messwerte tabellenartig schreiben, muss man siein MATLAB vorher zu einer Matrix zusammensetzen ( Z = [X,Y] ).

In ähnliche Weise lassen sich auch bei load nähere Spezifikationen angeben.

Page 11: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

Messen mit MATLAB 11

load <fname>

liest die Datei <fname> . Ohne Dateinamenerweiterung oder mit .MAT als Er-weiterung geht MATLAB von binärem MATLAB-Format aus, ansonsten von Text-format. Bei Binärdateien werden die Daten unter ihren ursprünglichen Namenwiederhergestellt, durch Angabe von einzelnen Variablennamen als Parameterkann man load auf diese einschränken. Handelt es sich um eine Textdatei,wird der Inhalt in der Matrix <fname> abgelegt. Durch Verwendung der funk-tionalen Form kann man das ändern. So können durch Leerzeichen getrennteZahlen aus einer Textdatei test.dat mit

Z = load(’test.dat’)

in die Matrix Z gelesen werden. Deren Spalten- und Zeilenzahl entspricht derAnordnung der Daten in der Textdatei.

Weitere Formate Ein Überblick über weitere Dateiformate, die in MATLABzum Austausch von Messdaten mit anderen Programmen verwendet werdenkönnen, ist im Skriptum zur Vorlesung Graphik-Workshop [4] enthalten. Infor-mationen dazu findet man auch in der MATLAB-Hilfe mit help fileformatsund help iofun .

3 MATLAB als Messumgebung

Messgeräte können von MATLAB aus auf unterschiedliche Weise angesprochenwerden. Ein Teil der PC-Hardware lässt sich von MATLAB aus direkt program-mieren, so die seriellen und die Druckerschnittstellen. Die Ethernet-Schnittstelledes Rechners kann über Java-Funktionen zur Datenübertragung genutzt wer-den. Darüber hinaus ist die Funktionalität von MATLAB durch C/C++- oder Fortran-Programme erweiterbar (MEX-Funktionen).

3.1 Serielle Schnittstelle

Serielle Verbindungen sind die vom Leitungs- und Programmieraufwand hereinfachsten genormten 2-Punkt-Verbindungen in der DV-Technik. Bei fast allenMessgeräten gehört diese einfache und preisgünstige Schnittstelle daher zurStandardausstattung. Am PC sind in der Regel zwei dieser Schnittstellen vor-handen und meist auch frei benutzbar. Die neueren Versionen von MATLABkönnen mit den seriellen Schnittstellen direkt arbeiten, ohne dass irgendwelcheErweiterungen (ActiveX o. ä.) benötigt werden.

Die MATLAB-Funktion serial erstellt ein Objekt für die serielle Schnittstelle;so wird mit der Anweisung

S1 = serial(’COM1’, ’BaudRate’, 9600);

unter Windows bzw. mit

S1 = serial(’/dev/ttyS0’, ’BaudRate’, 9600);

unter Linux die erste serielle Schnittstelle als Objekt etabliert, auf das mit S1zugegriffen werden kann. Die Geschwindigkeit wird auf 9600 Baud eingestellt.S1 wird dann ähnlich wie ein Datei-Objekt weiter verwendet. Nach fopen(S1)

Page 12: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

12 Elektronik–Praktikum Physik

können Daten in binärer Form mit fwrite(S1,...) oder als formatierterText mit fprintf(S1,...) ausgegeben und mit x=fread(S1,...) oderx=fscanf(S1) gelesen werden. Weitere Schnittstelleneigenschaften werdenmit set(S1,’<Property>’,’<Value>’,...) oder mit der dazu äquiva-lenten Punktnotation S1.<Property>=<Value> eingestellt, fclose(S1)schließlich beendet die Verbindung.

3.2 Java, Ethernet

Die Ethernet-Schnittstelle des Rechners kann von MATLAB aus über die virtuel-le Java-Maschine2 genutzt werden. Für Netzwerk-Verbindungen ist das Packagejava.net zuständig, das explizit importiert werden muss.

Ein MATLAB-Skript für einen Ethernet-Client, der an den Server ipc1 zumTCPIP-Port 1234 eine Zeichenfolge sendStr schickt und die Zeile recvStrempfängt, könnte somit etwa diese Anweisungen enthalten:

import java.net.*socket = java.net.Socket ...

(’ipc1.physik.uni-osnabrueck.de’, 1234);str = java.lang.String(sendStr);out = socket.getOutputStream;out.write(str.getBytes);in = socket.getInputStream;isr = java.io.InputStreamReader(in);ibr = java.io.BufferedReader(isr);recvStr = ibr.readLine;socket.close; .

Die Verbindung wird mit dem Socket –Objekt etabliert, mit der write –Methodedes zugehörigen OutputStream wird die Anfrage abgeschickt. Die Antwortwird mit dem InputStream gelesen, dem ein BufferedReader angehängtwurde, um bequem mit readLine lesen zu können.

3.3 Externe Programme

Sollen – von MATLAB aus gesehen – nur einfache Aktionen angestoßen werden,ohne dass Informationen zurückgeliefert werden, kann man das über ein exter-nes Programm erledigen, dem die benötigten Parameter in der Kommandozeileübergeben werden. Ein C++-Programm epson , das etwa folgende main –Funktion enthält

int main(int argc, char* argv[]) pos = atoi(argv[1]);CEpson fx;fx.Position(pos);... ,

2 Die neueren Versionen von MATLAB (in Release 11 inoffiziell und rudimentär, ab Release 12offiziell) stellen ein Software-Interface zur Java Virtual Machine des Rechners bereit, über daseinerseits komplette Java-Programme in MATLAB eingebunden werden können, andererseitsaber auch einzelne Java-Anweisungen an die VM geschickt werden können.

Page 13: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

Messen mit MATLAB 13

könnte aus MATLAB mit

Position = 40;eval([’!epson ’ num2str(Position)]);

aufgerufen werden ( eval ermöglicht variable Parameter beim Aufruf einesexternen Programms mit ‘! ’ ).

3.4 MEX-Funktionen

Von MATLAB aufrufbare C/C++- oder Fortran-Subroutinen (MEX-Dateien) wer-den als dynamisch ladbare Objektdateien erstellt (unter Windows als DLLs –Dynamic Link Libraries, unter UNIX/Linux als Shared Libraries) und beim Auf-ruf aus MATLAB vom Betriebssystem automatisch geladen und ausgeführt. Ei-ne ausführliche Übersicht über die Erstellung von MEX-Funktionen mit unter-schiedlichen C/C++-Compilern geben das Skriptum zur Vorlesung ElektronischeMessdatenverarbeitung [9], die zuständigen MATLAB-Handbücher – Benutzer-handbuch gedruckt [10] und als PDF-Datei [11]; Referenzhandbuch in HTML [12]und PDF [13] – oder das MATLAB-Hilfesystem.

3.5 MATLAB als ‘Engine’

MEX-Funktionen sind Erweiterungen des MATLAB-Befehlsumfangs und werdenaus MATLAB aufgerufen. Umgekehrt kann man auch den Befehlsumfang deseigenen Programms durch MATLAB erweitern, MATLAB-Funktionen z. B. auseinem Messprogramm aufrufen:

MATLAB provides a set of routines that allows you to call MATLABfrom your own programs, thereby employing MATLAB as a computati-on engine. MATLAB engine programs are C or Fortran programs thatcommunicate with a separate MATLAB process via pipes (in UNIX) andthrough ActiveX on Windows. There is a library of functions providedwith MATLAB that allows you to start and end the MATLAB process,send data to and from MATLAB, and send commands to be processedin MATLAB.

Ausführlicheres in den oben angegebenen Quellen, Beispiele zur Verwendungin den Skripten zu den Vorlesungen Graphik-Workshop [4] und ElektronischeMessdatenverarbeitung [9].

3.6 Graphische Benutzeroberflächen

Die Bedienung von (Mess-)Programmen wird beträchtlich erleichtert, wenn manfür bestimmte Aktionen Eingabehilfen wie Drucktasten oder Menüs zur Verfü-gung stellt. MATLAB bietet zur Erstellung solcher graphischer Oberflächen um-fangreiche Hilfsmittel. Die Basis dafür ist immer ein Figure–Objekt, das über dieFunktion uimenu mit zusätzlichen Menüpunkten und/oder über die Funktionuicontrol mit Tasten, Eingabefenstern, Auswahllisten und ähnlichem ausge-stattet wird.

Abbildung 1 zeigt ein einfaches Beispiel, in dem mathematische Funktionen mitden Einfachkommandos ezplot , ezsurf oder ezmesh gezeichnet werden

Page 14: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

14 Elektronik–Praktikum Physik

können. Die gewünschte Funktion wird im Textfeld eingegeben, nach Drückender jeweiligen Taste geplottet.

−5

0

5

−5

0

5

−1

−0.5

0

0.5

1

x

sin(x/2) cos(y)

y

Abbildung 1: GraphischeBenutzeroberfläche zumTest von Funktionsplots.

Das zugehörige MATLAB-Skript erstellt zunächst mit figure ein Figure–Objektals Rahmen, darin mit axes eine Zeichenfläche.

figure( ...’Name’,’User Interface in MATLAB’, ...’NumberTitle’,’off’);

axes( ...’Units’,’normalized’, ...’Position’,[0.10 0.12 0.6 0.78], ...’FontUnits’,’normalized’,’FontSize’,0.055);

Pos = [0.75 0.8 0.2 0.05];dPos = [0 -0.1 0 0];hText = uicontrol( ...

’Style’,’edit’, ...’Units’,’normalized’, ...’Position’,Pos, ...’BackgroundColor’,[1 1 1], ...’String’,’sin(x/2)*cos(y)’);

...uicontrol( ...

’Style’,’pushbutton’, ...’Units’,’normalized’, ...’Position’,Pos+2*dPos, ...’String’,’EZSURF’, ...’Callback’,’ezsurf(get(hText,’’String’’))’);

...

Das Textfeld wird vorbesetzt, beim Drücken der Taste (hier EZSURF) wird dasTextfeld gelesen und die gewünschte Funktion ( ezsurf ) damit aufgerufen.

Die Funktion uicontrol erstellt Graphik-Objekte, die durch Eigenschafts-Werte-Paare näher definiert werden. So gibt der Wert für Style an, was für einTyp uicontrol erstellt werden soll, Position die Lage und Größe, Stringdie Beschriftung. Aktionselemente brauchen eine Callback –Eigenschaft, diedie auszuführende Aktion festlegt. Der Rückgabewert von uicontrol ist ein

Page 15: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

Messen mit MATLAB 15

Objekt-Pointer (Handle), mit dem Eigenschaften des Objekts später erfragt ( get )oder verändert ( set ) werden können.

Das zweite Beispiel implementiert eine einfache Messumgebung (Abbildung 2).Für Messparameter sind Eingabefelder vorgesehen, verschiedene Aktionen kön-nen per Tastendruck gestartet werden.

−10 −8 −6 −4 −2 0 2−20

−15

−10

−5

0

5

10

15

20

Voltage [V]

Cur

rent

[mA

]

Abbildung 2: Graphi-sche Benutzeroberflächezur Messdatenerfas-sung und -darstellung(gemessen wurde gera-de die Kennlinie einer9-V-Zenerdiode).

Die Aktionen sind jeweils durch die Callback –Eigenschaft festgelegt:

uicontrol( ’Style’, ’pushbutton’, ...’String’, ’MEASURE’, ...’Callback’, measurecb);

uicontrol( ’Style’, ’pushbutton’, ...’String’, ’CALCULATE’, ...’Callback’, ...’errordlg(’’Not implemented’’,’’Error’’)’);

uicontrol( ’Style’, ’pushbutton’, ...’String’, ’SAVE’, ...’Callback’, savecb);

Beim Drücken der CALCULATE–Taste wird mit errordlg ein Dialogfenstermit Fehlermeldung aufgemacht, die beiden weiteren Aktionen sind an andererStelle im MATLAB-Skript implementiert, measurecb als

measuring = 0;measurecb = [...

’if measuring==0,’ ...’measuring = 1;’ ...’x0 = str2num(get(hStart,’’String’’));’ ...’x1 = str2num(get(hStop,’’String’’));’ ...’dx = str2num(get(hStep,’’String’’));’ ...’[x,y] = domeas(x0,x1,dx);’ ...’measuring = 0;’ ...’end;’]; .

Die Zahlenwerte ( str2num ) der Texteingaben ( hStart , hStop , hStep sinddie Handles der Textfelder) werden als Parameter an die eigentliche Messfunkti-on domeas übergeben, zurückgeliefert werden die Messwerte. Die Semaphore(Ampel) measuring sorgt dafür, dass ein zweiter Tastendruck während einer

Page 16: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

16 Elektronik–Praktikum Physik

Messung ohne Folgen bleibt. Falls die Messung länger dauert, sollten innerhalbder Messfunktion regelmäßig aktuelle Messdaten gezeichnet werden, um überden Messablauf zu informieren. Dazu wird die Graphik zunächst konfektioniert(Datenbereich, Achsenbeschriftungen usw.) und mit hold on eingefroren. Inder Messschleife innerhalb der Messfunktion domeas wird dann laufend nurnoch der aktuelle Datenpunkt geplottet:

for n = 1:nmax,... % Slow Measurementplot(x(n), y(n), ’ko’);if mod(n,10)==0, drawnow; end;

end; .

Der Aufruf von drawnow sorgt dafür, dass konkret gezeichnet wird, im obigenFall nach jedem zehnten Punkt. MATLAB schiebt ansonsten alle Zeichenaktio-nen auf, bis nichts anderes mehr anliegt, würde also ohne diese Zeile erst amEnde der Messung zeichnen.

Die Aktion savecb macht zunächst mit uiputfile ein Standarddialogfen-ster zur Auswahl eines Dateinamens auf, Rückgabewerte des Dialogs sind Da-teiname und vollständiger Pfad:

savecb = ...[’[fn,fp]=uiputfile(’’*.*’’);’, ...’if fn~=0,’, ...’ chdir(fp);’, ...’ pairs=[x.’’,y.’’];’ ...’ save(fn,’’pairs’’,’’-ascii’’);’ ...’end;’]; .

Vor dem Abspeichern mit save werden die im Messprogramm als Zeilenvek-toren vorliegenden Messwerte in die gewünschte Tabellenform gebracht (zwei-spaltige Matrix pairs ).

4 Messgeräte

Neben einem PC zur Steuerung und Auswertung von Messungen sowie zumweiterführenden Arbeiten mit MATLAB, Simulationsprogrammen o. ä. sind dieArbeitsplätze im Elektronik-Praktikum jeweils mit Funktionsgenerator, Digital-speicheroszilloskop und programmierbarem Mess- und Steuergerät ausgestat-tet. Alle Geräte sind vom PC aus über MATLAB-Skripte oder -Funktionen be-dienbar. Zur Verbindung werden Standardschnittstellen des Rechners verwen-det (Funktionsgenerator an COM1, Oszilloskop an COM2, Mess- und Steuerge-rät am Ethernet).

4.1 Funktionsgenerator

Als Signalgenerator wird das Modell 33120A der Firma Agilent [14] (früher: Hew-lett Packard) eingesetzt. Neben einfachen Signalformen wie Sinus oder Recht-eck kann der Generator auch lineare oder logarithmische Frequenz-Sweepssowie amplituden- oder frequenzmodulierte Signale erzeugen. Darüber hinaus

Page 17: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

Messen mit MATLAB 17

sind beliebige benutzerdefinierte Spannungsverläufe möglich. Die Maximalfre-quenz beträgt 15 MHz.

Alle Funktionen mit Ausnahme der benutzerdefinierten Signalformen sind manu-ell durch die Tasten und den Drehknopf an der Frontseite einstellbar. Für einfa-che Messungen oder Tests ist dies ausreichend, bei komplexeren Abläufen soll-te die Steuerung vom Rechner aus erfolgen. Zur Kopplung sind eine IEC-Bus-und eine serielle Schnittstelle an der Rückseite vorhanden (aktive Schnittstelleund Schnittstellenparameter können über ein Menü manuell eingestellt werden),die Bedienung durch den Rechner erfolgt über einfache Text-Kommandos. Ei-ne ausführliche Beschreibung aller Funktionen des Signalgenerators sowie allerProgrammiersequenzen enthält das Gerätehandbuch [15].

Etwas komplizierter als üblich ist die serielleVerbindung, da Agilent die Steuerleitungen derSchnittstelle in spezieller Weise verwendet. Zwi-schen Null-Modem-Kabel und Generator 33120wird ein zusätzliches Adapterkabel nach neben-stehendem Schaltschema benötigt.

Die Programmierung des Funktionsgenerators in MATLAB veranschaulicht dasfolgende Fragment:

function gensinus(freq, volt)if isunix

gen = serial(’/dev/ttyS0’);else

gen = serial(’COM1’);end;fopen(gen);gen.FlowControl = ’hardware’;s = sprintf(’APPL:SIN %3.1f, %3.1f\n’, freq, volt);fprintf(gen, s);fclose(gen);delete(gen);clear gen;

Page 18: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

18 Elektronik–Praktikum Physik

Ähnlich wie FlowControl können auch andere Eigenschaften eingestellt wer-den ( BaudRate , Parity etc.). Mit isunix lässt sich in MATLAB feststellen,in welchem Betriebssystem man arbeitet; durch die obige Formulierung ist dieFunktion sowohl unter Linux wie auch unter Windows lauffähig.

4.2 Oszilloskop

Das am Arbeitsplatz verwendete Oszilloskop TDS 210 der Firma Tektronix [16]ist ein Digitalspeichergerät mit zwei Kanälen zu je 2500 Messpunkten, einermaximalen Bandbreite von 60 MHz, einer maximalen Abtastrate von 1 GHz und8 Bit Amplitudenauflösung. Weitere technische Daten sind dem Benutzerhand-buch zu entnehmen [17].

Neben der manuellen Bedienung ist eine vollständige Rechnersteuerung allerFunktionen möglich, eine detaillierte Beschreibung findet man im Programmier-handbuch [18]. Die serielle Verbindung mit dem Rechner wird über ein Null-Modem-Kabel – diesmal ohne weitere Zusätze – hergestellt.

Als Beispiel für die Programmierung eine MATLAB-Funktion für die Datenüber-tragung vom Oszilloskop zum Rechner:

function y = scope(channel)if nargin==0, channel=1; end;if channel<1, channel=1; end;if channel>2, channel=1; end;if isunix

osc = serial(’/dev/ttyS1’);else

osc = serial(’COM2’);end;osc.FlowControl = ’hardware’;

Page 19: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

Messen mit MATLAB 19

osc.InputBufferSize = 3000;osc.Terminator = ’CR/LF’;fopen(osc);fprintf(osc, ’SEL:CH%d ON\n’, channel);fprintf(osc, ’DAT:SOU CH%d\n’, channel);fprintf(osc, ’DAT:ENC RPB\n’);fprintf(osc, ’CURV?\n’);a = 0;while char(a)~=’#’,

a = fread(osc,1,’uchar’);end;b = fread(osc,1,’uchar’);n = fread(osc,str2num(char(b)),’uchar’);y = fread(osc,str2num(char(n.’)),’uint8’);fclose(osc);delete(osc);clear osc;

Die ersten beiden fprintf –Anweisungen selektieren den gewünschten Kanal,dann wird das Datenformat auf binär eingestellt. CURV? ist die Aufforderung zurÜbermittlung der Daten. Die Folge der fread –Anweisungen widerspiegelt dasDatenformat des Oszilloskops bei binärer Kodierung. Einem #-Symbol folgt eineZiffer, die angibt, aus wie vielen Ziffern die nachfolgende Zahl besteht; diesewiederum gibt die Anzahl der darauf folgenden Binärdaten an. Alles klar?

4.3 Mess- und Steuergerät

Das progammierbare Mess- und Steuergerät enthält je 4 analoge Ein- und Aus-gänge sowie 8 TTL-Eingänge, 8 TTL-Ausgänge und 8 Relaisausgänge mit Um-schaltkontakten. Damit kombiniert ist ein Stromversorgungsteil mit Festspan-nungen zum Betrieb der Experimentalschaltungen. Eine Zusammenfassung dertechnischen Daten und eine detaillierte Funktionsbeschreibung enthält dietechnische Anleitung zum Gerät [19] (auch als englische Version verfügbar).Das Mess- und Steuergerät basiert auf einem Ein-Chip-Microcontroller und kanndadurch sehr flexibel konfiguriert werden. Zurzeit wird es mit einem einfachen

Page 20: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

20 Elektronik–Praktikum Physik

Steuerprogramm betrieben, das Kommandos interpretiert, die über die Ethernet-Schnittstelle geschickt werden. Damit können die Ausgänge gesetzt und die Ein-gänge abgefragt werden.

Eine MATLAB-Funktion, die mit diesem Steuerprogramm korrespondiert, kannmit den jetzt in MATLAB vorhandenen Java-Möglichkeiten realisiert werden. Dienachstehende Funktion misst eine Strom-Spannungs-Kennlinie, indem von ei-nem D/A-Wandler ein einstellbarer Strom vorgegeben wird und über einen A/D-Wandler die Spannung gemessen wird:

function [v, c] = voltcurrimport java.net.*so = java.net.Socket(’ipc1’, 1234);pause(1);c = -2000:20:2000;v = [];for curr = c,

s = sprintf(’da3 %d’, curr);SocketIO(so, s);sData = SocketIO(so, ’ad1’);v = [v, str2double(sData)];

end;pause(1);so.close;

% ***** Local Subfunction SocketIOfunction recvStr = SocketIO(socket, sendStr)

str = java.lang.String(sendStr);out = socket.getOutputStream;out.write(str.getBytes);in = socket.getInputStream;isr = java.io.InputStreamReader(in);ibr = java.io.BufferedReader(isr);recvStr = ibr.readLine;

Mit java.net.Socket wird die TCPIP-Verbindung zum Steuergerät etabliert,am Ende mit close wieder geschlossen. Zuvor wird das zuständige Java-Paket java.net explizit importiert.

Zur Kommunikation wird die lokale Subfunktion SocketIO definiert, die denzu sendenden MATLAB-String in einen Java-String wandelt und diesen über dasOutputStream –Objekt des Sockets verschickt. Auf das InputStream -Objektwird ein BufferedReader gesetzt, dessen Funktion readLine die Antwortdes Steuergeräts liest.

Page 21: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

Messen mit MATLAB 21

5 Aufgaben

1 Machen Sie sich mit den Möglichkeiten des Arbeitsplatzrechners vertraut: Be-triebssystem, Software, Netzverbindung, Zugriff auf Ihre Verzeichnisse im Netz.

2 Falls Sie MATLAB noch nicht näher kennen, beginnen Sie mit einfachen Auf-gaben (Beipiel: Initialisierung einer Vektorvariablen, eine weitere Variable alsFunktion der ersten, graphische Darstellung, Konfektionierung der Graphik mitden Mitteln der Handle-Graphik, Speichern von Datenfeldern in Dateien).

3 Programmieren Sie eine MATLAB-Funktion zur Steuerung des Frequenzgene-rators.

4 Erstellen Sie MATLAB-Funktionen zur Datenerfassung vom Oszilloskop. DieMessdaten können vollständig übertragen werden oder aber nur Teilbereichedavon. Testen Sie auch die Möglichkeiten, mit den Messfunktionen des Oszillo-skops zu arbeiten (Amplituden-, Frequenz- und Zeitmessung). Verwenden Siedazu geeignete Signale des Frequenzgenerators.

5 Bauen Sie ein einfaches Messbeispiel auf – Frequenzverhalten eines RC-Hoch-oder Tiefpasses o. ä. Messen Sie die Frequenzabhängigkeit der Übertragungs-funktion (Amplitude und Phase).

6 Machen Sie die gleiche Messung mit einem Rechtecksignal geeigneter Fre-quenz. Diskussion. Wie lässt sich daraus die Frequenzcharakteristik berech-nen? Versuchen Sie das mit MATLAB.

7 Schreiben Sie eine MATLAB-Funktion zur Kommunikation mit dem Mess- undSteuergerät. Achten Sie dabei darauf, dass keine fehlerhaften Anweisungen ent-stehen (Wertebereiche, Integer-Werte).

8 Testen Sie die D/A- und A/D-Wandler des Steuergeräts. Verbinden Sie dazueinen der D/A-Spannungsausgänge mit einem der A/D-Eingänge. Geben Siezufällige Werte aus und lesen Sie die zugehörigen A/D-Werte ein. Abweichun-gen, Statistik, Bewertung?

9 Testen Sie die D/A-Stromausgänge dadurch, dass Sie die Kennlinie eines Wi-derstands messen (z. B. 470 Ω). Tatsächlicher Widerstandswert, Abweichungenvom linearen Verlauf, Bewertung?

10 Erstellen Sie mit MATLAB eine graphische Benutzerumgebung (GUI) Ihrer Wahl.Sie können beispielsweise eine der vorstehenden Messaufgaben damit kombi-nieren.

Page 22: Messen mit MATLAB KB 20010929 · PDF fileMessen mit MATLAB 3 1 Ziele • Grundzüge von MATLAB, Variablen, Operatoren, Funktionen, Skripte, Da-teiformate, • Visualisierung von Daten

22 Elektronik–Praktikum Physik

Literatur und Links

[1] http://www.netlib.org/linpack.

[2] http://www.netlib.org/eispack.

[3] http://www.netlib.org/lapack.

[4] http://www.physik.uni-osnabrueck.de/kbetzler/gw/gw.html.

[5] Alejandro L. Garcia. Numerical Methods for Physics. Prentice Hall, 2000.

[6] http://www.math.siu.edu/matlab/tutorials.html.

[7] http://www.rrz.uni-hamburg.de/RRZ/W.Wiedl/Skripte/Matlab/.

[8] http://www.uni-karlsruhe.de/∼MATLAB/matlab_kurs.html.

[9] http://www.physik.uni-osnabrueck.de/kbetzler/mdv.

[10] The MathWorks. MATLAB Application Program Interface Guide. Handbuch,1998.

[11] Bei einer Standard-Installation:<matlabroot>/help/pdf_doc/matlab/api/apiguide.pdf,ab Release 12 auf der Documentation CD.

[12] Bei einer MATLAB-Standard-Installation findet sich das Inhaltsverzeichnisder API-Referenz in <matlabroot>/help/techdoc/apiref/apireftoc.html.

[13] Bei einer Standard-Installation:<matlabroot>/help/pdf_doc/matlab/api/apiref.pdf,ab Release 12 auf der Documentation CD.

[14] http://www.agilent.com.

[15] Hewlett Packard, Agilent. Bedienerhandbuch für den Funktionsgenerator33120A. Handbuch, 1994.

[16] http://www.tek.com.

[17] Tektronix. User Manual TDS 200 Series. Handbuch.

[18] Tektronix. Programmer Manual TDS 200 Series. Handbuch.

[19] http://www.physik.uni-osnabrueck.de/kbetzler/ep/anl/epst.pdfenglisch:http://www.physik.uni-osnabrueck.de/kbetzler/ep/anl/epst.pdf.