19.09.2012 Aufrufe

T heMathWorksNews&Notes

T heMathWorksNews&Notes

T heMathWorksNews&Notes

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

2008<br />

T heMathWorks News&<strong>Notes</strong><br />

Das Magazin für Anwender von MATLAB ® und Simulink ®<br />

ALso Ausserdem in this in issue: dieser AusgAbe<br />

3-D Implementierung Antenna Data<br />

Visualization von Software at<br />

Lockheed Defined Radios Martin bei<br />

Northrop Grumman<br />

Implementing<br />

Verfikation<br />

Modeling missionskritischer Standards<br />

Software<br />

Cleve’s Modeling Corner: Avalanche<br />

Experimente Dynamics in mit the Lab<br />

MATLAB<br />

Analyse von Testdaten einer<br />

weltweit operierenden Test wagen-<br />

Flotte bei der Daimler AG<br />

Analyzing Test Data<br />

from a Worldwide Fleet<br />

of Fuel Cell Vehicles at<br />

Daimler AG<br />

Objekt-Orientierte<br />

EUtech‘s Fuel Cell<br />

Programmierung<br />

System Controller<br />

mit MATLAB<br />

Modellierung Optimizing<br />

operationeller Memory Access Risiken<br />

bei Intesa Sanpaolo<br />

TheMathWorksNews&<strong>Notes</strong> | June 2007<br />

1


Neueste Updates von<br />

The MathWorks<br />

Highlights des neuen Release:<br />

• Modernste objekt-orientierte Programmierung<br />

sowie Function Browser in MATLAB<br />

• MATLAB-basierte Sprache in Simscape zur<br />

Erzeugung von Komponenten für die physikalische<br />

Modellierung<br />

• Beweis der Abwesenheit von Laufzeitfehlern mit<br />

PolySpace-Produkten zur Code-Verifikation<br />

• Schnellere Simulation und Codegenerierung für<br />

Festkomma-Datentypen mit bis zu 128 Bit<br />

• AUTOSAR-konforme Codegenerierung<br />

• Verteilter Einsatz paralleler Anwendungen, die mit<br />

dem MATLAB Compiler erzeugt wurden<br />

www.mathworks.de/nn8/release<br />

Willkommen zu den The MathWorks News & <strong>Notes</strong><br />

Vor kurzem habe ich meine achtzehnjährige Firmenzugehörigkeit bei The Mathworks<br />

gefeiert. Achtzehn Jahre sind in der Softwareentwicklung fast eine Ewigkeit. Als ich zu<br />

The MathWorks kam, gab es kein World Wide Web und kein Microsoft Windows, und<br />

ich war begeistert über meinen 386er PC mit seiner 30 Megabyte großen Festplatte sowie<br />

zwei Megabyte RAM. MATLAB war ein Kommandozeilen-Programm für DOS, und es<br />

passte bequem in die 640 Kilobyte, die das Betriebssystem verwalten konnte.<br />

Heute ist MATLAB etwa eintausendmal schneller und kann Datensätze bis in den<br />

Terabyte-Bereich hinein verarbeiten. Diese gestiegene Leistung hat Innovationen auf<br />

praktisch allen Gebieten von Wissenschaft und Technik ermöglicht.<br />

Beim Lesen der Artikel für diese Ausgabe der The MathWorks News & <strong>Notes</strong> fühlte ich<br />

mich geehrt, Teil einer Ingenieursgemeinde zu sein, die dazu beigetragen hat, den Traum<br />

des Parallel Computing zu verwirklichen, und die Tools entwickelt hat, mit denen sich<br />

die Fehlerfreiheit von Software mathematisch beweisen lässt. Aber auch Teil einer<br />

Gemeinschaft, die Menschen mit neuromuskulären Verletzungen hilft, sich wieder be-<br />

wegen zu können, und die schadstofffreie Automobile mit Brennstoffzellen entwickelt.<br />

In dieser Ausgabe stellen wir Ihnen aktuelle Entwicklungen aus einer langen und<br />

bemerkenswerten technischen Erfolgsgeschichte vor. Auszüge aus Cleve Molers Buch<br />

Experiments with MATLAB erinnern uns unterdessen daran, wie gut MATLAB auch<br />

heute noch seinen ursprünglichen Zweck erfüllt. Etwa als Werkzeug für die Lehre mit<br />

dem die künftige Generation von Ingenieuren darauf vorbereitet wird, auch die nächste<br />

Generation von Innovatoren zu sein.<br />

Ich hoffe, die Artikel sind für Sie interessant und gefallen Ihnen. Wie immer freuen<br />

wir uns auf Ihre Rückmeldung. Kommentare und Vorschläge schicken Sie bitte an<br />

www.mathworks.de/nn8/contact<br />

Jason Kinchen<br />

Director of Engineering, MATLAB and Math Toolboxes<br />

Leitende Redakteurin<br />

Linda Webb<br />

Art Director<br />

Robert Davison<br />

Webdesign<br />

Sowmya Suryanarayanan<br />

Übersetzung<br />

Christoph Jansen<br />

Produktion<br />

M. Gormley, R. Monteiro, M. Tervo, M. Waters, J. Wilber<br />

Redaktionsbeirat<br />

A. Behboodian, S. Gage, C. Hayhurst, S. Hirsch, S. Lehman,<br />

T. Lennon, D. Lluch, M. Maher, C. Moler, M. Mulligan,<br />

L. Shure, A. Tarchini, J. Tung, K. Zannella<br />

Autoren und Rezension<br />

R. Baker, P. Barnard, G. Bourdon, N. Burns, H. Chen,<br />

K. Cohan, A. Colombo, S. Desando, G. DiPierro,<br />

D. Doherty, N. Fernandes, J. Ghidella, T. Gillis,<br />

H. Gilmore, N. Gulley, T. Hegarty, J. Irza, D. Jaeger,<br />

W. Jin, K. Karnofsky, L. Kempler, J. Kinchen, M. Lalo,<br />

D. Lidrbauch, K. Lorenc, S. Mahapatra, T. Mathieu,<br />

N. McChesney, S. McGarrity, T. McGuire, S. Miller,<br />

N. Moulana, P. Munier, B. Murphy, M. Pak, F. Perino,<br />

T. Priestley, O. Pujado, M. Ricci, P. Ring, T. Roche,<br />

R. Rovner, B. Schoelson, A. Siddiq, B. Tannenbaum,<br />

S. Trier, A. Turevskiy, M. Vondal, T. Vrabec, M. Vulliez,<br />

A. Weinberger, J. Weisgarber, M. Yoder<br />

Abonnement<br />

Auf folgender Webseite können Sie<br />

The MathWorks News & <strong>Notes</strong> abonnieren:<br />

www.mathworks.de/nn8/subscribe<br />

Leitende Lektorin<br />

Rosemary Oxenford<br />

Design und Layout<br />

Audrey Gaffron<br />

Redaktion der<br />

deutschen Ausgabe<br />

Thomas Andraczek<br />

Druck<br />

DS Graphics<br />

Kommentare und Anmerkungen<br />

Kommentare und Anmerkungen zu den<br />

The MathWorks News & <strong>Notes</strong> schicken Sie bitte an:<br />

www.mathworks.de/nn8/contact<br />

©1994 -– 2008 The MathWorks, Inc.<br />

MATLAB and Simulink are registered trademarks of The MathWorks, Inc.<br />

See www.mathworks.com/trademarks for a list of additional trademarks.<br />

Other product or brand names may be trademarks or registered trademarks<br />

of their respective holders.<br />

TheMathWorks News&<strong>Notes</strong> | 2008<br />

2


4 8 12 16 24<br />

32<br />

Artikel<br />

8 Analyse der Testdaten einer weltweit operierenden<br />

Flotte von Brennstoffzellen-Fahrzeugen der<br />

Daimler AG<br />

4<br />

MATLAB-basierte Algorithmen wandeln Millionen bei Testfahrten gesammelter<br />

Dateien in Berichte um, die detaillierte Auskunft über Leistung und Zustand<br />

von Fahrzeugen geben und künftige Tankstellen-Infrastrukturen planen helfen.<br />

6<br />

12<br />

16<br />

20<br />

24<br />

28<br />

Einführung in die Objekt-Orientierte Programmierung<br />

mit MATLAB<br />

Durch objekt-orientierte Methoden lässt sich komplexe Software erheblich<br />

einfacher handhaben und verwalten. Dies erleichtert vor allem die Entwicklung<br />

und Pflege umfangreicher Anwendungen und Datenstrukturen.<br />

Northrop Grumman automatisiert die Implementierung<br />

von Software Defined Radios<br />

Mithilfe eines speziellen integrierten Frameworks können auch Techniker ohne<br />

theoretische Kenntnisse der Nachrichtentechnik Software Defined Radios auf<br />

einer hohen Abstraktionsebene spezifizieren und entwerfen.<br />

Entwicklung und Implementierung von Szenarioanalyse-Modellen<br />

zur Messung des operationellen<br />

Risikos bei der Intesa Sanpaolo<br />

Italiens führende Bank nutzt völlig neue Modelle zur Szenarioanalyse für die<br />

Berechnung der im Basel II-Abkommen geforderten Kapitalrückstellungen zum<br />

Ausgleich operationeller Risiken.<br />

Wiederherstellung der Beweglichkeit von Patienten<br />

mit neuromuskulären Behinderungen durch<br />

Funktionelle Elektrostimulation<br />

Forscher der Case Western Reserve University entwickeln ein programmierbares<br />

Gerät, das elektrische Signale an ein Implantat sendet, um gelähmte Extremitäten<br />

und Muskeln wieder zu aktivieren.<br />

Verifikation von Code mit hohen Anforderungen<br />

an die Zuverlässigkeit<br />

PolySpace-Produkte beweisen die Abwesenheit von Laufzeitfehlern in Programmcode<br />

mithilfe ausgefeilter mathematischer und analytischer Methoden, ohne<br />

den Code zu kompilieren oder auszuführen.<br />

7<br />

31<br />

32<br />

36<br />

40<br />

Rubriken<br />

MATLAB and Simulink in the World:<br />

Verifikation und Validierung<br />

MathWorks Spotlights: AUTOSAR, Curriculum Exchange,<br />

MATLAB Central, SimBiology, SimElectronics<br />

Buchtipps zu MATLAB und Simulink:<br />

Neue Lehrbücher zu den Themen Signalverarbeitung,<br />

Model-Based Design und Einführung in die Programmierung<br />

mit MATLAB<br />

Produkte von Drittanbietern: Implementierung von<br />

Simulink-Modellen für Echtzeit-Systeme<br />

Cleve’s Corner: Experimente mit MATLAB<br />

Programming Patterns: Typische Stolperfallen beim<br />

Programmieren in MATLAB und wie man sie vermeidet<br />

Tipps und Tricks: Erzeugung und Einsatzmöglichkeiten<br />

von Web-Views<br />

Zum Titelbild<br />

Das Titelbild zeigt ein Brennstoffzellen-<br />

Fahrzeug aus der Testflotte von Daimler.<br />

Die Grafik im Hintergrund visualisiert die<br />

Häufigkeit von Gaspedalstellungen, deren<br />

Daten über ein eingebautes Telematik-<br />

system ermittelt werden. Die Grafik wurde<br />

von einem automatisierten, MATLAB-<br />

basierten Reporting-Tool erzeugt, das<br />

von Daimler zur Ermittlung von Nutzungs-<br />

profilen entwickelt wurde, um diese<br />

untersuchen und beispielsweise künftige<br />

Tankstellen-Infrastrukturen planen zu<br />

können. Im Artikel ab Seite 8 beschreiben<br />

die Daimler-Ingenieure die Entwicklung<br />

und den Einsatz dieses Tools zur Analyse<br />

und Auswertung der Fahrzeugdaten.


MATLAB AND SIMULINK IN THE WORLD<br />

Verifikation und Validierung<br />

Die Verifikation und Validierung von Embedded Systems, in denen Software und Elektronik eine Einheit bilden, stellt angesichts<br />

enger Zeitpläne und der stetig wachsenden Komplexität dieser Systeme eine große Herausforderung dar. Unternehmen aus der<br />

Automobilindustrie, Luft- und Raumfahrt, Kommunikationstechnik, Mechatronik und weiteren Bereichen lösen dieses Problem, indem<br />

sie bereits im Modellierungsstadium die Möglichkeiten der Verifikation nutzen. Zudem können sämtliche Modelle, Daten und wei-<br />

tere Konstrukte in die begleitende Verifikation bis hin zur Embedded Software- oder HDL-Implementierung einbezogen werden.<br />

YOKOGAWA ELECTRIC CORPORATION<br />

Wiederverwendung von Simulink-Testbenches für<br />

HDL-Implementierungen<br />

Die Yokogawa Electric Corporation hat zwei zentrale optische<br />

Netzwerkkomponenten entwickelt: Einen ultraschnellen<br />

optischen Switch und einen optischen Sender/-empfänger<br />

für paketorientierte Kommunikation, der als Schnittstelle<br />

zwischen dem optischen Paket-Orientierten-Netzwerk und<br />

konventionellen Netzwerken dient. Mit Simulink® konnte<br />

Yokogawa Fehler in Simulationsläufen aufspüren und<br />

korrigieren. Nach Implementierung der Komponenten<br />

wurden die System-Level-Testbenches aus Simulink mittels<br />

des EDA Simulator Link MQ mit ModelSim® von Mentor<br />

Graphics® verbunden und für Tests der HDL-Implementierung<br />

wiederverwendet. Zur Verifikation wurden Modelle<br />

und Testdaten ebenfalls erneut genutzt.<br />

www.mathworks.de/nn8/yokogawa<br />

ASTRIuM<br />

Generierung von Code aus einem Controller sowie<br />

physikalischen Modellen für HIL und Flug-Tests<br />

Astrium, eine EADS-Tochter, hat einen Controller für einen<br />

optischen Laser-Link zwischen Flugzeug und Kommunikations-Satelliten<br />

mit einer Übertragungsrate von 50 Mbit/s<br />

und einer Fehlerrate von unter eins zu einer Milliarde entwickelt.<br />

Mit Simulink, Real-Time Workshop® und xPC Target<br />

wurde ein Modell des Controllers und ein physikalisches<br />

Modell der Ausrichtungs-Hardware erzeugt. Die Modelle<br />

wurden zur durchgängigen funktionalen Verifikation, zur<br />

Codegenerierung für HIL-Tests und für das in Testflügen<br />

eingesetzte Echtzeit-Demonstrationssystem genutzt.<br />

www.mathworks.de/nn8/astrium<br />

MAN ROLAND<br />

Integration von Modellen und Daten zur Leistungs-<br />

Verifikation<br />

Um die Druckqualität seiner aktuellen Druckmaschinen zu<br />

verbessern, hat MAN Roland MATLAB® und Simulink-Modelle<br />

zur Modellierung des Controllers und der Mechanik<br />

eingesetzt. Um ein möglichst realistisches Systemverhalten<br />

zu erzielen, hat man Leistungsdaten an einer Druckmaschine<br />

im laufenden Betrieb aufgezeichnet. Mithilfe des Anlagenmodells<br />

wurden Betriebsstörungen simuliert, die sich an<br />

echten Systemen oft nur schwer reproduzieren lassen. Durch<br />

diese Herangehensweise konnte ein robusterer Controller<br />

entwickelt und mit Real-Time Workshop und xPC Target<br />

implementiert werden.<br />

www.mathworks.de/nn8/man_roland<br />

LOCKHEED MARTIN SPACE SYSTEMS<br />

Nutzung von Streckenmodellen für die Systement-<br />

wicklung und für projektspezifische HIL-Testsysteme<br />

Bei der modellgestützten Entwicklung des Flugleit-, Navigations-<br />

und Steuerungssystems für den Mars Reconnaissance<br />

Orbiter (MRO) hat Lockheed Martin Space Systems dessen<br />

komplettes Streckenmodell aus Aktuatoren, Sensoren,<br />

Steuerungsalgorithmen und Flugdynamik mit Simulink und<br />

SimMechanics modelliert. Mit Real-Time Workshop wurde<br />

daraus Code für den HIL-Orbiter-Prüfstand generiert, der<br />

für Echtzeit-Tests des MRO eingesetzt wurde.<br />

www.mathworks.de/nn8/lockheed_mro<br />

NISSAN MOTOR COMPANY<br />

Optimierung von Code-Review Prozessen mit<br />

DOHENY EYE INSTITuTE<br />

On-Chip-Debugging von DSP-Code<br />

Forscher am Doheney Eye Institute haben eine Netzhaut-<br />

Prothese entwickelt, die Bilder in Stimulussignale umwandelt<br />

und über einen implantierten Chip an Nervenzellen<br />

der Netzhaut überträgt. Sie verwendeten MATLAB<br />

und Simulink für erste Tests sowie zur Entwicklung von<br />

Bild- und Videoverarbeitungs-Algorithmen. Aus diesen<br />

wurde C Code mit Real-Time Workshop erzeugt und<br />

auf einen DSP von TI geladen. Die Verifikation des<br />

Codes auf dem DSP erfolgte mit MATLAB, dem<br />

Embedded IDE Link CC und Code Composer Studio.<br />

www.mathworks.de/nn8/doheny<br />

Quellen<br />

VERIFIKATION, VALIDIERUNG UND TESTS IM MODEL-BASED DESIGN<br />

www.mathworks.de/nn8/vv<br />

ANWENDERBERICHTE www.mathworks.de/nn8/user_stories<br />

4 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 5<br />

Zulieferern<br />

Die Software Quality Group der Nissan Motor Company hat<br />

PolySpace-Produkte zur Verbesserung der von Zulieferern<br />

bereitgestellten Software verwendet. Bis dato wurden Qualitätsziele<br />

hauptsächlich in Form klassischer Methoden wie<br />

etwa Geräte-, Integrations- und Systemtests formuliert. Der<br />

neue, erheblich genauere und effizientere Software-Review-<br />

Prozess mithilfe von PolySpace-Software wird von den Zulieferern<br />

jeweils zu Beginn eines Projekts und nach Abschluss<br />

jeder wichtigen Phase eingesetzt. Viele Zulieferer von Nissan<br />

arbeiten außerdem derzeit an der Integration von PolySpace-<br />

Produkten in ihre eigenen internen Entwicklungsprozesse.<br />

www.mathworks.de/nn8/nissan


MATHWORKS SPOTLIGHTS<br />

Verbesserung des MATLAB Central Newsreader<br />

Seit 1993 tauschen die Anwender von<br />

MathWorks-Produkten in der Newsgroup<br />

comp.soft-sys.matlab Ideen aus und beant-<br />

worten technische Fragen. Die stetig wach-<br />

sende Mitgliederzahl und Themenvielfalt<br />

hat das Lesen und Sortieren dieser Inhalte<br />

jedoch zunehmend erschwert.<br />

Angesprochen auf Verbesserungsvor-<br />

schläge baten die Mitglieder mehrheitlich<br />

um eine sinnvolle Kategorisierung der<br />

vorhandenen Inhalte. Das MATLAB-Central-<br />

Team hat daher neue Features wie Sortier-<br />

und Suchfunktionen, RSS-Feeds mit aus-<br />

gewählten Inhalten und Filter entwickelt,<br />

die Lesern helfen, gezielt bestimmte Inhalte<br />

auszuwählen und den Rest auszublenden.<br />

Eines der mächtigsten Features des neu-<br />

en Newsreaders ist das Setzen von Tags.<br />

Tags sind Schlüsselworte, mit denen re-<br />

gistrierte Anwender ihre Threads katego-<br />

risieren können. Ein Thread über die An-<br />

wendung von Simulink zur Optimierung<br />

von Gleichstrommotoren kann beispiels-<br />

weise die Tags „Simulink“, „How To“,<br />

„Optimization“ und „DC Motor“ ent-<br />

halten. Da sämtliche Tags öffentlich sicht-<br />

bar sind, können alle Mitglieder damit<br />

Inhalte nach Themen durchsuchen und<br />

sortieren.<br />

Tags nutzen auf diese Weise das kollek-<br />

tive Wissen der MATLAB Central Leser<br />

zur intelligenten Sortierung und Katego-<br />

risierung der Site-Inhalte – denn die Com-<br />

munity entscheidet selber darüber, wie<br />

Newsgroup-Threads am besten organi-<br />

siert und präsentiert werden.<br />

Eine Tag Cloud ist ein Mittel, um häufige Tags optisch aufzubereiten – beispielsweise<br />

durch Hervorhebung der neuesten oder meistgesuchten Begriffe.<br />

Die neuesten Posts finden Sie unter www.mathworks.de/nn8/newsreader<br />

Curriculum Exchange<br />

Im Curriculum Exchange finden Sie Links<br />

zu MATLAB- und Simulink-basierten Kursmaterialien,<br />

die von erfahrenen Dozenten<br />

aus Mathematik, Technik und Wissenschaft<br />

aus aller Welt beigesteuert wurden. Natürlich<br />

können Sie auch eigene Materialien einstellen.<br />

Sie finden den Curriculum Exchange unter:<br />

www.mathworks.de/nn8/curriculum<br />

Auswahl des Simulationsmodus<br />

in SimElectronics<br />

In SimElectronics können Sie sich bei den<br />

Blöcken Controlled PWM Voltage und<br />

H-Bridge durch Einrichtung des passenden<br />

Simulationsmodus zwischen größerer Modelltreue<br />

und höherer Simulationsgeschwin-<br />

digkeit entscheiden. Im Averaged-Modus<br />

wird mit einer gemittelten Spannung gearbeitet,<br />

was Simulationen beschleunigt. Im<br />

PWM-Modus dagegen wird das Modell mit<br />

Simulink unterstützt AUTOSAR<br />

Ingenieure können jetzt mit Simulink und<br />

Real-Time Workshop Embedded Coder<br />

in derselben Umgebung sowohl AUTOSAR<br />

Software-Komponentenbeschreibungen<br />

importieren und exportieren als auch AU-<br />

TOSAR-konformen Produktionscode erzeugen.<br />

Simulink enthält keine AUTOSARspezifischen<br />

Blöcke, sondern unterstützt<br />

AUTOSAR (Automotive Open System Architecture)<br />

durch Konfigurationseinstellungen.<br />

Das selbe Simulink-Modell kann daher<br />

sowohl als Goldene Referenz für Simulation,<br />

Rapid Prototyping und Codegenerierung in<br />

AUTOSAR- als auch in Nicht-AUTOSAR-<br />

Umgebungen dienen.<br />

www.mathworks.de/nn8/autosar<br />

Kompartiment-Modellierung in<br />

SimBiology<br />

Mithilfe der in SimBiology® ab Release<br />

2008a eingeführten Kompartiment-Modellierung<br />

können Forscher pharmakokinetische<br />

Mo-delle erzeugen und diese<br />

zur Berechnung wichtiger Merkmale von<br />

Arzneistoffen wie etwa Toxizitäten oder<br />

Dosierungen nutzen.<br />

www.mathworks.de/nn8/simbiology<br />

einem pulsweiten-modulierten Signal betrieben,<br />

das mehr Details berücksichtigt.<br />

www.mathworks.de/nn8/simelectronics<br />

Averaged-Modus PWM-Modus<br />

BUCHTIPPS ZU MATLAB UND SIMULINK<br />

Echtzeit-Implementierungen<br />

auf DSPs werden zur<br />

normalen Praktikumsübung<br />

Die Lehre von Nachrichtentechnik und Sig-<br />

nalverarbeitungeitung ist herausgefordert, Stu-<br />

denten über die Theorie hinaus auch Kennt-<br />

nisse zur Implementierung von DSPs zu<br />

vermitteln. Darum hat Dr. Mark A. Yoder,<br />

Professor für Elektrotechnik und Informatik<br />

am Rose-Hulman Institute, multimediale<br />

Übungen zur Signalverarbeitung ausgear-<br />

beitet. Studenten entwickeln mit Simulink<br />

und Real-Time Workshop Programme zur<br />

Echtzeit-Synthese von Musik und imple-<br />

mentieren sie auf DSPs.<br />

„Das Spannende an Simulink ist die Ein-<br />

fachheit, mit der man vom Modell zum funk-<br />

tionierenden Code gelangt“, erklärt Dr. Yo-<br />

der. „Mit C brauchten die Studenten zwölf<br />

Praktikumstage für das, was sie mit Simulink<br />

in drei schaffen. Mit Simulink können sie Al-<br />

gorithmen ohne manuelle Programmierung<br />

auf echten DSPs implementieren. Das gibt<br />

ihnen mehr Raum für Optimierungen und<br />

sie arbeiten gleichzeitig auf einer deutlich<br />

höheren Abstraktionsebene.“<br />

Die Praktika werden von Dr. Yoders Lehr-<br />

buch ergänzt, das in mehreren Sprachen<br />

(Englisch, Koreanisch, Griechisch sowie<br />

vereinfachtes und traditionelles Chine-<br />

sisch) erschienen ist.<br />

Signal Processing First<br />

Von James H. McClellan,<br />

Ronald W. Schafer und Mark A. Yoder<br />

Prentice Hall, 2003<br />

Weltweit unterstützen Lehrbücher<br />

Einführungskurse in die Program-<br />

mierung mit MATLAB<br />

Programmierkenntnisse sind grundlegende<br />

Komponenten jeder ingenieur- oder informationstechnischen<br />

Ausbildung. Gute Programmierer<br />

sind aber vor allem geschickte<br />

Problemlöser. Viele Universitäten lehren<br />

darum schon in ihren Einführungskursen<br />

den Umgang mit MATLAB. Eine Bücherauswahl<br />

zu diesem Themenfeld:<br />

Einstieg in das Programmieren<br />

6 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 7<br />

mit MATLAB<br />

Von Ulrich Stein<br />

Carl Hanser Verlag, 2007<br />

Sprache: Deutsch<br />

Learning Programming using MATLAB<br />

Von Khalid Sayood<br />

Morgan & Claypool Publishers, 2007<br />

Sprache: Englisch<br />

Schnelleinstieg in die Programmierung<br />

mit MATLAB und Simulink<br />

Von Takanobu Aoyama<br />

Kodansya, 2007<br />

Sprache: Japanisch<br />

MATLAB Programming for Engineers, 4e<br />

Von Stephen J. Chapman<br />

Cengage Learning, 2008<br />

Sprache: Englisch<br />

Model-Based Design hält Einzug in<br />

die Lehrpläne<br />

Ingenieure aus der Automobilbranche, der<br />

Luft- und Raumfahrt und vielen anderen<br />

Industrien modellieren, simulieren, implementieren<br />

und verifizieren ihre eingebetteten<br />

Regelungssysteme mit Model-Based Design.<br />

Hochschulen folgen diesem Trend und lehren<br />

die Implementierung von Regelungsstrategien<br />

in Hardware immer häufiger theoretisch<br />

und praktisch unter Einsatz von Model-Based<br />

Design. Hier einige aktuelle Lehrbücher:<br />

Biped Robot Simulation with MATLAB &<br />

Simulink and Model-Based Design<br />

Von Hiroumai Mita<br />

Mainichi Communications Inc., 2007<br />

Sprache: Englisch<br />

Numerical Computing with Simulink,<br />

Volume I: Creating Simulation<br />

Von Richard Gran<br />

SIAM, 2007<br />

Sprache: Englisch<br />

Digital Integrated Circuits: Design-for-Test<br />

using Simulink and Stateflow<br />

Von Evgeni Perelroyzen<br />

CRC Press, Inc., 2007<br />

Sprache: Englisch<br />

Resources<br />

Quellen<br />

ÜBER 1000 BÜCHER ZU MATLAB UND<br />

SIMULINK:<br />

www.mathworks.de/nn8/books<br />

SIMULINK LABS VON MARK YODER<br />

www.mathworks.de/nn8/mlc19770


Analyse der Testdaten einer weltweit<br />

operierenden Flotte von Brennstoffzellen-<br />

Fahrzeugen der Daimler AG<br />

Von Tim McGuire, Taylor Roche und Andreas Weinberger, Mercedes-Benz RDNA, Inc.<br />

Zur Testflotte der Daimler AG (früher DaimlerChrysler) gehören<br />

weltweit über 100 Fahrzeuge mit Wasserstoff-Brennstoffzellenantrieb, die<br />

von ganz normalen Autofahrern im Alltagsbetrieb bewegt werden. Zu<br />

Entwicklungszwecken ist jedes dieser Fahrzeuge mit einem leistungsfähi-<br />

gen Telematiksystem ausgestattet, das Fahrzeugdaten und Nutzungsprofile<br />

aufzeichnet. Diese Informationen reichen von GPS-Daten über Tankfüll-<br />

stände bis hin zur Geschwindigkeit und messen sogar, wieviel Gas der<br />

Fahrer gerade gibt. Das Team von Mercedes-Benz RDNA ist dafür verant-<br />

wortlich, die von dieser Testflotte erzeugten Millionen von Dateien automa-<br />

tisch in MATLAB-basierte Berichte und Web-Applikationen umzuwandeln.<br />

Daimler-Ingenieure nutzten diese Tools,<br />

um Nutzungsprofile zu erstellen, den Kraft-<br />

stoffverbrauch zu ermitteln, Wasserstofftankstellen-Infrastrukturen<br />

zu planen und zu verstehen,<br />

welchen Einfluss die Fahrweise auf Leistung<br />

und Zustand des Fahrzeugs hat. Durch<br />

Auswertung dieser Daten kann Daimler nicht<br />

nur den technischen Zustand aller Fahrzeuge<br />

überwachen, sondern auch die besten Standorte<br />

für Wasserstoff-Tankstellen ermitteln<br />

und Nutzungsprofile erstellen, die die Planung<br />

künftiger Modellpaletten unterstützen.<br />

Aus Nutzungsprofilen gewonnene<br />

Erkenntnisse<br />

Die Fahrzeuge der Daimler-Testflotte werden<br />

unter den unterschiedlichsten klimatischen<br />

und Straßenbedingungen bewegt und sammeln<br />

dabei Datensätze für die Auswertung.<br />

Jedes Fahrzeug überträgt über die Daimler-<br />

eigene Mobilfunk-Infrastruktur Informationen<br />

an eine zentrale Datenbank. Das RDNA-Team<br />

hat dazu ein automatisches Berichtssystem<br />

entwickelt, das die Fahrzeugnutzung analysiert<br />

und den Ingenieuren und Kunden Informationen<br />

über die Einsatzbandbreite der gesamten<br />

Flotte zur Verfügung stellt.<br />

MATLAB und die Database Toolbox dienen<br />

zum Abruf von Kilometerständen und<br />

GPS-Daten aller Fahrzeuge einer bestimmten<br />

Region. Das MATLAB-Skript filtert anomale<br />

Daten heraus, etwa Zeiten, in denen das GPS<br />

keine Wegpunkte meldet oder das Fahrzeug<br />

steht. Danach verarbeitet das Skript alle Daten<br />

und erzeugt ein Diagramm, das die Fahrstre-<br />

cken nach Zeiträumen und geografischer<br />

Region aufschlüsselt (Abb. 1). Früher hatte<br />

Daimler für diese Analysen Excel® eingesetzt.<br />

Die Einrichtung allein verschlang hunderte<br />

Ingenieursstunden und das System musste von<br />

einer Vollzeitkraft gepflegt werden. Für jeden<br />

Durchlauf war eine Vielzahl manueller Arbeitsschritte<br />

erforderlich. Mit dem automatisierten<br />

MATLAB-Skript dagegen kann das Team<br />

jetzt die gleichen Ergebnisse über einen Web-<br />

Browser abrufen.<br />

Abbildung 1 zeigt die gesamte und die<br />

wöchentliche Kilometerleistung einer exemplarischen<br />

Flotte: Mithilfe von GPS-Daten werden<br />

die gefahrenen Strecken regional zugeordnet.<br />

Die so ermittelten regionalen Nutzungsprofile<br />

helfen Daimler bei der Suche nach Kunden und<br />

sinnvollen neuen Standorten. Auf Anfrage eines<br />

Testkunden lassen sich solche Diagramme auch<br />

für jedes einzelne Fahrzeug abrufen und damit<br />

detaillierte Einzelprofile erzeugen.<br />

Im Zeitraum Ende Dezember bis Anfang<br />

Januar bricht die Kilometerleistung im Diagramm<br />

plötzlich ein. Solche saisonalen Trends<br />

helfen Daimler unter anderem, Inspektions-<br />

Kunden in Japan, Singapur, den USA,<br />

Europa, China und Australien nutzen<br />

Daimlers emissionsfreie Fahrzeugflotte<br />

im ganz normalen Alltagsbetrieb. In<br />

den Brennstoffzellen dieser Fahrzeuge<br />

wird durch die Reaktion von Wasserstoff<br />

mit Sauerstoff elektrische<br />

Antriebsenergie für den Motor erzeugt.<br />

Da bei dieser Reaktion ausschließlich<br />

Wasser als Abfallprodukt entsteht,<br />

besitzt die Brennstoffzellen-Technologie<br />

ausgesprochen großes Potenzial zur<br />

Reduzierung das weltweiten Ausstoßes<br />

von Treibhausgasen.<br />

Abb. 1. Analyse der regionalen Kilometerleistung.<br />

8 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 9


Abb. 2 Verbrauchsanalyse. In diesem Beispiel sieht man, dass der Testwagen die Tankstelle mit vollem<br />

Tank verlässt (rot) und dann mit fast leerem Tank wieder zurückkehrt (blau).<br />

Abb. 3. Beispiel für eine auf Testfahrzeugsdaten basierende Analyse eines Einzelereignisses.<br />

und Diagnosetermine zu planen und diese<br />

in Zeiträume mit typischerweise geringer<br />

Fahrzeugnutzung zu legen.<br />

Analyse des Kraftstoffverbrauchs<br />

Mit einem in der Mapping Toolbox und<br />

MATLAB entwickelten Tool können die<br />

Daimler-Ingenieure jede von den Testfahrzeugen<br />

unternommene Fahrt rekonstruieren.<br />

Anwender können damit auf einer<br />

Satellitenkarte die Veränderung des Tankfüllstands<br />

verfolgen, der als noch verfügbare<br />

elektrochemische Energie angegeben wird.<br />

Das Skript wurde ursprünglich zur Erzeugung<br />

statischer Karten im JPEG-Format entwickelt.<br />

Da diese zu unflexibel und zu ungenau<br />

waren, wurde es modifiziert und arbeitet<br />

jetzt mit Keyhole Markup Language- (KML)<br />

Dateien, die flexibler sind und unter Google<br />

Earth eingesetzt werden können.<br />

Die in Abbildung 2 gezeigte Verbrauchsanalyse<br />

verfolgt den Tankstand entlang der gefahrenen<br />

Route. Das MATLAB-Skript verknüpft<br />

dazu GPS- und Füllstandsdaten mittels Funktionen<br />

aus der Mapping Toolbox.<br />

Die Ingenieure können so ermitteln, wie<br />

der Verbrauch vom befahrenen Gelände abhängt.<br />

Durch Überlagerung dieser Daten mit<br />

Standorten von Wasserstoff- und konventionellen<br />

Tankstellen werden zudem wichtige<br />

Informationen zur vorhandenen Service-Infrastruktur<br />

gewonnen.<br />

Das vom Daimler-Team entwickelte MATLAB-<br />

Skript ermöglicht es den Ingenieuren außerdem,<br />

Zusammenhänge zwischen Betriebszuständen<br />

und Standorten jedes einzelnen<br />

Fahrzeuges der Flotte herzustellen. Meldet das<br />

Brennstoffzellen-System beispielsweise einen<br />

Fehlercode, so lässt sich mit MathWorks-Tools<br />

sofort der genaue Standort zum entsprechenden<br />

Zeitpunkt feststellen und anzeigen (Abb. 3).<br />

Befindet sich das Fahrzeug dabei etwa gerade<br />

im Berufsverkehr in der Innenstadt von Los<br />

Angeles, dann kann diese Kenntnis der momentanen<br />

Betriebsbedingungen für eine effizientere<br />

Problemlösung genutzt werden.<br />

Planung der Wasserstoff-<br />

tankstellen-Infrastruktur<br />

Um zukünftige Wasserstofftankstellen an<br />

möglichst sinnvollen Standorten einzurichten,<br />

wurden Gebiete identifiziert, die besonders<br />

häufig von Brennstoffzellen-Fahrzeugen frequentiert<br />

wurden. Mit MATLAB, der Mapping<br />

Toolbox und Google Earth erzeugte Daimler<br />

dazu auf GPS-Daten und Straßenkarten basierende<br />

Ortshistogramme.<br />

Bei einem Ortshistogramm überlagert man<br />

ein geografisches Gebiet mit einem Gitternetz.<br />

Daimler konnte auf diese Weise Standortmeldungen<br />

zusammenfassen und auf einer<br />

Satellitenkarte darstellen. Abbildung 4 zeigt<br />

ein Ortshistogramm von Singapur mit lokalen<br />

Tankfüllstandsdaten. Abbildung 5 gibt<br />

wieder, wie viel Prozent der Zeit ein Fahrzeug<br />

im jeweiligen Planquadrat verbringt. Durch<br />

Kombination beider Diagrammtypen lassen<br />

sich exakt die Gebiete ermitteln, durch die<br />

sich die meisten Fahrzeuge mit niedrigem<br />

Tankfüllstand bewegen. Die Daimler-In-genieure<br />

können so Standortempfehlungen<br />

für neue Wasserstofftankstellen abgeben, die<br />

den Betreibern hoch frequentierte Areale<br />

mit entsprechend reduziertem Betriebsrisiko<br />

bieten und Kunden einen günstig gelegenen<br />

Zugang zu Wasserstoff geben.<br />

Analyse des individuellen<br />

Fahrverhaltens<br />

Die von Daimler unterhaltene Flotte von<br />

Brennstoffzellen-Fahrzeugen operiert weltweit.<br />

Dabei kann die Gaspedalstellung jedes<br />

einzelnen Fahrzeugs analysiert und genutzt<br />

werden, um zu erfahren, wie verschiedene<br />

Fahrzeugtypen von den Kunden genutzt<br />

werden und wie sich die Fahrgewohnheiten<br />

regional unterscheiden. Eine Analyse der<br />

Gaspedalstellung (Abb. 6) hat beispielsweise<br />

gezeigt, dass ein PKW in Nordkalifornien<br />

meist mit moderatem Gaseinsatz gefahren<br />

wird, während ein Lastwagen zumeist ohne<br />

große Zwischenschritte entweder mit sehr<br />

wenig Gas oder mit Vollgas bewegt wird.<br />

Durch diese Analyse erhalten die Ingenieure<br />

Informationen über den Leistungsbedarf<br />

verschiedener Kundentypen und können<br />

Regelungsstrategien und Antriebsstränge auf<br />

deren Verhalten optimieren.<br />

In Korrelation mit GPS-Daten kann diese<br />

Analyse regionale Trends im Fahrverhalten<br />

aufdecken. In Deutschland sieht man beispielsweise<br />

häufig Hochgeschwindigkeitsfahrten mit<br />

Vollgas auf Autobahnen. In Singapur fahren<br />

die Menschen langsamer und gleichmäßiger<br />

und drücken das Pedal selten mehr als 40 %<br />

durch. Die Kenntnis solcher Trends hilft den<br />

Ingenieuren bei der Entwicklung regional optimierter<br />

Regelungsstrategien.<br />

Ein kleines Team beantwortet<br />

große Fragen<br />

Ein deutliches Maß für den Erfolg des RDNA-<br />

Teams ist die sowohl von Ingenieursseite als<br />

auch von Seiten des Managements stetig<br />

wachsende Nachfrage nach seinen Diensten<br />

– es wird mit Anfragen geradezu über-<br />

Abb. 4. Ortshistogramm von Tankfüllständen. Abb. 5. Ortshistogramm der Aufenthaltszeiten.<br />

Abb. 6. Analyse der Gaspedalstellung.<br />

schwemmt. Die Möglichkeit, innerhalb einer<br />

integrierten MATLAB-Umgebung auf die<br />

Datenbank zugreifen zu können, Analysen<br />

durchzuführen, Ergebnisse zu visualisieren<br />

und daraus aussagekräftige Berichte zu erzeugen,<br />

ist von großem Nutzen, weil sich das<br />

Team dadurch auf einfache Weise neue Ressourcen<br />

erschließen kann.<br />

Die Ingenieure müssen dazu mit MATLAB<br />

statt vieler Einzelanwendungen nur ein einziges<br />

Softwarepaket beherrschen. Statt viel<br />

Zeit für die Integration der verschiedensten<br />

Tools aufzuwenden, können sie nützliche<br />

Ergebnisse erzeugen.<br />

Die derzeit eingesetzten Analysen werden<br />

stetig weiterentwickelt und durch neue<br />

Methoden ergänzt, um ein noch besseres<br />

Verständnis des Verhaltens der Brennstoffzellenfahrzeuge<br />

und der erforderlichen Infrastruktur<br />

zu gewinnen. ■<br />

Resources<br />

Quellen<br />

DAIMLER<br />

www.daimler.com/dccom<br />

WEBINAR: Data Analysis with MATLAB Products<br />

www.mathworks.de/nn8/wbnr30346<br />

10 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 11


Einführung in die Objekt-Orientierte<br />

Programmierung mit MATLAB<br />

Von Stuart McGarrity<br />

Die Objekt-Orientierte Programmierung (OO) ist eine Methodik<br />

in der Softwareentwicklung, bei der Zusammenhänge zwischen Daten und<br />

Algorithmen in Form von Objekten dargestellt werden. Dadurch können<br />

wieder verwendbare Komponenten erstellt werden, die sich in größeren<br />

Programmen einfach nach dem Baukastenprinzip zusammensetzen las-<br />

sen. Für Wissenschaftler und Ingenieure ist dies eine effektive Möglichkeit,<br />

komplexe Systeme in Teilkomponenten zu zerlegen, zu verstehen und ein-<br />

mal geleistete Arbeit wieder zu verwenden. Das erleichtert auch erheblich<br />

die Verwaltung komplexer Software-Entwicklungen. Objekt-orientierte<br />

Arbeitsweisen sind von großer Bedeutung für die Entwicklung und Pflege<br />

großer Anwendungen und Datenstrukturen.<br />

In diesem Artikel wird anhand der Implementierung<br />

einer technischen Anwendung<br />

gezeigt, wie objekt-orientierte Methoden in der<br />

MATLAB-Sprache umgesetzt werden können.<br />

Die vorgestellten Beispiele beruhen auf Funktionen<br />

aus MATLAB 7.6 aus Release 2008a.<br />

Anwendungsbeispiel: Analyse von<br />

Daten eines Sensorengitters<br />

Als Sensorengitter (Abb. 1) bezeichnet man<br />

Anordnungen von Sensoren, mit deren Hilfe<br />

Medien wie Luft, Wasser oder der Erdboden<br />

abgetastet werden. Sensorengitter sind oft<br />

linear aufgebaut und werden beispielsweise<br />

für Radar- und Sonaranwendungen, im Mobilfunk<br />

und für viele andere Aufgaben eingesetzt.<br />

Durch eine nach Ankunftszeiten der<br />

Signale geordnete Sammlung von Daten an<br />

unterschiedlichen Punkten im Raum lassen<br />

sich zusätzliche Informationen über das abgetastete<br />

Medium extrahieren.<br />

Abb. 1. Ein Sensorengitter, das zwei entfernte elektromagnetische Quellen mit unbekannten<br />

Empfangswinkeln detektiert.<br />

In der hier geschilderten Anwendung dient<br />

ein Sensorengitter zur Ermittlung der Empfangsrichtung<br />

(Direction of Arrival, DOA)<br />

mehrerer elektromagnetischer Quellen wie<br />

etwa Funkbaken oder Radarsender. Im gezeigten<br />

Szenario sollen die Winkel θ 1 und θ 2 der<br />

beiden Quellen relativ zur Blickrichtung des<br />

Sensorengitters bestimmt werden.<br />

Zusammenstellung der Datenelemente<br />

und Operationen<br />

Vor Beginn der Anwendungsentwicklung muss<br />

geklärt werden, welche Datenelemente benötigt<br />

und welche Operationen an diesen ausgeführt<br />

werden. Wie bei den meisten Anwendungen<br />

muss man zur Ausführung der notwendigen<br />

Operationen eine Reihe verschiedener Arten<br />

von Daten speichern und nachverfolgen. Im<br />

gewählten Beispiel sind dies:<br />

• Anzahl der Sensoren und Samples<br />

• Aufgezeichnete Datensamples<br />

• Abtastrate der Sensoren<br />

• Sensorenabstände<br />

• Wellenlänge(n) der entfernten Quellen<br />

• Wellenausbreitungsgeschwindigkeit<br />

• Name oder Beschreibung des<br />

Sensordatensatzes<br />

Die DOAs der Quellen werden hier mit<br />

einer einfachen FFT-basierten Methode abgeschätzt.<br />

Diese Methode lässt sich in mehrere<br />

Teile herunterbrechen und so als Abfolge von<br />

Operationen implementieren. Zur Vereinfachung<br />

der Entwicklungsarbeit werden aber<br />

zunächst einige Hilfsoperationen implementiert,<br />

die:<br />

• den Datensatz aus synthetischen Daten<br />

oder echten Messdaten erzeugen<br />

• Werte und Parameter des Datensatzes<br />

prüfen und verändern<br />

• die abgetasteten Daten grafisch darstellen<br />

und damit deren Interpretation und Validierung<br />

erleichtern<br />

• das gemittelte Amplitudenquadrat der<br />

FFT des Datensatzes berechnen und es als<br />

Periodogramm darstellen<br />

• die Spitzen des Periodogramms finden,<br />

mit deren Hilfe die DOA der Quellen abgeschätzt<br />

wird<br />

Mit diesen Informationen lässt sich nun<br />

festlegen, welche Teile des Programms durch<br />

Klasseneigenschaften dargestellt werden<br />

und welche als Klassenmethoden implementiert<br />

werden.<br />

Darstellung von Daten durch<br />

Klasseneigenschaften<br />

Als erstes wird eine Klasse definiert, die<br />

das Sensorengitter beschreibt. Diese erste Be-<br />

schreibung enthält nur die Datenelemente, die<br />

als Klasseneigenschaften dargestellt werden.<br />

In MATLAB definiert man Klassen mithilfe<br />

von Klassendefinitions-Files. Eine solche Datei<br />

enthält Codeblöcke aus Schlüsselwörtern<br />

und Endanweisungen, die die verschiedenen<br />

Merkmale der Klasse beschreiben. Das in Abbildung<br />

2 gezeigte Definitions-File beschreibt<br />

die Klasse sads (kurz für Sensor Array Data<br />

Set). Alle zu ihrer Darstellung notwendigen<br />

Datenelemente sind in einem gemeinsamen<br />

Properties-Block zusammengefasst.<br />

Erzeugung von Objekten und Zugriff auf<br />

deren Eigenschaften<br />

Ein Objekt – oder eine Instanz der eben definierten<br />

Klasse lässt sich nun erzeugen durch<br />

die Anweisung:<br />

12 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 13<br />

>> s=sads;<br />

Eigenschaften weist man auf die gleiche einfache<br />

Weise Werte zu wie Feldern einer Struktur,<br />

beispielsweise mit:<br />

>> s.NumSensors=16;<br />

Das Objekt mit allen seinen verfügbaren Eigenschaften<br />

sowie deren momentanen Werten<br />

Abb. 2. Das Klassendefinitions-File sads.m<br />

mit Eigenschaften.<br />

lässt sich nun durch Eingabe seines Namens<br />

anzeigen.<br />

>> s<br />

Die Sprache der Objekt-<br />

Orientierten Programmierung<br />

Eine Software-Anwendung kann die un-<br />

terschiedlichsten Kategorien oder Gegen-<br />

stände abbilden. Dies können physika-<br />

lische Objekte sein wie etwa Fahrzeuge<br />

oder Organismen, virtuelle Gebilde wie<br />

Finanzmärkte, aber auch Informationen<br />

wie etwa Testergebnisse. Bei der objekt-<br />

orientierten Programmierung werden<br />

diese Kategorien als Klassen dargestellt.<br />

Datenelemente oder Zustände werden<br />

dabei als Klasseneigenschaften behan-<br />

delt, Operationen als Klassenmethoden<br />

implementiert.<br />

s =<br />

Ein Objekt ist eine Instanz einer<br />

Klasse – während der Ausführung eines<br />

Programms wird das Objekt gemäß der<br />

Klassendefinition erzeugt und zeigt das<br />

für diese Klasse festgelegte Verhalten.<br />

Alle in MATLAB-Variablen gespeicherten<br />

Werte gehören zu einer bestimmten Klasse.<br />

Zu diesen Werten gehören nicht nur sol-<br />

che, die üblicherweise als Objekte aufge-<br />

fasst werden, wie etwa Zeitreihen- oder<br />

Zustandsraum-Objekte, sondern auch<br />

simple Double-Werte.<br />

sads<br />

properties:<br />

NumSensors: 16<br />

NumSamples: []<br />

Data: []<br />

SampleRate: []<br />

Spacing: []<br />

Wavelength: []<br />

c: 300000000<br />

Name: []<br />

list of methods<br />

Alle Eigenschaften außer NumSensors und<br />

c sind noch leer. In den Funktionen class<br />

und isa sowie mit dem Befehl whos wird


der Datensatz nun als sads-Objekt identifiziert.<br />

Hierin unterscheidet er sich von einer Struktur.<br />

>> class(s)<br />

ans =<br />

sads<br />

Die Fähigkeit, die Klasse einer Variablen<br />

zu identifizieren, ist wichtig, wenn<br />

man ein Programm schreiben möchte, das<br />

den Datensatz verarbeitet. Der Anwender<br />

kann dadurch unmittelbar alle verfügbaren<br />

Datenelemente sowie die daran erlaubten<br />

Operationen ermitteln.<br />

Fehlerkontrolle<br />

Werden Daten durch Strukturen dargestellt,<br />

kann man diese Strukturen jederzeit um<br />

neue Feldnamen erweitern, indem man den<br />

neuen Namen definiert und ihm einen Wert<br />

zuweist. Diese Fähigkeit ist besonders praktisch<br />

in der Experimentier- oder Prototyping-Phase<br />

neuer Algorithmen. Schreibt man<br />

dabei aber einen Feldnamen einmal falsch,<br />

dann erzeugt man unbemerkt ein neues<br />

Feld, das später einen Fehler erzeugen kann,<br />

der sich nur schwer diagnostizieren lässt.<br />

Im Gegensatz zu Strukturen kann man Objekte<br />

nicht beliebig durch Definition neuer Eigenschaftsnamen<br />

und Werte um neue Eigenschaften<br />

erweitern. MATLAB gibt einen Fehler<br />

aus, sobald man den Eigenschaftsnamen eines<br />

Objekts falsch schreibt. Diese zusätzliche Fehlerkontrolle<br />

erweist sich als nützlich, wenn<br />

ein Anwender auf das Objekt zugreift, der<br />

damit nicht so vertraut ist wie der Autor, was<br />

Abb. 3. Das Klassendefinitions-File sads.m mit<br />

Eigenschaftsattributen.<br />

insbesondere bei der Entwicklung umfang–<br />

reicher Anwendungen häufig der Fall ist.<br />

Festlegung von Zugriffsarten und<br />

Zugriffsrechten<br />

Mit Klassen lässt sich der Zugriff auf Objekteigenschaften<br />

umfassend kontrollieren.<br />

So kann man etwa Eigenschaften dynamisch<br />

berechnen lassen, verbergen oder ihre<br />

Veränderung verbieten. Die Art des Zugriffs<br />

auf Eigenschaften wird durch Definition von<br />

Eigenschafts-Attributen im Klassendefintions-<br />

File festgelegt.<br />

Das Klassendefinitions-File aus Abbildung 2<br />

lässt sich entsprechend erweitern, indem man<br />

die aufgelisteten Eigenschaften auf mehrere<br />

neue, nach eindeutigen Eigenschaftsattributen<br />

geordnete Blöcke verteilt (Abb. 3). Im vorliegenden<br />

Fall sind das die Attribute GetAccess,<br />

Constant und Dependent.<br />

Die Veränderung einer Eigenschaft, hier der<br />

Lichtgeschwindigkeit c, verbietet man mit dem<br />

Attribut Constant. Da konstante Eigenschaften<br />

sich nicht ändern, kann man ganz einfach<br />

über den Klassennamen auf sie zugreifen:<br />

>> sads.c<br />

ans =<br />

300000000<br />

Den Schreibzugriff auf eine Eigenschaft<br />

verbietet man durch Setzen des Attributs<br />

SetAccess auf ‚private’. Durch Setzen des<br />

Attributs GetAccess auf ‚private’ ist dagegen<br />

eine Eigenschaft ausschließlich für die<br />

auf sie angewandten Methoden sichtbar. In<br />

Abb. 4. Das im MATLAB Editor angezeigt<br />

Klassendefinitions-File sads.m mit seinen<br />

Metho-den. Der Übersicht halber wurde ein<br />

Großteil des Programmcodes durch die Codefaltungs-Funktion<br />

verborgen.<br />

diesem Beispiel gilt das für die Wavelength-<br />

Eigenschaft.<br />

Namen oder Merkmale von ‚private’-Eigenschaften<br />

kann man beliebig verändern, ohne<br />

dass dies Auswirkungen auf die Nutzer des zugehörigen<br />

Objekts hat. Dieser Verkapselung oder<br />

Encapsulation genannte „Black Box“-Ansatz<br />

zur Definition eines Programmteils verhindert,<br />

dass ein Nutzer eines Objekts von einem bestimmten<br />

Detail oder Merkmal der Implementierung<br />

abhängig wird, das möglicherweise<br />

später verändert wird und damit einen Bruch<br />

im Programmcode erzeugt.<br />

Eigenschaften, die nur auf Anforderung berechnet<br />

werden, versieht man mit dem Attribut<br />

Dependent. Anschließend definiert man eine<br />

Get-Methode, die beim Zugriff auf die Eigenschaft<br />

automatisch aufgerufen wird. Einzelheiten<br />

dazu sind im Kapitel „Zugriff auf Eigenschaften<br />

mit Get- und Set-Methoden“ dieses<br />

Artikels beschrieben. In der vorliegenden Anwendung<br />

sind die Eigenschaften NumSensors<br />

und NumSamples auf Dependent gesetzt.<br />

Implementierung von Operationen<br />

mit Klassenmethoden<br />

Methoden, also auf ein Objekt anwendbare<br />

Operationen, werden als Funktionsliste in<br />

einem Methoden-Block definiert. Eine Klasse<br />

kann viele verschiedene Arten von Methoden<br />

enthalten, von denen jede ihrem eigenen<br />

Zweck dient und auf ganz bestimmte Weise<br />

definiert ist. Im folgenden Abschnitt werden<br />

verschiedene Methodentypen vorgestellt.<br />

Das Definitions-File der Klasse sads wird<br />

zunächst um einen Methodenblock erweitert,<br />

der zur Aufnahme aller künftig erzeugten<br />

Methoden bestimmt ist (Abb. 4).<br />

Definition einer Konstruktor-Methode<br />

Zuerst wird eine Konstruktor-Methode definiert,<br />

mit deren Hilfe der Anwender die<br />

Werte einiger wichtiger Parameter bereits bei<br />

der Erzeugung des Objekts festlegen kann.<br />

Konstruktor-Methoden werden häufig zur<br />

Initialisierung und Validierung von Daten<br />

eingesetzt. Das Objekt wird nun durch folgende<br />

Eingabe erzeugt:<br />

>> s=sads(Daten, Wellenlänge, Abtas-<br />

trate, Abstand, Name);<br />

Implementierung anwendungsspezifischer<br />

14 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 15<br />

Methoden<br />

Danach müssen die Methoden implementiert<br />

werden, die die für den Anwendungszweck<br />

erforderlichen Operationen am Datensatz<br />

ausführen. Die meisten Methoden nutzen<br />

das Objekt als Eingabeargument (beispielsweise<br />

obj) und greifen, wie in der folgenden<br />

Methode gezeigt, durch Referenzierung dieser<br />

Variablen auf die Objekteigenschaften zu<br />

(beispielsweise obj.NumSamples):<br />

function [mags,fflip]=magfft(obj,<br />

zpt)<br />

mag=zeros(obj.NumSamples, zpt);<br />

...<br />

end<br />

Die Referenzierung von Eigenschaften<br />

über Objektvariablen erfordert zwar<br />

zusätzliche Syntax, ist aber nützlich, weil<br />

sie Objektvariablen eindeutig von lokalen<br />

Funktionsvariablen – etwa mag im obigen<br />

Beispiel – abgrenzt.<br />

Aufrufen von Methoden<br />

Methoden werden auf die gleiche Weise aufgerufen<br />

wie Funktionen. Ruft man etwa die Methode<br />

zur Berechnung der DOA der Quellen auf:<br />

>> angles=doa(s)<br />

angles =<br />

-10.1642 18.9953<br />

so erhält man zwei Werte, die relativ nahe an<br />

den tatsächlichen Werten von –10° und 20° in<br />

Abbildung 1 liegen.<br />

Zugriff auf Eigenschaften mit Get- und<br />

Set-Methoden<br />

Durch Definition mit bestimmten Eigenschaften<br />

verknüpfter Set- und Get-Methoden können,<br />

wie bereits erwähnt, Eigenschaften validiert<br />

oder von Bedingungen abhängig gemacht<br />

werden. Die Get-Methode für die Eigenschaft<br />

NumSensors lautet:<br />

function NumSensors=get.NumSensors(obj)<br />

NumSensors=size(obj.Data,2);<br />

end<br />

Get- und Set-Methoden werden beim Zugriff<br />

auf Eigenschaften automatisch aufgerufen,<br />

beispielsweise durch<br />

>> N=s.NumSensors;<br />

Definition von Methoden aus MATLAB-<br />

Funktionen durch Overloading<br />

Durch Overloading lassen sich vorhandene<br />

MATLAB-Funktionen so umdefinieren, dass<br />

sie als Name in der Liste der Klassenmethoden<br />

auftauchen und auf Objekte angewandt<br />

werden können. Auch Operatoren und sogar<br />

Indexierungen können überladen werden, indem<br />

man Methoden mit entsprechenden Namen<br />

einsetzt. In diesem speziellen Fall wird die<br />

plot-Funktion aus MATLAB als Grafik-Methode<br />

überladen und damit eine Visualisierungsfunktion<br />

für den Datensatz geschaffen, die den<br />

meisten Anwendern vertraut ist (Abb. 5).<br />

>> plot(s)<br />

Diese Grafikmethode ist genau auf die vorliegende<br />

Anwendung zugeschnitten: Sie zeigt<br />

den Datensatz auf zweckdienliche Weise an und<br />

enthält alle zu seinem Verständnis benötigten<br />

Informationen. Sie wird nur an Objekten ausgeführt,<br />

für die sie explizit definiert wurde.<br />

Diese Vorgehensweise ist deutlich robuster als<br />

die Alternative, die Reihenfolge der Verzeichnisse<br />

im MATLAB-Pfad so zu manipulieren,<br />

um aus verschiedenen Funktionen gleichen<br />

Namens nur die gewünschte aufzurufen.<br />

Weiterentwicklung der Anwendung<br />

Die in diesem Artikel erzeugte Klasse repräsentiert<br />

den Datensatz für das Sensorengitter und<br />

enthält eine Reihe von Operationen, mit<br />

denen sich Daten analysieren lassen, insbesondere<br />

die zur Richtungsermittlung dienende<br />

Hauptoperation. Diese Klasse kann<br />

nun beispielsweise genutzt werden, um die<br />

Leistung der FFT-basierten Methode in unterschiedlichen<br />

Szenarien zu ermitteln.<br />

Die Anwendung lässt sich mit Hilfe weiterer<br />

OO-Techniken erweitern. Man könnte<br />

beispielsweise:<br />

• Unterklassen vorhandener Klassen mit<br />

Vererbung definieren und dabei die Definition<br />

einer übergeordneten Kategorie<br />

Abb. 5. Durch Overloading erzeugte, für den<br />

Datensatz des Sensorgitters optimierte Grafikmethode.<br />

zur Definition einer spezifischeren Unterkategorie<br />

wiederverwenden.<br />

• Statische Methoden erzeugen, mit denen<br />

sich Operationen für eine Klasse als<br />

Ganzes definieren lassen.<br />

• Handle-Klassen mit Referenzverhalten<br />

definieren und so die Erzeugung von<br />

Datenstrukturen wie Linked Lists ermöglichen<br />

oder um mit großen Datensätzen<br />

arbeiten zu können, ohne diese<br />

kopieren zu müssen.<br />

• Ereignisse und Listener definieren und<br />

damit Eigenschaften oder Aktionen von<br />

Objekten überwachen.<br />

Durch Einsatz solcher Techniken lassen<br />

sich die Beziehungen und das Verhalten<br />

innerhalb der Anwendung noch umfassender<br />

definieren, wodurch sich insbesondere<br />

komplexere Programme leichter handhaben<br />

lassen.<br />

Da die vorgestellte Anwendung mit objektorientierten<br />

Methoden erzeugt wurde, ist sie<br />

nun robust genug, um auch von anderen Anwendern<br />

genutzt und gepflegt zu werden. Sie<br />

lässt sich außerdem problemlos in eine bestehende<br />

Software-Infrastruktur integrieren. ■<br />

Resources<br />

Quellen<br />

RESSOURCEN ZUR OBJEKT-ORIENTIERTEN<br />

PROGRAMMIERUNG<br />

www.mathworks.de/nn8/oop


Northrop Grumman automatisiert die<br />

Implementierung von Software Defined Radios<br />

Von Gus DiPierro, Doug Jaeger, Patrick Ring und Matt Vondal, Northrop Grumman<br />

Für einen Ingenieur in der Kommunikationsindustrie ist Zeit die<br />

mit Abstand knappste Ressource. Neue Wireless-Systeme oder Datenlinks<br />

mit mehreren Megabit/s müssen oft in nur einem Monat implementiert<br />

und einsatzbereit sein. Auch Operational Radios müssen häufig möglichst<br />

schnell rekonfiguriert werden, um weiterentwickelten Standards, neuen<br />

Anforderungen oder wechselnden Einsatzbedingungen genügen zu kön-<br />

nen. Software Defined Radios (SDR) sind Geräte mit der hierfür erforder-<br />

lichen Flexibilität, aber diese Anpassungsfähigkeit hat ihren Preis.<br />

Die Entwicklung flexibler oder für die<br />

verschiedensten Einsatzzwecke tauglicher<br />

SDRs erfordert den Einsatz von viel Zeit, Ressourcen<br />

und praktischer Erfahrung, weil viele<br />

verschiedene Disziplinen wie Signalverarbeitung,<br />

HF Entwurf, die Integration von Mixed-<br />

Signal-Komponenten und die FPGA- und<br />

Softwareentwicklung daran beteiligt sind. Kommunikations-Ingenieure<br />

mit solch umfassender<br />

Erfahrung sind außerdem schwer zu finden.<br />

Northrop Grumman beschloss daher, ein<br />

System namens Hotrod aufzubauen, das die<br />

Implementierung von SDRs automatisiert<br />

(Abb.1). Den Kern dieses integrierten Frameworks<br />

bilden die Modellierungs- und Simulationsfähigkeiten<br />

aus MATLAB, Simulink und<br />

dem Xilinx® System Generator. Mit dem System<br />

sollten vor allem Anwender ohne tiefgehende<br />

theoretische Kenntnisse – etwa junge Ingenieure<br />

oder Techniker – ein funktionsfähiges<br />

SDR anhand von Parametern wie Datenrate,<br />

Modulationsschema und verfügbarer Bandbreite<br />

auf einer hohen Abstraktionsebene spezi-<br />

fizieren und konstruieren können.<br />

Darüber hinaus konnten mit Hotrod beträchtliche<br />

Zeiteinsparungen realisiert werden.<br />

Hotrod erzeugt eine Roharchitektur, die später<br />

von erfahrenen Ingenieuren verfeinert werden<br />

kann. Durch den Einsatz von MATLAB und<br />

Simulink im Hotrod-Framework konnten die<br />

Ingenieure den Prozess des SDR-Entwurfs<br />

automatisieren und solche Systeme nun praktisch<br />

ohne Eingriff von außen synthetisieren,<br />

wodurch sich die Entwicklungszeit für rekonfigurierbare<br />

Plattformen um eine Größenordnung<br />

reduzieren ließ.<br />

Den Ingenieuren war klar, dass Hotrod<br />

erheblich mehr leisten musste, als lediglich<br />

vordefinierte Entwürfe anhand von Spezifikationen<br />

auszuwählen. Es musste sich intelligent<br />

anpassen können, etwa indem es mehrere<br />

Trägerfrequenzen verwendet, um die Vorteile<br />

von nicht direkt benachbarten Spektralbändern<br />

nutzen zu können.<br />

Entwicklungsziele<br />

Die Zielsetzung war nicht, dass Hotrod die gleiche,<br />

vollständig optimierte Lösung erzeugt, zu der<br />

auch ein erfahrenes Team bei gleichen Eingabeparametern<br />

oder Spezifikationen kommt;<br />

vielmehr sollten das Wissen und die Denkprozesse<br />

von Ingenieuren mit jahrelanger Erfahrung<br />

im SDR-Entwurf in ein automatisiertes, regelbasiertes<br />

Expertensystem umgesetzt werden.<br />

Das Team steuerte daher zunächst eine konser-<br />

vative Implementierung an, die Basisanforderungen<br />

des Anwenders erfüllt. Hierzu wurde eine<br />

Bibliothek erprobter Architekturen mit einem<br />

Gerüst verknüpft, in dem sich Funktionsmodule<br />

nach Bedarf neu konfigurieren lassen.<br />

Dieses Wasserfall-Diagramm zeigt, wie die<br />

Nutzungsdichte eines einzelnen Funkkanals<br />

über die Zeit variiert. Selbst am<br />

gleichen Standort trifft man daher immer<br />

auf eine neue, einmalige Funkumgebung.<br />

Im Gegensatz zu konventionellen Radios<br />

lässt sich ein Software Defined Radio<br />

(SDR) dynamisch rekonfigurieren und<br />

damit veränderlichen Anforderungen oder<br />

Umgebungsbedingungen anpassen.<br />

Abb. 1. In der Übersichtsseite des Hotrod Wizard sind<br />

die wichtigsten Charakteristiken für den Entwurf des<br />

SDRs aufgeführt.<br />

16 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 17


Abb. 2. Hotrod-Dialogboxen.<br />

Hotrods Bibliothek mit funktionellen<br />

Blöcken<br />

Die erste Version von Hotrod konnte ausschließlich<br />

FPGA-spezifische Lösungen erzeugen.<br />

Zu diesem Zweck wurde eine Bibliothek<br />

aus Simulink-Blöcken entwickelt, die Hardwaremerkmale<br />

von Funktionen wie Verschlüsselung,<br />

differentielle Enkodierung, Fehlerkorrektur,<br />

Modulation, Synchronisation und<br />

Entzerrung exakt auf FPGA-Strukturen zugeschnitten<br />

modellieren. Diese vor allem mit<br />

dem Xilinx Blockset modellierten, funktionellen<br />

Blöcke waren für die Implementierung auf<br />

Xilinx-FPGAs optimiert und mit standardi-<br />

sierten I/O-Schnittstellen sowie Eingabeparametern<br />

für verschiedenste Konfigurationen<br />

ausgestattet. Dies war relativ leicht möglich,<br />

weil das Team dazu aus einem Fundus<br />

vorhandener Entwürfe schöpfen konnte. Wie<br />

auch viele Softwareingenieure pflegen viele der<br />

Digital-Designer eine Art „Kochbuch“, dem<br />

sie gängige Funktionen bei Bedarf entnehmen<br />

können. Zur Qualitätssicherung erwies es sich<br />

jedoch als notwendig, die korrekte Synthetisier-<br />

barkeit jedes Blockes vor seiner Aufnahme in<br />

die Bibliothek zu verifizieren. Hierzu dienten<br />

sowohl HDL-Simulationen als auch der Auf-<br />

bau von Hardwareprototypen, die dann über<br />

repräsentative Parameterbereiche hinweg getestet<br />

wurden.<br />

Wie Hotrod automatisch ein<br />

Simulink-Modell aufbaut<br />

Ein Experte im Hardwareentwurf könnte allein<br />

mit Simulink- und System Generator-<br />

Blöcken ein für Xilinx-FPGAs optimiertes<br />

Radio Block für Block oder Subsystem für<br />

Subsystem aufbauen. Für weniger erfahrene<br />

Ingenieure oder Techniker ist die Entwicklung<br />

eines SDR aber auch dann noch eine<br />

Herausforderung, wenn sie lediglich funktionelle<br />

Blöcke aus einer Bibliothek auswählen<br />

müssen. Hotrods regelbasierte Engine<br />

wurde so angelegt, dass sie Blöcke aus der<br />

Bibliothek auswählt, richtig im System platziert<br />

und dann alle Parameter den Spezifikationen<br />

gemäß einstellt.<br />

Hotrod automatisiert diesen komplexen<br />

Prozess vor allem mit Hilfe von MATLAB<br />

und Simulink. Viele Funktionen aus der Bibliothek<br />

verfügen über mehrere alternative<br />

Strukturen, die als Blockparameter definiert<br />

sind. Hotrod setzt diese Parameter gemäß<br />

den Spezifikationen des jeweiligen SDR. Es<br />

konfiguriert beispielsweise Modulator-Blöcke<br />

mit einer BPSK-, QPSK- oder 16-QAM-<br />

Modulation und ruft dann Signalverarbeitungs-Methoden<br />

aus MATLAB auf, um die<br />

passenden Filterkoeffizienten zu berechnen.<br />

Nach Zusammenstellung aller Spezifikationen<br />

erzeugt ein Ingenieur in der Regel ein neues<br />

Simulink-Modell, baut die erforderlichen<br />

Blöcke ein und verdrahtet diese dann miteinander.<br />

Hotrod geht analog vor, beschleu-<br />

nigt den Prozess aber mithilfe des MATLAB<br />

Application Programming Interface (API)<br />

und konstruiert automatisch ein funktionsfähiges<br />

Simulink-Modell. Aufgrund der Flexibilität<br />

und der Skripting-Fähigkeiten der API<br />

lässt sich auf einfache Weise eine Schnittstelle<br />

zwischen Simulink und CLIPS, einer kostenlosen<br />

Experten-System Entwicklungsumgebung,<br />

mit dem die regelbasierte Engine<br />

erzeugt wird, erzeugen. Hotrod kann ohne<br />

Eingriff des Anwenders ein MATLAB-Skript<br />

mit allen zum Aufbau des Simulink-Modells<br />

nötigen Befehlen generieren und ausführen.<br />

Dieser Ausschnitt eines automatisch erzeugten<br />

Skripts legt zentrale Blockparameter anhand<br />

von Vorgaben mithilfe der set_param()<br />

Funktion fest. Das Skript nutzt außerdem die<br />

Autorouting-Fähigkeiten von Simulink über<br />

den Aufruf der add_line() Funktion, die<br />

systematisch Signalleitungen und –busse zwischen<br />

den Komponenten erzeugt.<br />

...<br />

src = [‘STC_Library/Modulator IQ‘];<br />

src = hruGetBlkPath(src, LibList);<br />

dst = [syspath ‘/Mod_A‘];<br />

add_block(src, dst);<br />

set_param(dst, ‘Position‘,...<br />

[120 60 150 90]);<br />

set_param(dst, ‘MaskValueString‘,...<br />

‘BPSK 1.0 Mbps‘);<br />

src = [‘xbsIndex_r4/Gateway In‘];<br />

src = hruGetBlkPath(src, LibList);<br />

dst = [syspath ‘/Freq_A‘];<br />

add_block(src, dst);<br />

set_param(dst, ‘Position‘,...<br />

[60 60 90 90]);<br />

set_param(dst, ‘arith_type‘,...<br />

‚Unsigned‘);<br />

set_param(dst, ‘bin_pt‘, ‚0‘);<br />

set_param(dst, ‘n_bits‘, ‚8‘);<br />

add_line(syspath, ‘Freq_A/1‘,...<br />

‘Mod_A/1‘);<br />

...<br />

Arbeiten mit Hotrod<br />

In der Praxis können Anwender mit Hotrod<br />

ein Radio auf einer hohen Abstraktionsebene<br />

beschreiben und dann seine Systemparameter<br />

wie Kapazität, Typ und Hardware-Plattform<br />

in der Sprache des Endnutzers definieren. Dabei<br />

muss noch nicht einmal jeder einzelne Parameterwert<br />

explizit vorgegeben werden. Ein<br />

Entwickler kann beispielsweise die gewünschte<br />

Datenrate, die maximal tolerierbare<br />

Bitfehlerrate (BER) und die Rauschdichte für<br />

einen Datenlink vorgeben und Hotrod die<br />

Berechnung der dazu am besten passenden<br />

restlichen Parameter überlassen.<br />

Abbildung 2 zeigt zwei Dialogboxen für<br />

die Spezifikation von Parametern wie Modulation,<br />

Datenrate, verfügbarer Bandbreite<br />

und nutzbaren Frequenzen. Kann Hotrod<br />

auf einer vorgegebenen Plattform keinen den<br />

Anforderungen genügenden Entwurf erzeugen,<br />

dann gibt es eine beste Schätzung der erzielbaren<br />

Leistung aus - etwa dass angesichts<br />

der Bedingungen statt der vom Anwender<br />

geforderten 100 Mb/s bestenfalls 73 Mb/s erreichbar<br />

sind.<br />

Hotrod bietet weniger erfahrenen Anwendern<br />

einerseits Hilfestellungen an und verbirgt<br />

vor ihnen einige Details, gibt andererseits Experten<br />

dennoch umfangreiche Steuermöglichkeiten.<br />

Mit dem von Hotrod erzeugten<br />

Simulink-Modell kann ein System wie üblich<br />

vor dessen Hardwareumsetzung simuliert werden.<br />

Ingenieure können Stimulus-Signale mit<br />

Simulink erzeugen und die Reaktionen des Systems<br />

mit Scopes überwachen oder die Simu-<br />

lationsergebnisse mit MATLAB visualisieren.<br />

In diesem Stadium können sie den Entwurf in<br />

Simulink aber auch modifizieren, etwa durch<br />

Hinzufügen von Patch-Logiken in HDL. Auf<br />

diese Weise werden gegebenenfalls mehrere<br />

Design-Iterationen durchgeführt, wobei die<br />

Änderungen in Simulink vorgenommen, der<br />

neue Entwurf simuliert und schließlich die<br />

Ergebnisse grafisch dargestellt werden.<br />

FPGA-Implementierung des<br />

Entwurfs<br />

Wenn der Anwender mit dem Entwurf zufrieden<br />

ist, ruft Hotrod den Xilinx System<br />

Abb. 4. Dieses Diagramm zeigt, dass synthetisierte<br />

Radios sich selbst stark ausgelasteten<br />

Spektren anpassen können.<br />

Generator auf und erstellt eine FPGA-Netzliste<br />

aus dem Modell. Der Anwender muss<br />

dazu eine Wrapper-Vorlage für die gewählte<br />

Hardware-Plattform vorgeben, anhand derer<br />

Hotrod beispielsweise mit Xilinx ISE ein passendes<br />

Device Configuration File erzeugen<br />

kann. Für die neuen rekonfigurierbaren Plattformen,<br />

die auf Xilinx Virtex-4- und Virtex-5<br />

Bausteinen basieren, wurde dies mit großem<br />

Erfolg durchgeführt.<br />

Dieser automatisierte Prozess öffnet Mög-<br />

lichkeiten für einige interessante Anwendungen.<br />

So konnte beispielsweise eine automatische<br />

„Spectral Scavenging“-Fähigkeit demonstriert<br />

werden. Ein Scan-Empfänger ermittelt hier<br />

an einem Standort im Feld die Frequenzen<br />

und Periodizitäten aller in einem bestimmten<br />

Frequenzband vorhandenen Signale und gibt<br />

diese an einen Entwickler weiter, der Hotrod<br />

auf einem Laptop ausführt. Nach Vorgabe einer<br />

gewünschten Datenrate entwirft, synthetisiert<br />

Abb. 3. Dieser aus<br />

Xilinx-Blöcken in<br />

Simulink aufgebaute<br />

Modulator ist eine der<br />

vielen Komponenten in<br />

der Hotrod-Bibliothek.<br />

und lädt Hotrod das neue Radio-Design völlig<br />

selbstständig auf eine Plattform. Diese Fähigkeit,<br />

freie Zeit- und Frequenzressourcen einer<br />

beliebigen Umgebung zu nutzen, ohne dazu<br />

permanent ein kompliziertes Radio-System<br />

betreiben zu müssen, könnte einen enormen<br />

Vorteil in Situationen bedeuten, die schnelle<br />

Reaktionen erfordern.<br />

Beschleunigung der SDR-<br />

Entwicklung<br />

Durch die Automatisierung des Entwicklungsprozesses<br />

mithilfe von Simulink und<br />

MATLAB verringert Hotrod erheblich die<br />

Entwicklungszeiten von SDRs. Je nach Größe<br />

des Entwurfs kann ein Ingenieur mit Hotrod<br />

einen FPGA in weniger als einer Stunde implementieren.<br />

Die manuelle Entwicklung eines<br />

Radios mit vergleichbaren Spezifikationen<br />

würde mindestens den zehnfachen Aufwand<br />

benötigen. Selbst wenn ein Ingenieur sämtliche<br />

erforderlichen Schritte kennt, benötigt er<br />

geraume Zeit, um Blöcke auszuwählen, Parameter<br />

einzustellen, Blöcke zu verbinden,<br />

anfallende Datenfiles durch den Syntheseprozess<br />

zu schleusen und nicht zuletzt Zeit für das<br />

unvermeidliche Debugging.<br />

Bei der Entwicklung mit Hotrod kann<br />

man Millionen möglicher Single- und Multi-<br />

Carrier-Konfigurationen erzeugen. Durch<br />

Sammlung erfolgreicher Entwürfe in einer<br />

Datenbank kann Hotrod diese außerdem<br />

später wiederverwenden und so den Prozess<br />

weiter beschleunigen.<br />

Der künftige Erfolg kommunikationstechnischer<br />

Projekte hängt empfindlich davon ab,<br />

wie schnell Ingenieure auf neue Anforderungen<br />

reagieren können. Hotrod wird hierbei<br />

sicherlich eine wichtige Rolle spielen. ■<br />

Resources<br />

Quellen<br />

NORTHROP GRUMMAN<br />

www.northropgrumman.com<br />

Kontakt: matthew.vondal@ngc.com<br />

WEBINAR: Model-Based Design and<br />

FPGA Implementation with Simulink<br />

www.mathworks.de/nn8/wbnr30807<br />

18 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 19


Entwicklung und Implementierung von<br />

Szenarioanalyse-Modellen zur Messung des<br />

operationellen Risikos bei der Intesa Sanpaolo<br />

Von Andrea Colombo, KPMG Advisory, und Stefano Desando, Intesa Sanpaolo<br />

Im Jahr 1995 musste die Barings Bank Insolvenz anmelden, nachdem<br />

sie durch nicht autorisierte Handelsaktivitäten 1,4 Mrd. $ verloren hatte.<br />

Zehn Jahre später hat JP Morgan sich mit der Zahlung von 2,2 Mrd. $ als<br />

Entschädigung im Enron-Skandal einverstanden erklärt. Erst vor kurzem<br />

hat die Société Générale 4,9 Mrd. € verloren, weil mehrfach gegen interne<br />

Kontrollmechanismen für Handelsaktivitäten verstoßen wurde.<br />

Ereignisse wie diese zeigen deutlich, wie<br />

ernst der wirtschaftliche Einfluss operationeller<br />

Risiken zu nehmen ist. Im neuen Basel II-<br />

Abkommen sind diese Risiken definiert als<br />

„das Verlustrisiko, das infolge eines Mangels<br />

oder Versagens von internen Prozessen, Menschen<br />

oder Systemen oder aufgrund externer<br />

Ereignisse entsteht“. Basel II verlangt von Finanzinstituten<br />

die Vorhaltung von Kapital zur<br />

Absicherung unerwarteter Verluste aus operationellen<br />

Risiken.<br />

Bei der Intesa Sanpaolo wurden darum zur<br />

Umsetzung der in Basel II formulierten Richtlinien<br />

vollkommen neue Modelle für Szenarioanalysen<br />

mit MATLAB aufgebaut. Die<br />

Szenarioanalyse ist ein Kernbestandteil des<br />

mit Basel II eingeführten Advanced Measurement<br />

Approach (AMA) zur Abschätzung des<br />

zur Risikoabdeckung erforderlichen Kapitalaufwandes.<br />

Der AMA erlegt Banken strenge<br />

quantitative Anforderungen für die Messung<br />

operationeller Risiken auf. In Berechnungen<br />

für Kapitalmaßnahmen mit einjähriger Haltefrist<br />

muss beispielsweise ein statistisches Konfidenzintervall<br />

von 99,9% eingehalten werden.<br />

Mit MATLAB konnte das Analyseteam vor<br />

allem in der Prototyping- und Entwicklungsphase<br />

viel Zeit einsparen und ausgesprochen<br />

flexibel agieren. Letzteres erwies sich vor<br />

allem in den ersten Konzeptphasen als<br />

vorteilhaft, in denen häufig erhebliche<br />

Veränderungen vorgenommen wurden, um<br />

neue Ideen zu testen.<br />

Implementierung der<br />

Szenarioanalyse<br />

Im Gegensatz zu herkömmlichen Methoden<br />

fließen in Szenarioanalysen Expertenmeinungen<br />

ein und keine historischen Daten. Da die<br />

geplante Szenarioanalyse jeden einzelnen der<br />

inhaltlich sehr breit aufgestellten Geschäftsbereiche<br />

der Intesa Sanpaolo berücksichtigen<br />

sollte, war die Sammlung von Expertenmeinungen<br />

in persönlichen Interviews schlichtweg<br />

nicht möglich. Aus Effizienzgründen wurden<br />

daher Fragebögen ausgearbeitet.<br />

Die größte technische Herausforderung<br />

bei der Entwicklung des Gerüstes und der<br />

einzelnen Tools der Szenarioanalyse bestand<br />

in der Ermittlung, wie hoch die Befragten<br />

die Wahrscheinlichkeit besonders hoher Verluste<br />

einschätzen würden. Das Verfahren und<br />

das Modell sollte den Experten eine Anleitung<br />

sowie Anhaltspunkte bieten, ihnen aber<br />

dennoch die abschließende Verantwortung<br />

für ihre Einschätzungen selbst überlassen.<br />

Das Modell musste darum während seiner<br />

Entwicklung aufwändig kalibriert werden,<br />

beispielsweise durch sinnvolle Wertebereiche<br />

für die Schätzwerte.<br />

Die Intesa Sanpaolo mit Hauptsitz in Turin<br />

und Mailand ist mit 10,7 Millionen Kunden<br />

und einem Marktanteil bei Kundenkrediten<br />

und -einlagen von 19% Italiens führende Bank.<br />

Die Intesa Sanpaolo hat 7,2 Millionen weitere<br />

Klienten in 12 Ländern in Osteuropa und dem<br />

Mittelmeerraum und betreut Kundenaktivitäten<br />

in 34 Ländern weltweit.<br />

„Aufgabe unseres Teams bei der Intesa<br />

Sanpaolo war der Aufbau vollkommen<br />

neuer Modelle für Szenarioanalysen.<br />

MATLAB hat uns dabei viel Prototyping-<br />

und Entwicklungszeit gespart. Seine<br />

große Flexibilität war für uns vor allem<br />

in der ersten Trial-and-Error-Phase von<br />

Nutzen, in der oft grundlegende Verän-<br />

derungen vorgenommen wurden, um<br />

neue Ideen testen zu können.“<br />

20 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 21


Da operationelle Risiken oft durch<br />

außergewöhnliche Ereignisse entstehen, verwendet<br />

die Intesa Sanpaolo zu deren Bemessung<br />

einen Value-at-Risk-Ansatz (VaR).<br />

Die Übernahme des VaR-Ansatzes erforderte<br />

das Aufspüren einer passenden Verteilung<br />

sowie robuste Kalibrierungsanalysen für die<br />

Modellierung und Extrapolation von Daten.<br />

Die Kalibrierung muss sehr gründlich durchgeführt<br />

werden, da VaR ein Maß für so ge nannte<br />

„Tail Risks“ ist, die denkbare, aber bislang<br />

nicht eingetretene Verlustszenarien beinhalten.<br />

Beispielsweise lässt sich das Risiko für einen<br />

Skandal wie den um Enron nur extrapolieren,<br />

weil das Endergebnis weit außerhalb der bis<br />

dato beobachteten Daten liegt. Verschiedene<br />

Modellierungsalternativen können daher zu<br />

völlig verschiedenen Ergebnissen führen.<br />

Zum Entwurf und zur Feinabstimmung<br />

des Szenarioanalyse-Modells waren zwei<br />

Fähigkeiten erforderlich, die MATLAB an-<br />

bietet: Umfassende Sensitivitäts-Analysen<br />

sowie die Sammlung und grafische Auswertung<br />

der dabei erhaltenen Ergebnisse. Angesichts<br />

der großen Bandbreite und Komplexität<br />

des Problems – hunderte Verlustverteilungen<br />

mussten gemeinsam ausgewertet werden –<br />

kann eine solche Analyse äußerst komplex<br />

sein. Die Modellentwicklung wurde daher in<br />

vier Schritte unterteilt: Entwicklung des Kern-<br />

algorithmus, Kalibrierung der Modelleingaben,<br />

Festlegung der in den Fragebögen verwendeten<br />

Wertebereiche und Abschätzung<br />

des Capital at Risk.<br />

Entwicklung des Kernalgorithmus<br />

Der zur Szenarioanalyse (SA) eingesetzte Algorithmus<br />

basiert auf dem im Versicherungswesen<br />

gebräuchlichen Loss Distribution-Ansatz<br />

(LDA), weil die Art der hier auftretenden<br />

Problemstellungen mit operationellen Risiken<br />

vom Prinzip her identisch ist. Die jährliche<br />

Verlustverteilung ist durch Verlusthäufigkeit<br />

und –höhe definiert. Die wichtigsten zur Berechnung<br />

dieser Faktoren benötigten Informationen<br />

sind daher die – zur Kalibrierung<br />

der Frequenzverteilung benötigte – erwartete<br />

Häufigkeit von Verlustereignissen pro Jahr<br />

sowie die – zur Kalibrierung der Schadenshöhen-Verteilung<br />

benötigten – wirtschaftlichen<br />

Folgen der Einzelereignisse. Die Häufigkeits-<br />

und Betrags-Komponenten fließen<br />

unabhängig voneinander ein. Dies hat den<br />

Vorteil, dass die Befragten die beiden Punkte<br />

separat beantworten müssen und das Modell<br />

daraus sowohl qualitative als auch quantitative<br />

Schlüsse ziehen kann.<br />

Der SA-Algorithmus verwendet die in<br />

den Fragebögen gegebenen Antworten als<br />

Eingabewerte, die vom Analyseteam zunächst<br />

zur Kalibrierung der Häufigkeits-<br />

und Schadens-höhen-Verteilungen genutzt<br />

wurden. Die Häufigkeitsverteilung der operationellen<br />

Ver luste lässt sich sowohl durch<br />

eine Poission- als auch durch eine negative<br />

Binomial-Verteilung beschreiben. Gewählt<br />

wurde die Poisson-Verteilung, weil sie eine<br />

diskrete Verteilung mit nur einem Parameter<br />

darstellt und in der Modellierung versicherungstechnischer<br />

oder kumulativer Risiken<br />

üblich ist. Für die Schadenshöhen wurde<br />

eine Lognormal-Verteilung ausgewählt.<br />

Mit MATLAB und der lognrnd() Funktion<br />

aus der Statistics Toolbox schätzte<br />

das Team das aus der Verteilung der Gesamtverluste<br />

resultierende VaR im geforderten<br />

99,9%-Intervall. Der MATLAB-Code dazu<br />

basiert auf einer Monte Carlo-Methode:<br />

%% data<br />

dim=1e6; % number of scenarios<br />

mu=9; % severity (lognormal)<br />

sigma=2; % parameters<br />

lambda=100; % frequency parameter<br />

% (average frequency)<br />

%% Monte Carlo using cellfun<br />

N = num2cell(poissrnd...<br />

(lambda,dim,1));<br />

Loss = cellfun(@(x) sum(lognrnd...<br />

(mu,sigma,x,1)), N, ...<br />

‘UniformOutput’, false);<br />

Loss = cell2mat(Loss);<br />

% aggregate loss<br />

% distribution (empirical)<br />

VaR = prctile(Loss,99.9);<br />

Abb. 1. Zur Kalibrierung von WC durchgeführ-<br />

te Sensitivitätsanalyse. Je niedriger das Wahrscheinlichkeitsniveau,<br />

desto höher das VaR.<br />

Durch den Einsatz von cellfun konnten<br />

Schleifen vermieden und der Code kompakt<br />

gehalten werden.<br />

Kalibrierung der Modelleingaben<br />

Ein zentrales Problem der Szenarioanalyse ist<br />

die Qualität der Modelleingaben. Die maßgeblichen,<br />

für jede Risikoklasse separat erforderlichen<br />

Informationen sind die erwartete jährliche<br />

Häufigkeit (λ) der Verlustereignisse sowie<br />

die wirtschaftlichen Folgen jedes Ereignisses,<br />

die wiederum durch den typischen Verlust (M)<br />

und das Worst-Case-Szenario (WC) beschrieben<br />

werden. Die Frequenzverteilung wurde<br />

daher mit λ kalibriert, die Schadenshöhen-<br />

Verteilung mit M und WC.<br />

Da WC der wichtigste Parameter zur Ermittlung<br />

des Capital at Risk ist, war seine korrekte<br />

Interpretation für das Ergebnis entscheidend.<br />

Abbildung 1 zeigt die Ergebnisse der zur Kalibrierung<br />

von WC durchgeführten Sensitivitäts-Analyse.<br />

Die durchgezogene rote Linie entspricht<br />

einem Wahrscheinlichkeitsniveau von 98%,<br />

die gestrichelte rote Linie 99%. Wenn nun einer<br />

der Befragten einen typischen Verlust von<br />

1 und einen Worst Case von 30 angibt, dann<br />

wäre WC/M gleich 30 und damit das VaR im<br />

ersten Fall gleich 300 und im zweiten 100. Mit<br />

anderen Worten: Wenn man das Modell WC<br />

nicht als 99%-Quantil sondern als 98%-Quantil<br />

der Schadenshöhen-Verteilung interpretiert,<br />

ist das VaR dreimal so hoch.<br />

WC lässt sich auf viele Weisen interpretieren,<br />

beispielsweise als festes (hohes) Quantil der<br />

Schadenshöhen-Verteilung; größter Einzelverlust<br />

in einem bestimmten Zeitraum; oder als<br />

Quantil der Schadenshöhen-Verteilung mit<br />

einem von der Häufigkeit abhängigen Wahrscheinlichkeitsniveau.<br />

Der letzte Ansatz ist<br />

eine Kombination aus einem probabilistischen<br />

Szenario und einer Szenarioanalyse. Für die Interpretation<br />

des typischen Verlustes M wurde<br />

eine analoge Analyse durchgeführt.<br />

Festlegung der in den Fragebögen<br />

verwendeten Wertebereiche<br />

Da die Experten der Intesa einige Werte<br />

schätzen mussten, erschien es sinnvoll, statt<br />

genauer Zahlen eher Wertebereiche anzugeben.<br />

Alle Daten sollten konsistent sein und effizient<br />

gesammelt werden können, aber trotzdem<br />

wichtige Merkmale der einzelnen Geschäfts-<br />

bereiche berücksichtigen (etwa deren Größe<br />

und Umsatzanteil).<br />

Da lineare Systeme homogen sind, konnten<br />

alle Überlegungen durch das Arbeiten in einer<br />

„normalisierten Welt“ vereinfacht werden: Das<br />

Team musste nur einmal (im Voraus) ein für<br />

einen typischen Verlust von 1 normalisiertes VaR<br />

berechnen. Um Zeit zu sparen berechnete man<br />

daher ein normalisiertes VaR, das ausschließlich<br />

vom Verhältnis WC/M-Verhältnis und der<br />

Schadenshäufigkeit abhängt. Abbildung 2 zeigt<br />

die Simulationsergebnisse dreier verschiedener<br />

Schadenshöhen-Verteilungen, Abbildung 3 das<br />

VaR als Funktion von M und WC.<br />

Es stellte sich heraus, dass sich die Ergebnisse<br />

für alle Geschäftsbereiche durch einfache Multiplikation<br />

mit deren typischem Verlust M skalieren<br />

ließen. Der dabei erhaltene Faktor konnte<br />

wiederum zur Skalierung der normalisierten<br />

Schätzwertebereiche für jede Abteilung herangezogen<br />

werden. Durch „check and balance“<br />

der für jede Klasse ermittelten Varianz wurden<br />

schließlich die Wertebereiche optimiert.<br />

Schätzung des Capital at Risk<br />

Zur Ermittlung des Gesamt-VaR der Intesa Sanpaolo<br />

Group aus den Schätzwerten wurde der<br />

LDA-Algorithmus zunächst auf jede Antwort<br />

für sich angewandt und dann alle Antworten<br />

unter Berücksichtigung von Diversifikations-<br />

Effekten summiert.<br />

Um eine lineare, Ziel- oder Rangkorrelation<br />

zu erzeugen, wurde ein Restricted<br />

Pairing-Algorithmus eingesetzt, der einer<br />

Gauss-Copula entspricht. Diese Methode ist<br />

eine verfeinerte Variante des Iman-Conover-<br />

Verfahrens (1982) und erzeugt eine engere<br />

Übereinstimmung der Zielmatrix mit der tatsächlich<br />

erhaltenen Korrelationsmatrix.<br />

Das Modell in der Praxis<br />

Durch Zusammenfügen aller genannten Schritte<br />

entwickelte das Analyseteam ein automati-<br />

siertes Tool, das sämtliche statistischen Berechnungen<br />

ausführt und automatisch Berichte in<br />

Excel und PowerPoint erzeugt. Derzeit wird<br />

die erste Version des AMA-Modells finalisiert,<br />

um damit das aufsichtsrechtlich geforderte Eigenkapital<br />

zu berechnen.<br />

Operational Risk-Manager verwalten mit<br />

dem Tool die gesamte Durchführung der Szenarioanalyse,<br />

von der Festlegung der Wertebereiche<br />

der Antworten bis hin zur Schätzung<br />

des VaR einer Gruppe.<br />

Der Einsatz des Modells lässt sich auf alle<br />

Anwendungen ausdehnen, bei denen Expertenmeinungen<br />

gesammelt und in numerische<br />

Schätzwerte umgesetzt werden müssen<br />

– beispielsweise bei der Ermittlung von<br />

Liquiditätsrisiken im Versicherungswesen,<br />

der Vorhersage das Gasverbrauchs in der Energiewirtschaft<br />

und sogar für Risikoanalysen<br />

im Zusammenhang mit der Exploration und<br />

Förderung von Erdöl.<br />

Man kann außerdem von Versicherungen<br />

abgedeckte Summen in das Modell einbeziehen<br />

und in Monte-Carlo-Simulationen<br />

ermitteln, inwieweit diese zur Minimierung<br />

des Gesamtrisikos beitragen. Auf diese Weise<br />

lässt sich die Szenarioanalyse im Rahmen<br />

von Kosten/Nutzenanalysen zur Abschätzung<br />

der Effektivität von Versicherungspolicen und<br />

zur Optimierung von Deckungssummen und<br />

Selbstbeteiligungen einsetzen.<br />

Das Szenarioanalyse-Modell erfüllt die Anforderungen<br />

von Basel II, denn es schätzt die<br />

Abb. 2. Der Vergleich der Schadenshöhen-Verteilungen<br />

zeigt, dass unterschiedliche Verteilungen<br />

zu verschiedenen VaRs führen.<br />

Abb. 3. 2D- und 3D-Visualisierung der VaR-<br />

Berechnungen. Die Grafiken wurden erzeugt,<br />

um sinnvolle Wertebereiche für die Fragebögen<br />

festlegen zu können und die Sensitivität des VaR<br />

besser zu verstehen.<br />

Kapitalrückstellungen für einjährige Haltefristen<br />

mit 99% Wahrscheinlichkeit ab. Vor ihrem<br />

Einsatz in der Praxis müssen solche Modelle<br />

jedoch von offizieller Seite gründlich geprüft<br />

und genehmigt werden. Dies ist ein Faktor,<br />

der bei der Konzeption und Entwicklung eines<br />

Frameworks für die Szenarioanalyse unbedingt<br />

bedacht werden sollte. ■<br />

Die in diesem Artikel getroffenen Aussagen<br />

geben ausschließlich die Meinung ihrer Autoren<br />

wieder und sind nicht notwendigerweise<br />

offizieller Standpunkt der Intesa Sanpaolo-<br />

Gruppe. Bei Fertigstellung dieses Artikels war<br />

Andrea Colombo noch bei der Intesa Sanpaolo<br />

beschäftigt.<br />

Resources<br />

Quellen<br />

INTESA SANPAOLO<br />

www.intesasanpaolo.com<br />

WEBINAR: using MATLAB to Develop Financial Models<br />

www.mathworks.de/nn8/wbnr30390<br />

22 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 23


Wiederherstellung der Beweglichkeit von<br />

Patienten mit neuromuskulären Behinderungen<br />

durch Funktionelle Elektrostimulation<br />

Von Stephen Trier, Tina Vrabec und Jeff Weisgarber, Cleveland FES Center und Department of Biomedical Engineering<br />

der Case Western Reserve University<br />

Für Patienten mit neuromuskulären Beeinträchtigungen kann die<br />

Funktionelle Elektrostimulation (FES) den früher unerfüllbaren Traum<br />

wahrmachen, gelähmte Arme und Beine wieder bewegen zu können. Je<br />

nach betroffenen Körperteilen und der Schwere einer Behinderung kann<br />

die FES dem Patienten Fähigkeiten wie eigenständiges Gehen, das Greifen<br />

von Objekten oder die Kontrolle über seine Blasenfunktion wiedergeben<br />

und damit seine Lebensqualität deutlich verbessern.<br />

FES-Geräte senden elektrische Impulse<br />

an Elektroden, die entweder implantiert<br />

wurden oder auf der Haut getragen werden<br />

bzw. durch sie hindurch wirken, und<br />

erzeugen oder kontrollieren dadurch Bewegungen.<br />

Zwar weiß man heute sehr gut,<br />

welche Wirkung die Elektrostimulation auf<br />

gelähmte Muskeln und Nerven hat, steht<br />

aber weiterhin vor der Herausforderung,<br />

dies auch nutzbringend in individuellen<br />

Einzelfällen anwenden zu können.<br />

Ein Team der Case Western Reserve University<br />

hat die Universal External Control Unit<br />

(UECU) entwickelt, eine flexible und konfigurierbare<br />

System-Plattform für FES-Anwendungen.<br />

Mit der UECU können Klinik-Ingenieure<br />

die FES-Controller vor Ort neu einstellen und<br />

erhalten dadurch sofort greifbare Ergebnisse.<br />

Verbesserungen brauchen so nur etwa ein<br />

Zehntel der bisher nötigen Zeit.<br />

Im Kern der Entwicklung der UECU<br />

standen drei Ziele. Erstens sollte die UE-<br />

CU-Hardware und -Software modular<br />

und flexibel genug sein, um ein möglichst<br />

breites Spektrum von FES-Anwendungen<br />

zu ermöglichen. Zweitens musste die Entwicklungsumgebung<br />

es Forschern und<br />

Rehabilitations-Ingenieuren mit geringen<br />

Programmierkenntnissen gestatten, Prototypen<br />

rasch zu entwerfen und Forschungsergebnisse<br />

schnell in brauchbare klinische<br />

Systeme zu übertragen. Drittens sollte die<br />

UECU sowohl im Labor als auch im klinischen<br />

Betrieb und beim Patienten zu Hause<br />

effizient arbeiten.<br />

Entwicklung des UECU-Blockset<br />

Simulink war von Anfang an Teil des Projekts.<br />

Als Proof-of-Concept wurde ein Freescale<br />

Evaluierungsboard mit dem Prototypen eines<br />

Funktionelle Elektrostimulation<br />

Forscher des Cleveland FES Center haben<br />

FES-Geräte für verschiedene Anwendun-<br />

gen entwickelt, die u. a.:<br />

• Hand- und Armfunktion bei Patien-ten<br />

mit Tetraplegie wiederherstellen<br />

• Querschnittsgelähmten das Stehen und<br />

Gehen ermögliche<br />

• Die motorische Kontrolle und das Gang-<br />

bild von Schlaganfallpatien-ten verbesser<br />

• Blasen- und Darmfunktionen wie-derher-<br />

stelle<br />

• Den Gewebestatus durch Verhinderung<br />

von Druckgeschwüren verbessern<br />

Bei allen Anwendungen werden Be-<br />

wegungen durch eine Kombination eines<br />

oder mehrerer implantierter Stimulatoren<br />

bzw. in oder auf der Haut angebrachter<br />

Elektroden angeregt.<br />

FES-Geräte greifen direkt in elektrische<br />

Signale ein, durch die Nerven und Muskelgewebe<br />

stimuliert werden, und helfen so, die<br />

Beweglichkeit gelähmter Muskeln wiederherzustellen.<br />

Die Geräte übersetzen Eingaben<br />

von Signalgebern oder anderen Geräten, die<br />

der Patient selber steuern kann, in komplexe<br />

Reizmuster, die dann die gelähmten oder vom<br />

Patienten nicht willentlich steuerbaren Muskeln<br />

zur gewünschten Bewegung anregen.<br />

24 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 25


Abb. 1. Diese von einem Klinikarzt entwickelte Anwendung steuert einen implantierten<br />

Stimulator, durch den ein Patient die Kontrolle über Arm und Hand wiedergewinnt.<br />

Abb. 2. Ein Arzt stellt die Stimulus-Parameter des FES-Gerätes eines gelähmten Patienten ein.<br />

Steuerungsmoduls für Implantate verbunden<br />

und über selbst geschriebene S-Functions<br />

gesteuert. In Simulink erzeugte das Team ein<br />

einfaches FES-Controllermodell und gene-<br />

rierte daraus Code mit Real-Time Workshop.<br />

Das Konzeptsystem bewies, dass sich Stimulationspulse<br />

in Echtzeit mittels eines Simulink-<br />

Modells steuern ließen.<br />

Es folgte die Entwicklung und Verfeinerung<br />

der Software. Hardware-Ingenieure entwarfen<br />

die Elektronik und Software-Entwick-<br />

ler unterteilten die Fähigkeiten der UECU in<br />

Block-Komponenten. So entstand ein eigenes<br />

Simulink-Blockset mit über 75 Blöcken, aus<br />

denen Forscher FES-Anwendungen zusammenfügen<br />

können. Es enthält Blöcke für den<br />

Zugriff auf Eingaben – etwa von analogen<br />

Geräten, Gelenkwinkelsensoren, myoelektrischen<br />

Signalen und einfachen Knöpfen –,<br />

Blöcke zur Erzeugung von Stimulationspulsen<br />

und Blöcke für Meldungen der UECU durch<br />

Ton- oder Lichtsignale.<br />

Zusammen mit dem Blockset wurde außerdem<br />

durch Abwandlung des generischen<br />

Real-Time Target für Simulink ein spezielles<br />

Real-Time Workshop-Target entworfen, das<br />

den C-Compiler und andere Tools passend zur<br />

UECU konfiguriert. Durch dieses Target können<br />

Ingenieure im Krankenhaus ein Simulink-<br />

Modell mit einem einzigen Build-Befehl in ein<br />

kompiliertes, auf der UECU lauffähiges Programm<br />

umwandeln.<br />

Beschleunigung der Entwicklung<br />

von FES-Anwendungen<br />

Mithilfe der UECU-Blockbibliothek können<br />

die Forscher Software für FES-Steuerungen<br />

modular und damit bis zu zehnmal so schnell<br />

entwickeln wie bisher.<br />

FES-Anwendungen wurden bislang von<br />

hierfür geschulten Programmierern in C<br />

entwickelt. Diese Entwicklergruppe war für<br />

mehrere, auf unterschiedliche Behinderungen<br />

spezialisierte klinische Arbeitsgruppen<br />

zuständig. Wünschte eine solche Gruppe<br />

eine neue Funktion oder Fähigkeit, gab sie<br />

dies an die Entwickler weiter, wartete auf die<br />

neue Software-Version und testete diese dann<br />

am Patienten. Die Programmierung in C ist<br />

zwar flexibel, der gesamte Programmierpro-<br />

zess war indessen langwierig und verschleppte<br />

dadurch die Entwicklung von der Idee bis zur<br />

Realisierung. Schlimmer wog aber, dass die<br />

Programmierer oft nicht gleich verstanden,<br />

was genau von ihnen verlangt wurde. Eine<br />

nutzbringende Veränderung nahm daher<br />

häufig mehrere Iterationen in Anspruch.<br />

Durch die Simulink-basierte UECU kann<br />

sich die zentrale Entwicklergruppe nun ganz<br />

auf den Aufbau und die Pflege eines einzelnen<br />

Systems konzentrieren. Dieses System ist<br />

so flexibel und einfach zu bedienen, dass jede<br />

klinische Arbeitsgruppe ihre eigenen FES-<br />

Anwendungen in kürzester Zeit entwickeln<br />

und verfeinern kann (Abb. 1).<br />

Rapid Prototyping<br />

Aus fertigen Entwürfen in Simulink generieren<br />

die Forscher mit Real-Time Workshop Programmcode.<br />

Neue Ideen werden häufig durch<br />

Rapid Prototyping mit xPC Target getestet, weil<br />

sich so einfachere Floating-Point-Entwürfe auf<br />

PC-kompatibler Hardware validieren lassen,<br />

bevor man die Implementierung auf portable<br />

Fixed-Point-Hardware überträgt.<br />

Nachdem das Grundkonzept des Controllers<br />

entwickelt wurde, erfolgt die Feinabstimmung<br />

der Stimulusparameter, mit denen er die<br />

Muskeln des Patienten kontrolliert (Abb. 2).<br />

Die UECU ist mit persistentem Speicher<br />

ausgestattet, in dem die Stimulusdaten als<br />

Tabelle abgelegt sind. Bei einer Armsteuerung<br />

etwa dient diese Tabelle zur Übersetzung eines<br />

skalaren Steuersignals in einen Vektor mit 8 bis<br />

16 Werten, die die auf die Nerven und Muskeln<br />

des Arms aufgebrachten Pulse definieren. Zur<br />

Optimierung dieser Reizprofile werden die<br />

Signalstärken für einen Startpunkt auf vorläufige<br />

Werte gesetzt und dann anhand der Reaktionen<br />

des Arms des Patienten verfeinert (Abb.<br />

3). Weil Muskeln mit der Zeit stärker oder<br />

schwächer werden, muss man diesen Prozess<br />

von Zeit zu Zeit wiederholen, damit das FES-<br />

System effektiv arbeitet.<br />

Von der Idee zur Implementierung<br />

in einem Tag<br />

Ein Fall aus der Zeit einer der ersten Versionen<br />

einer myoelektrischen Steuerung verdeutlicht,<br />

wie schnell sich heute neue Ideen<br />

im klinischen Alltag umsetzen lassen. Ein<br />

auswärtiger Patient war der erste, bei dem<br />

eine Steuerung eingesetzt werden sollte, die<br />

die elektrische Aktivität eines völlig gesunden<br />

Muskels zur Kontrolle eines gelähmten<br />

Muskels nutzt. Der Controller arbeitete zu<br />

dieser Zeit allerdings noch nicht so gut wie<br />

die heutige Version und das System funktionierte<br />

nicht wie gewünscht.<br />

Dennoch wollte das Team den Patienten<br />

mit einem System heimschicken, mit dem<br />

er seine Hände auch benutzen konnte. Am<br />

letzten Tag seines Aufenthalts hatte einer<br />

der Rehabilitations-Ingenieure eine Idee:<br />

Warum sollte man nicht eine durch Pusten<br />

und Saugen bediente Strohhalm-Steuerung<br />

ausprobieren, wie sie für Rollstühle eingesetzt<br />

wird? In nur einem Tag entwickelte der<br />

Ingenieur einen Algorithmus, der dieses<br />

neugartige Feature in die Steuersoftware<br />

integriert. Mit Simulink und dem UECU-<br />

Blockset konnte er den Algorithmus testen<br />

und eine funktionierende Version erzeugen,<br />

bevor der Patient das Krankenhaus verließ.<br />

Ohne das UECU-Blockset hätte er dazu<br />

mindestens eine Woche gebraucht.<br />

Die UECU in der Forschung<br />

Die UECU dient derzeit vornehmlich der<br />

Wiederherstellung der Beweglichkeit von Extremitäten.<br />

Einige Forschergruppen nutzen sie<br />

aber auch zur Entwicklung weiterer Einsatzmöglichkeiten.<br />

Ein graduierter Medizintechnik-Student<br />

hat beispielsweise mit Simulink<br />

und der UECU ein experimentelles Programm<br />

zur Blasenkontrolle entwickelt. Da für Tests<br />

nur eine begrenzte Anzahl von UECUs zur<br />

Verfügung steht, modellierte, simulierte und<br />

testete er die Steuerlogik komplett in Simulink.<br />

Als schließlich Hardware für ihn frei wurde,<br />

konnte er das Modell in nur einer Stunde erfolgreich<br />

auf die echte UECU übertragen.<br />

Eine andere Gruppe von Studenten im Aufbaustudium<br />

hat mit der UECU einen Detektor<br />

entwickelt, der spürt, wenn ein Gegenstand<br />

aus der Hand rutscht. Mit piezoelektrischen<br />

Sensoren und in einer in Simulink entwi-<br />

ckelten Signalverarbeitung ausgestattet, kann<br />

ein solcher Schlupfdetektor wichtige Rückmeldungen<br />

an Patienten geben, die kein Gefühl in<br />

den Händen haben.<br />

Weitere Verbesserung der<br />

Lebensqualität<br />

Mit der UECU können die klinischen Ar-<br />

beitsgruppen der Case Western University<br />

immer ausgefeiltere Anwendungen aufbauen<br />

und so ihren Patienten immer umfang-<br />

reichere Kontrollmöglichkeiten zur Verfügung<br />

stellen. So lassen sich beispielsweise zwei Implantate<br />

mit nur einem Controller steuern.<br />

Mit ihrer Rapid Prototyping-Umgebung<br />

haben die Ingenieure neuro-prothetische<br />

Anwendungen für viele verschiedene Verletzungsarten<br />

erzeugt. Über 30 UECUs werden<br />

derzeit von Patienten genutzt.<br />

Abb. 3. Mit diesem Profil-Editor lassen sich<br />

schnell und einfach neue Reizprofile erstellen und<br />

FES-Anwendungen feinabstimmen.<br />

Für die Zukunft ist ein DSP-Modul geplant,<br />

das die Rechenleistung der UECU<br />

deutlich steigert und damit die Verarbeitung<br />

anspruchsvollerer Aufgaben ermöglicht.<br />

In den nächsten fünf bis zehn Jahren sollen<br />

die UECU zusammen mit den jeweiligen<br />

Implantaten durch vollständig implantierbare<br />

Systeme ersetzt werden. Patienten hätten<br />

so die Möglichkeit, sich ganz natürlich<br />

zu bewegen und auch an Orten von der Stimulation<br />

zu profitieren, die ihnen heute noch<br />

verschlossen sind, etwa beim Duschen oder<br />

Schwimmen. Es existieren bereits Labor-<br />

Prototypen des neuen Systems, auf denen<br />

mit Simulink und Real-Time Workshop<br />

erzeugte Programme laufen. ■<br />

Resources<br />

Quellen<br />

CLEVELAND FES CENTER http://fescenter.case.edu<br />

BIOMEDIZINTECHNISCHE ABTEILUNG DER<br />

CASE WESTERN RESERVE UNIVERSITY<br />

http://bme.case.edu<br />

THE MATHWORKS IM HOCHSCHULWESEN<br />

www.mathworks.de/nn8/academia<br />

26 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 27


Verifikation von Code mit hohen<br />

Anforderungen an die Zuverlässigkeit<br />

Von Paul Barnard, Marc Lalo und Jim Tung<br />

Bei vielen Embedded Software-Projekten besteht das Hauptziel der<br />

Verifikation im Aufspüren möglichst vieler Programmfehler in möglichst kurzer<br />

Zeit. Die üblicherweise eingesetzten statischen Analyse-Tools eignen sich zwar<br />

gut zur Identifikation offensichtlicher Mängel, können aber nicht die Fehler-<br />

freiheit des Quellcodes beweisen. Sie bieten daher keinen Schutz vor endlosen<br />

Debugging-Schleifen und einer langatmigen Code-Überprüfung. Deutlich<br />

schwerer wiegt aber, dass mit ihnen Fehler mit potenziell katastrophalen Folgen<br />

unentdeckt bleiben. Für Anwendungen, die eine hohe Zuverlässigkeit erfordern,<br />

ist dies nicht akzeptabel. PolySpace Code-Verifikationsprodukte verfolgen einen<br />

alternativen Ansatz: Sie beweisen die Fehlerfreiheit mathematisch.<br />

Zum Nachweis der Fehlerfreiheit muss<br />

ein Verifikationstool jeden Codeabschnitt<br />

vollständig untersuchen und seine Zuverlässigkeit<br />

unter Berücksichtigung jedes möglichen<br />

Datenwertes verifizieren. Die hierbei zu<br />

bewältigenden Aufgaben sind mathematisch<br />

oft so anspruchsvoll, dass sie die Fähigkeiten<br />

eines normalen Fehlerdetektions-Tools übersteigen.<br />

Ein solches Tool muss beispielsweise:<br />

• Numerische Algorithmen lösen<br />

• Pointer interpretieren<br />

• Programmkonstrukte wie Schleifen<br />

oder If-Then-Else-Anweisungen und<br />

unentscheidbare Bedingungen mathematisch<br />

modellieren<br />

• Alle sprach-spezifischen Konstruktionen<br />

lesen können<br />

Außerdem muss es über leicht verständliche<br />

und einfach zu bedienende Diagnosefähigkeiten<br />

verfügen (Abb. 1).<br />

Lösung numerischer Algorithmen<br />

Einer der im folgenden Programmabschnitt<br />

BEWIESEN<br />

Formale Methode: Abstrakte Interpretation<br />

Grün<br />

zuverlässig<br />

Rot<br />

fehlerhaft<br />

Grau<br />

tot<br />

Orange<br />

unbewiesen<br />

static void Pointer_Arithmetic ()<br />

{<br />

int tab[100];<br />

int i,*p = tab;<br />

for(i = 0; i < 100; i++, p++)<br />

*p = 0;<br />

if(get_bus_status() > 0)<br />

{<br />

if(get_oil_pressure() > 0)<br />

*p = 5;<br />

else<br />

itt;<br />

}<br />

i = random_int();<br />

if (random_int()) *(p-i) = 10;<br />

if (0


Code-Verifikation mit PolySpace<br />

Delphi Diesel Systems entwickelt für OEM-<br />

Kunden aus dem Automobilsektor Diesel-Ein-<br />

spritztechnologien, die Motoren leiser, spar-<br />

samer, schadstoffärmer und durchzu gsstärker<br />

machen. Delphi setzt PolySpace-Produkte<br />

ein, um Software-Module direkt nach deren<br />

Erstellung zu analysieren bevor Funktions tests<br />

fertiger Bauteile durchgeführt werden.<br />

CSEE Transport, ein führender Entwickler<br />

von Signal- und Leitsystemen für Hoch-<br />

geschwindigkeitszüge, nutzt PolySpace-<br />

Produkte zur Verifikation der Sicherheitssoft-<br />

ware seiner Signalsysteme. Mit klassischen<br />

Verifikationsmethoden lassen sich bestimmte<br />

Fehler im handgeschriebenen ADA-Code<br />

grund sätzlich nicht entdecken. CSEE Trans-<br />

port setzt PolySpace-Produkte außerdem<br />

zur Validierung einzelner Module vor deren<br />

Integration ein.<br />

Lesen sprachspezifischer Konstruktionen<br />

In bestimmten Sprachen, auch in C++, kann<br />

hinter einer einzigen Programmzeile eine<br />

große Menge von Rechenoperationen stecken.<br />

Durch objekt-orientierte Konstrukte wie Vererbung,<br />

Polymorphismen und Templates wird<br />

C++-Code außerdem schnell unübersichtlich.<br />

Das Verifikations-Tool muss mathematisch<br />

ermitteln, welche Anweisungen in jeder Programmzeile<br />

ausgeführt werden.<br />

Umfassende Unterstützung ans-<br />

pruchsvollster Aufgaben<br />

Der Beweis absoluter Fehlerfreiheit von<br />

Programmcode ist eine sehr aufwändige<br />

Aufgabe, die formale mathematische Methoden<br />

und ein vollständiges Verständnis<br />

der Semantik einer Sprache voraussetzt.<br />

PolySpace-Produkte machen diese Aufgabe<br />

durchführbar, weil sie den Quellcode<br />

verifizieren, ohne ihn zu kompilieren oder<br />

auszuführen. Eben dieses Arbeiten mit dem<br />

Das NATO HAWK Management Office<br />

(NHMO) unterhält verschiedene komple-<br />

xe, missionskritische Anwendungen für<br />

das Boden-Luft-Raketensystem HAWK.<br />

Zur Einhaltung von Zuverlässigkeits-Stan-<br />

dards muss das NHMO-Team Laufzeitfeh-<br />

ler identifizieren und beseitigen. Es führt<br />

hierzu umfassende Analysen zur Dyna-<br />

mik der Anwendungen mit PolySpace-<br />

Produkten durch, anhand derer Prioritä-<br />

ten für Code-Reviews festgelegt werden.<br />

Quellcode garantiert die Anwendbarkeit der<br />

Methode auf handgeschriebenen, automatisch<br />

generierten und beliebig aus beiden<br />

Sorten gemischten Programmcode.<br />

Neben der Code-Verifikation testen<br />

PolySpace-Tools auch auf MISRA-C-Konformität.<br />

Für Anwendungen mit automatisch<br />

aus Simulink-Modellen oder UML-Diagrammen<br />

generiertem Programmcode gibt<br />

es außerdem PolySpace Link-Produkte, die<br />

die Verifikationsergebnisse wieder mit dem<br />

Ursprungsmodell verknüpfen.<br />

PolySpace-Produkte haben sich in allen<br />

Bereichen der Entwicklung und Verifikation<br />

von Software bewährt (siehe Kasten).<br />

So wurden sie etwa als Quality-Gate für<br />

von unterschiedlichen Entwicklerteams<br />

geschriebenen Code eingesetzt oder in die<br />

Submit- und Build-Phasen für separate Software-Komponenten<br />

integriert und konnten<br />

so den Entwicklern ein schnelleres Feedback<br />

geben. Zusammen mit den Link-Produkten<br />

Die GlucoLight Corporation hat ein<br />

auf Bildverarbeitung beruhendes,<br />

nicht-invasives System zur Dauer-<br />

überwachung des Blutzuckerspiegels<br />

entwickelt. Zur Sicherstellung der Zu-<br />

verlässigkeit der von Zulieferern be-<br />

reitgestellten Embedded Software<br />

sowie zur Vorbereitung auf die FDA-<br />

Zertifizierung wurde neuer oder verän-<br />

derter C++-Code klassenweise mit<br />

PolySpace-Produkten verifiziert. Hier-<br />

bei konnten mit PolySpace fehleranfäl-<br />

lige Strukturen identifiziert und in Folge-<br />

versionen des Codes ersetzt werden.<br />

für Modellierungs-Tools wie Simulink und<br />

Rhapsody wurde PolySpace außerdem in<br />

der Designphase eingesetzt, um Systemingenieuren<br />

oder Algorithmenentwicklern durch<br />

Analysen des automatisch generierten<br />

Codes beim Aufspüren von Schwächen eines<br />

Entwurfs zu helfen. ■<br />

Resources<br />

Quellen<br />

POLYSPACE PRODUKTE<br />

www.mathworks.de/nn8/polyspace<br />

WHITE PAPER: Code-Verifikation und Identifikation von<br />

Laufzeitfehlern durch abstrakte Interpretation<br />

www.mathworks.de/nn8/abstract_interpretation<br />

PRODUKTE VON DRITTANBIETERN<br />

Implementierung von Simulink-Modellen für<br />

Echtzeit-Systeme<br />

Produkte von Drittanbietern helfen Ingenieuren bei der plattformspezifischen Implementierung von Simulink-Modellen für die un-<br />

terschiedlichste Echtzeit-Hardware. FPGA- und DSP-Entwickler können damit etwa synthetisierbaren HDL- und C-Code direkt aus<br />

Simulink-Modellen erzeugen und ihre Entwürfe auf Prototyping-Boards ausführen. Blocksets helfen Ingenieuren bei der Code-<br />

generierung für Mikrocontroller-basierte Systeme; Simulationsschnittstellen für Prozessoren stellen neue Testmöglichkeiten bereit.<br />

Entwickler von Industrieanwendungen können ihre Modelle auf speziellen Industriesteuerungen implementieren und testen. An-<br />

wendungsspezifische Modelle für den Automobilsektor und andere Einsatzbereiche beschleunigen Hardware-in-the-Loop-Tests.<br />

FPGAs UND DSPs<br />

PROC_HILs ist ein Beschleunigungs-Tool für<br />

die Implementierung von Simulink Modellen<br />

auf Altera-FPGAs, die auf PCI- und PCIe-basierten<br />

PROC-Boards von GiDEL integriert<br />

sind. Es erweitert den aus Simulink-Modellen<br />

generierten Code um Logikelemente für die<br />

Host-Schnittstelle und GiDEL-IPs und verwendet<br />

Altera Werkzeuge zur Erzeugung der<br />

bausteinspezifischen Programmdateien, die<br />

auf dem FPGA laufen. GiDEL www.gidel.com<br />

DSP- and FPGA-Plattformen von Innovative<br />

unterstützen das Rapid Prototyping mit Chips<br />

von Xilinx und Texas Instruments. Mit Blöcken<br />

für alle On-Board-I/Os lassen sich Algorithmen<br />

rasch in Simulink entwerfen und für Simulations-Plattformen<br />

von Innovative umsetzen.<br />

Innovative Integration www.innovative-dsp.com<br />

MICROCONTROLLER<br />

Die RAppID ToolBox ist ein Simulink-Blockset<br />

und -Target für Freescale MPC55xx-<br />

Prozessoren. Mit dem grafischen Tool lassen<br />

sich Initialisierungsroutinen, Gerätetreiber<br />

und Echtzeit-Scheduler für alle MPC55xx-<br />

ba-sierten MCUs erzeugen und konfigurieren.<br />

Freescale Semiconductor www.freescale.com<br />

Die integrierte Entwicklungsumgebung<br />

(IDE) MPLAB ® bietet eine vollständige Tool-<br />

Kette zur Entwicklung von Anwendungen<br />

für PIC® MCUs und dsPIC® DSCs von Microchip.<br />

Die MPLAB-Blocksets unterstützen<br />

spezifische Bausteine und Peripherieeinheiten.<br />

Simulink Modelle können vom Software-<br />

Entwickler aus der MPLAB Entwicklungsumgebung<br />

heraus ausgewählt und mittels<br />

Real-Time Workshop Embedded Coder in<br />

C-Code übersetzt werden. Dieser kann in<br />

MPLAB IDE Projekte importiert werden.<br />

Microchip Technology www.microchip.com<br />

INDUSTRIE-CONTROLLER<br />

Mit M-Target for Simulink lassen sich<br />

SimulinkAlgorithmen auf dem modularen<br />

M1-Steuerungssystem von Bachmann implementieren.<br />

M-Target enthält Blöcke für I/O-<br />

Funktionen und unterstützt den Datenaustausch<br />

über den externen Modus von Simulink.<br />

Bachmann Electronic www.bachmann.info<br />

Die Vorstellung von Drittanbieterprodukten auf dieser Seite ist ein Service für unsere Leser. The MathWorks<br />

hat diese Produkte weder getestet noch stellt deren Erwähnung eine Empfehlung dar.<br />

HARDWARE-IN-THE-LOOP-<br />

30 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 31<br />

SYSTEME<br />

Der dSPACE Simulator ist ein modulares HIL-<br />

System, das von einer Vielzahl von Simulink<br />

Modellen für Automobil-ECU Anwendungen<br />

unterstützt wird. Die Modelle können auf dem<br />

HIL System ausgeführt werden, nachdem der<br />

Code mittels Real-Time Workshop erzeugt<br />

wurde. dSPACE GmbH www.dspace.com<br />

Das LABCAR HIL-System ist eine virtuelle Test-<br />

umgebung für Automobil-ECUs, die erweiterbare<br />

Simulink Modelle der Fahrzeugdynamik<br />

sowie Subsytseme wie Motoren, Getriebe und<br />

Bremsen beinhalten. ETAS www.etas.com<br />

RT-LAB implementiert die HIL-Simulation<br />

von Simulink Modellen auf handelsüblichen<br />

Multicore-PCs und PC-Clustern. RT-LAB<br />

verknüpft dazu den mit Real-Time Workshop<br />

generierten Code mit hoch optimierten<br />

Laufzeit-Bibliotheken. OPAL-RT Technologies<br />

www.opal-rt.com<br />

Resources<br />

Quellen<br />

PRODUKTE UND DIENSTLEISTUNGEN VON DRITT-<br />

ANBIETERN<br />

www.mathworks.de/nn8/connections


CLEVE’S CORNER<br />

Experimente mit MATLAB<br />

Von Cleve Moler<br />

Experiments with MATLAB ist ein kostenloses Online-Buch für Lehrer und Schüler höherer Klassenstufen, die über<br />

den Schulstoff hinaus gehende Materialien suchen. Die vorgestellten Übungen und Materialien sind aber auch<br />

für Studienanfänger sicher eine Bereicherung.<br />

MATLAB ist heute eine umfassend<br />

ausgestattete Sprache für technische<br />

Berechnungen. In den späten 70ern hat<br />

es jedoch als ziemlich einfaches „Matrix<br />

Laboratory“ begonnen. Experiments with<br />

MATLAB knüpft an diese Labor-Tradition<br />

des Tüftelns an und stellt Experimente in<br />

angewandter Mathematik sowie mit technischen<br />

Berechnungen vor. Kurze Code-<br />

Abschnitte und kleine Programme, von<br />

denen viele interaktive Grafiken enthalten,<br />

geben dem Leser eine kleine Einführung in<br />

die Programmierung mit MATLAB.<br />

Um die im Buch gezeigten Experimente<br />

vollständig durchführenzu können, sollte<br />

man in etwa über Oberstufen-Kenntnisse<br />

in Geometrie, Algebra und Trigonometrie<br />

verfügen. Daneben beschäftigt sich Experiments<br />

with MATLAB mit Themen, für die<br />

man ein wenig über Analysis, Matrizen und<br />

Differentialgleichungen wissen sollte – es<br />

setzt aber keine abgeschlossenen Kurse in<br />

diesen Fächern voraus.<br />

In diesem Cleve’s Corner stelle ich einige<br />

bearbeitete Auszüge aus Experiments with<br />

MATLAB vor, die Ihnen eine Vorstellung<br />

vom Niveau und Tonfall des Buches vermitteln<br />

sollen. Ich möchte Sie ermutigen, die Experimente<br />

nicht nur durchzulesen, sondern<br />

sie zu verändern und zu verbessern.<br />

Iterationen<br />

Im ersten Kapitel werden Sie aufgefordert,<br />

sich eine Zahl auszusuchen – irgendeine Zahl<br />

– und diese in in MATLAB einzugeben:<br />

x = Ihre Zahl<br />

Geben Sie nun die Anweisung<br />

x = sqrt(1+x)<br />

Abb. 1. Dieses MATLAB-Diagramm zeigt, dass der 13. Tag eines Monats mit<br />

größerer Wahrscheinlichkeit ein Freitag ist als ein anderer Wochentag.<br />

ein und führen sie mithilfe der Pfeilnach-oben-<br />

und Enter-Taste immer wieder<br />

aus, bis sich die angezeigte Zahl nicht mehr<br />

verändert.<br />

Hier die ersten und letzten Zeilen für<br />

einen Anfangswert von x = 3:<br />

3.000000000000000<br />

2.000000000000000<br />

1.732050807568877<br />

1.652891650281070<br />

1.628769980777233<br />

. . .<br />

1.618033988749915<br />

1.618033988749901<br />

1.618033988749897<br />

1.618033988749895<br />

1.618033988749895<br />

Ganz gleich, mit welchem Wert man beginnt:<br />

Die Reihe konvergiert immer zum selben<br />

Endwert von 1.6180339… . Erkennen Sie<br />

diese Zahl?<br />

Dieses Experiment regt außerdem dazu<br />

an, über die beiden Bedeutungen des Gleichheitszeichens<br />

nachzudenken: Als Zuweisungsoperator<br />

in Programmiersprachen und als<br />

Symbol für Gleichheit in Gleichungen.<br />

Wie würden Sie folgende Gleichung lösen?<br />

— --—<br />

x = √1 + x<br />

Finger weg vom Computer! Lösen Sie diese<br />

im Kopf oder schriftlich. Quadrieren Sie<br />

beide Seiten, bringen Sie alles auf eine Seite<br />

des Gleichheitszeichens. Sie erhalten die<br />

quadratische Gleichung:<br />

x 2 - x – 1 = 0<br />

Abb. 2. Durch Gegenüberstellung der Funktion y = a x und deren genäherter Ableitung kann man bei sukzessiver Variation der Basis die Euler-Zahl e entdecken.<br />

Mithilfe der quadratischen Ergänzung<br />

finden Sie deren positive Wurzel:<br />

φ = (1 + √5)/2 = 1.6180339 …<br />

Die Lösung ist wieder unser alter Freund,<br />

der Goldene Schnitt.<br />

Kalender und Uhren<br />

Viele Menschen halten Freitag den 13. für<br />

einen Unglückstag – aber wie oft kommt<br />

er eigentlich vor? Wie hoch ist die<br />

Wahrscheinlichkeit, dass der 13. Tag eines<br />

Monats auf einen Freitag fällt? Die spontane<br />

Antwort ist 1/7, doch das stimmt nicht<br />

ganz. Durch die Schaltregeln des Gregorianischen<br />

Kalenders wiederholen sich nämlich<br />

exakt alle 400 Jahre oder 4800 Monate<br />

die gleichen Wochenabläufe.<br />

Ein einfaches Experiment mit den datenum-<br />

und weekday-Funktionen aus MATLAB kann<br />

abzählen, wie oft der 13. Tag eines Monats<br />

auf einen Freitag fällt (Abb. 1). Dabei zeigt<br />

sich, dass der 13. mit höherer Wahrscheinlichkeit<br />

auf einen Freitag fällt als auf<br />

irgendeinen anderen Wochentag. Die<br />

Wahrscheinlichkeit ist 688/4800 = 0,143333<br />

und damit etwas größer als 1/7 = 0,142857.<br />

Die Exponentialfunktion<br />

Viele Schüler, die gerade einen Anfängerkurs<br />

in Analysis absolviert haben, denken leider,<br />

dass die Ableitung von e x gleich xe x-1 ist. Wie<br />

kann man also die Zahl e und die Funktion<br />

e x besser verstehen? MATLAB kann Potenzen<br />

berechnen, etwa y = a x für einen Skalar a<br />

und einen Vektor x.<br />

Experiments with MATLAB<br />

32 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 33<br />

a = 2<br />

x = 0:0.01:2<br />

y = a.^x<br />

Man kann damit außerdem ohne jede<br />

formale Regel oder Differenzierung ungefähre<br />

Steigungen und damit genäherte<br />

Ableitungen berechnen, etwa mit:<br />

h = 0.0001<br />

yp = (a.^(x+h) – a.^h)/h<br />

Die Anweisung<br />

plot(x,[y; yp])<br />

erzeugt das erste in Abbildung 2 gezeigte<br />

Diagramm. Die blaue Kurve ist der Graph<br />

von 2 x . Die grüne Kurve ist die genäherte<br />

Ableitung. Der Graph der genäherten Ableitung<br />

hat die gleiche Form wie der Graph<br />

der Ursprungsfunktion, liegt aber darunter.<br />

Tatsächlich ist das Verhältnis yp./y eine von<br />

x unabhängige Konstante.<br />

Mit dem M-File expqui kann man nun<br />

die blaue Linie mit der Maus verschieben<br />

und so die Basis von a x variieren. Das zweite<br />

Diagramm zeigt den Graphen für 3 x und<br />

seine genäherte Ableitung. Die grüne Kurve<br />

liegt nun oberhalb der blauen. Auf dem Weg<br />

von a = 2 nach a = 3 durchläuft man die im<br />

dritten Diagramm gezeigte Situation, in der<br />

Inhalt<br />

■<br />

■<br />

■<br />

■<br />

■<br />

■<br />

■<br />

■<br />

■<br />

■<br />

■<br />

■<br />

■<br />

■<br />

■<br />

■<br />

Iterationen<br />

Fibonacci-Zahlen<br />

Kalender und Uhren<br />

T-Puzzle<br />

Matrizen<br />

Fraktal-Farn<br />

Magische Quadrate<br />

Magie mit TicTacToe<br />

Spiel des Lebens<br />

Mandelbrot-Menge<br />

Lineare Gleichungen<br />

Google PageRank<br />

Gewöhnliche Differentialgleichungen<br />

Exponential-Funktion<br />

Räuber und Beute<br />

Flachwasser-Gleichungen<br />

Experiments with MATLAB steht zum<br />

kostenlosen Download unter<br />

www.mathworks.de/nn8/moler<br />

die grüne und blaue Kurve deckungsgleich<br />

sind. Der hierbei für a angezeigte Wert ist<br />

gleich e und die Funktion ist e x , eine der<br />

wichtigsten mathematischen Funktionen.<br />

Eine wichtige aber doch subtile mathematische<br />

und rechentechnische Frage haben wir


CLEVE’S CORNER CONTINUED<br />

hier ausgeklammert: Wie berechnet MATLAB<br />

eigentlich a x , ohne e zu kennen? Nun, ehrlich<br />

gesagt kann MATLAB das nicht. Die gesamte<br />

Argumentation ist also ein Zirkelschluss.<br />

Falls aber jemand genau danach<br />

fragt, ist das ein wundervoller Anlass für<br />

eine Diskussion.<br />

Lösung des verzwickten T-Puzzles<br />

Das in Abbildung 3 gezeigte Puzzle habe<br />

ich zum ersten Mal in der Puzzling World<br />

in Wanaka, Neu Seeland, gesehen. Es ist das<br />

beliebteste Puzzle im angeschlossenen Shop.<br />

Bereits seit dem 19. Jahrhundert ist es als<br />

Spielzeug verbreitet und seit etwa hundert<br />

Jahren ein typischer Werbeartikel.<br />

Abbildung 4 zeigt die elektronische<br />

MATLAB-Version der vier Teile. Sie haben<br />

alle die gleiche Breite, aber unterschiedliche<br />

Höhen. Aus einem ist ein etwas seltsames Stück<br />

herausgeschnitten, wodurch ein unregelmäßiges<br />

Fünfeck entsteht. Mit MATLAB<br />

und dem GUI des T-Puzzle M-Files aus dem<br />

Beispiel im Buch kann man die Teile mit der<br />

Maus verschieben. Die vier Teile lassen sich<br />

zu einem großen „T“ zusammensetzen, wie es<br />

in Abbildung 5 gezeigt ist. Was ist dabei aber<br />

mit den ganzen 45°-Winkeln passiert – und<br />

was mit dem merkwürdigen Ausschnitt?<br />

Unser Programm zur Manipulation des<br />

T-Puzzles arbeitet mit komplexer Arithmetik.<br />

Die Koordinaten des größten Puzzleteils<br />

etwa werden durch den komplexen Vektor<br />

z = [0 1 1+2i 3i]<br />

wiedergegeben, in dem die horizontalen<br />

und vertikalen Dimensionen durch reelle<br />

bzw. imaginäre Komponenten wiedergegeben<br />

werden.<br />

Die Übersetzung der Reaktion des Puzzleteils<br />

auf Mausbewegungen wird auf einfache<br />

Weise durch Vektorsubtraktion bewerkstelligt:<br />

z = z – w<br />

Mit der folgenden Anweisung wird das<br />

Teil beispielsweise um den Winkel θ um sein<br />

Zentrum gedreht:<br />

mu = mean(z)<br />

omega = exp(i*theta)<br />

z = omega*(z – mu) + mu<br />

Abb. 3. Dieses Holzpuzzle wird per Hand gelöst. Bild mit freundlicher Genehmigung<br />

von Shop New Zealand, www.shopnewzealand.co.nz<br />

Abb. 4. Dieses elektronische Puzzle wird mit<br />

komplexer Arithmetik manipuliert.<br />

Wo sonst lernt man, dass die komplexe<br />

Multiplikation mit e iθ einer Drehung<br />

entspricht?<br />

Das Game of Life<br />

John Horton Conways Game of Life wurde<br />

im Oktober 1970 auf dem Titelblatt des<br />

Magazins Scientific American vorgestellt und<br />

© Shop New Zealand<br />

Abb. 5. Setzen Sie dieses T zusammen.<br />

hat seitdem eine kleine aber treue Anhängergemeinde.<br />

Es ist ein Beispiel für die Komplexität,<br />

die man mit scheinbar einfachen<br />

zellulären Automaten erzeugen kann.<br />

In „Life“ ist das Universum ein unendliches<br />

zweidimensionales rechteckiges Gitter.<br />

Seine Bevölkerung besteht aus als lebendig<br />

markierten Gitterzellen. Diese Bevölkerung<br />

entwickelt sich in diskreten, als Generationen<br />

bezeichneten Zeitschritten weiter.<br />

Das Schicksal jeder einzelnen Zelle wird bei<br />

jedem Schritt durch die Vitalität ihrer acht<br />

nächsten Nachbarn eindeutig bestimmt. Die<br />

Regel dazu lautet: Eine lebendige Zelle mit<br />

zwei lebendigen Nachbarn oder aber jede<br />

beliebige Zelle mit drei lebendigen Nachbarn<br />

ist im nächsten Schritt lebendig.<br />

Diese trügerisch einfache Regel erzeugt<br />

eine unglaubliche Vielfalt an Mustern,<br />

Rätseln und ungelösten mathematischen<br />

Problemen.<br />

Das in Experiments with MATLAB vorgestellte<br />

MATLAB-Programm Game of Life<br />

ist ein sehr schönes Beispiel für die Verwendung<br />

dünnbesetzter Matrizen-Strukturen.<br />

Sein Universum ist nämlich eine<br />

Abb. 6. Bill Gospers Gleiter-Kanone.<br />

dünnbesetzte Matrix X mit einer endlichen<br />

Zahl von Einsen, die die lebendigen Zellen<br />

markieren. Die Größe dieser Matrix passt<br />

sich durch Erweiterung jedem beliebigen<br />

Bevölkerungswachstum an.<br />

Die Anweisungen<br />

n = size(X,1);<br />

p = [n 1:n-1];<br />

34 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 35<br />

q = [2:n 1];<br />

Y = X(:,p)+X(:,q)+X(p,:)+X(q,:)+...<br />

X(p,p)+X(q,q)+X(p,q)+X(q,p);<br />

erzeugen eine zweite dünnbesetzte Matrix<br />

Y mit Elementen der Werte 0 bis 8, die die<br />

lebendigen Nachbarn zählen. Die Grundregel<br />

des Spiels des Lebens lässt sich nun<br />

in Form einer einzigen weiteren MATLAB-<br />

Anweisung festhalten:<br />

X = (X & (Y == 2)) | (Y == 3);<br />

Da jede beliebige Population dieser Regel<br />

gehorcht, wird der Ausgang des Spiels eindeutig<br />

durch die Gestalt seiner Anfangspopulation<br />

bestimmt. In Bill Gospers als Gleiterkanone<br />

bekannter Anfangspopulation<br />

(Abb. 6) oszilliert der Zentralteil der Kanone<br />

und stößt einen unendlichen Strom<br />

von Gleitern aus, die das Sichtfeld verlassen<br />

und sich im leeren Raum verlieren. Gospers<br />

Konfiguration war die erste, die eine unbegrenzte<br />

Population erzeugen konnte.<br />

Weitere Experimente<br />

Sich die Übungen in Experiments with<br />

MATLAB nur durchzulesen macht nicht<br />

halb so viel Spaß – und ist nicht halb so<br />

lehrreich – wie sie selbst durchzuspielen.<br />

Wenn Sie das Gezeigte also interessant finden,<br />

oder wenn Sie Schüler oder Studenten<br />

kennen, die daran interessiert sein könnten,<br />

werfen Sie einen Blick auf Experiments with<br />

MATLAB. Und dann machen Sie die Experimente<br />

selber, diskutieren Sie darüber oder<br />

verbessern Sie diese. Programme, und besonders<br />

MATLAB-Programme, sind Vehikel<br />

zur Kommunikation mit anderen Menschen<br />

und nicht nur dazu da, um Befehle an eine<br />

Maschine zu übermitteln. ■<br />

Quellen<br />

ExPERIMENTS WITH MATLAB<br />

www.mathworks.de/nn8/moler<br />

CLEVE’S CORNER COLLECTION<br />

www.mathworks.de/nn8/clevescorner


PROGRAMMING PATTERNS<br />

Typische Stolperfallen beim Programmieren<br />

in MATLAB und wie man sie vermeidet<br />

Von Loren Shure<br />

Genau wie in natürlichen Sprachen gibt es auch in Programmiersprachen Idiome. Das Beherrschen dieser syntaktischen oder<br />

inhaltlichen Nuancen ist wesentlich, um anvisierte Programmierziele zu erreichen – ganz gleich, ob ein Programm robust sein<br />

oder einfach die richtige Antwort geben soll. Hier sind einige Tipps und Best Practices zu sprachlichen Feinheiten in MATLAB.<br />

DIE ERWARTETE ANTWORT ERHALTEN<br />

Computerprogramme machen genau das, was ihr Programmcode<br />

ihnen vorschreibt. Eine exakte Notation ist darum entscheidend.<br />

Hier einige Beispiele dafür.<br />

Matrizen- und elementweise Multiplikation<br />

Angenommen, Sie wollen die korrespondierenden Elemente zweier<br />

großer, quadratischer Matrizen A und B miteinander multiplizieren.<br />

Mit A*B erhalten Sie zwar ein Ergebnis der erwarteten Dimensionen<br />

(denen von A), aber die falschen Zahlen. Denn statt die<br />

korrespondierenden Elemente in A und B zu multiplizieren, haben<br />

Sie gerade die Matrizen multipliziert. Um nur die korrespondierenden<br />

Elemente zu multiplizieren müssen Sie A.*B eingeben:<br />

>> A = [1 2; 3 4]; B = [1 0; -1 1];<br />

>> C = A.*B<br />

C =<br />

1 0<br />

-3 4<br />

>> D = A*B<br />

D =<br />

-1 2<br />

-1 4<br />

Transponierte und konjugiert Transponierte<br />

In MATLAB kann man mit reell- und komplexwertigen Arrays mit<br />

doppelter Genauigkeit arbeiten, ohne diese gesondert behandeln zu<br />

müssen. Trotzdem muss der Code dafür richtig formuliert sein.<br />

Für reelle Matrizen ist das Ergebnis von A' und A.' identisch.<br />

Für Matrizenoperationen an komplexwertigen Arrays ist der<br />

Transponierungs-Operator (') oft der richtige. Aus komplexen<br />

Matrizen dagegen erzeugt er die konjugiert Transponierte. Um<br />

diese Konjugation zu vermeiden, verwendet man den nicht-konjugierten<br />

Transponierungs-Operator (.'):<br />

>> C= A+i*B<br />

C =<br />

1.0000 + 1.0000i 2.0000<br />

3.0000 - 1.0000i 4.0000 + 1.0000i<br />

>> E = C'<br />

E =<br />

1.0000 - 1.0000i 3.0000 + 1.0000i<br />

2.0000 4.0000 - 1.0000i<br />

>> F = C.'<br />

F =<br />

1.0000 + 1.0000i 3.0000 - 1.0000i<br />

2.0000 4.0000 + 1.0000i<br />

Imaginäre Einheit i oder j<br />

MATLAB definiert die Konstanten i und j beide als sqrt(-1),<br />

die Imaginäre Einheit. Wenn Sie aber i oder j als Variablen in<br />

Ihrem Code verwenden und der nachfolgende Code ebenfalls<br />

eine dieser beiden Konstanten nutzt, kann dies zu unerwarteten<br />

Fehlern führen.<br />

Um dieses Problem zu vermeiden, verwenden Sie andere Variablennamen<br />

oder löschen Sie die Variablen nach Gebrauch:<br />

36 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 37<br />

>> for i=1:3<br />

end<br />

M =<br />

M =<br />

M =<br />

M{i} = magic(i+2)<br />

[3x3 double]<br />

[3x3 double] [4x4 double]<br />

[3x3 double] [4x4 double] [5x5 double]<br />

>> clear i<br />

Befehls /Funktions-Dualität<br />

Die korrekte Zeichensetzung kann in MATLAB wichtig sein,<br />

besonders in Klammerausdrücken. Die folgenden MATLAB-Anweisungen<br />

sind äquivalent:<br />

foo baz 5<br />

foo('baz','5')<br />

Durch Weglassen der Klammern beim Aufruf einer Funktion<br />

ruft man die Funktion als Befehl auf. MATLAB behandelt dann<br />

alle Argumente nach dem Funktionsnamen als Strings. Um das<br />

Ergebnis eines Funktionsaufrufs einer Variablen zuzuweisen, verwendet<br />

man daher die Funktionsform, nicht die Befehlsform.<br />

Vergleich von Fließkommazahlen<br />

Der Standarddatentyp in MATLAB sind Fließkomma-Doubles.<br />

Da der Double-Datentyp Zahlen mit einer endlichen Zahl von<br />

Bits (64) darstellt (davon 53 Bits für die Mantisse, also etwa 16<br />

Dezimalstellen), lassen sich viele Zahlen wie etwa 1/7 nicht exakt<br />

darstellen. Beim Vergleich von Rechenergebnissen empfiehlt<br />

es sich daher, nicht auf exakte Gleichheit von Fließkommazahlen<br />

zu prüfen. Mit eps(target) erhält man dagegen ein Ergebnis, das<br />

dem Ziel mit angemessener Toleranz entspricht.<br />

Im folgenden Beispiel wurde willkürlich das Zehnfache der<br />

kleinstmöglichen Toleranz gewählt:<br />

>> A = 1/7<br />

A =<br />

0.142857142857143<br />

>> B = 0.142857142857143<br />

B =<br />

0.142857142857143<br />

>> dAB = A-B<br />

dAB =<br />

-1.387778780781446e-016<br />

>> AapproxB = abs(A-B) < (10 * eps(B))<br />

AapproxB =<br />

1<br />

ERSTELLUNG ROBUSTER PROGRAMME<br />

Man sollte sich frühzeitig Gedanken machen, welche Probleme bei<br />

der Nutzung eines Programms durch den Endanwender auftreten<br />

könnten und so Fehler oder falsche Berechnungen vermeiden.<br />

Hier darum einige Tools zur Erzeugung robuster Programme.<br />

Verwendung von MException statt lasterror<br />

Um sicherzustellen, dass ein Programm robust ist, muss man potenzielle<br />

Fehler frühzeitig abfangen und beheben. Nutzt man hierfür<br />

die ältere lasterror-Methode, riskiert man allerdings, dass<br />

noch nicht abgearbeitete Fehler überschrieben werden. Mit dem<br />

in R2007b eingeführten MException-Objekt vermeidet man dies:<br />

Altes Codeschema<br />

try<br />

doSomething;<br />

catch<br />

end<br />

rethrow(lasterror)<br />

Neues Codeschema<br />

try<br />

doSomething;<br />

catch myException<br />

end<br />

rethrow(myException) % or throw or throwAsCaller


Verwendung von try/catch Exception statt der<br />

Zwei-Argumenten-Form von eval<br />

Mit der Funktion eval lässt sich praktisch jede gültige MATLAB-Anweisung<br />

ausführen. Da aber das Argument für eval ein String ist, kann<br />

MATLAB nicht vorhersehen, was hier eigentlich ausgeführt wird und<br />

so eventuell bestimmte Optimierungen nicht nutzen. Das gleiche gilt<br />

für die Ausführung von eval mit zwei Argumenten, bei der die zweite<br />

Eingabe nur ausgewertet wird, wenn bei der Ausführung der ersten ein<br />

Fehler auftritt. Mit try/catch wird der Code dagegen für MATLAB<br />

transparent. Das folgende Skript fügt einen Wert value in die Struktur<br />

S ein, sofern value existiert; andernfalls bleibt das Strukturfeld leer:<br />

Altes Codeschema<br />

eval(['S.field = value'],'S.field = []')<br />

Neues Codeschema<br />

try<br />

S.field = value;<br />

catch myException<br />

end<br />

S.field = [];<br />

Verwendung dynamischer Feldnamen statt eval<br />

Um ein beliebiges Feld eines struct-Arrays zu erzeugen, verwendet<br />

man statt eval dynamische Feldnamen. Mit dynamischen<br />

Feldnamen lassen sich Felder eines struct-Arrays ansteuern,<br />

ohne dass deren Name beim Schreiben des Programms explizit<br />

bekannt sein muss. Dynamische Feldnamen machen außerdem<br />

MATLAB-Code effizienter und sie erleichtern MATLAB die Programmanalyse.<br />

Die folgenden zwei Programme erzeugen eine<br />

Struktur S mit den Feldnamen magic1, ..., magic5:<br />

Altes Codeschema<br />

n = 5;<br />

for ind = 1:n<br />

end<br />

eval(['S.magic' int2str(ind) '= magic(ind+2)']);<br />

Neues Codeschema<br />

n = 5;<br />

for ind = 1:n<br />

end<br />

S.(['magic' int2str(ind)]) = magic(ind+2);<br />

Definition von Funktionen durch Function Handles<br />

statt Strings<br />

Bei einigen MATLAB-Funktionen muss eine andere Funktion<br />

als Eingabeargument definiert werden. Die Funktion fzero dient<br />

beispielsweise zur Auffindung von Nullstellen anderer Funktionen.<br />

Mit den folgenden Codebeispielen findet man den Wert in der<br />

Nähe von Punkten pts, an denen die Funktion sin gleich 0 ist.<br />

Definiert man eine auszuwertende Funktion als String, dann<br />

muss MATLAB den Pfad nach ihr durchsuchen. Geschieht diese<br />

Berechnung innerhalb einer Schleife, dann sucht MATLAB die<br />

Zielfunktion bei jedem Durchlauf erneut, denn der Pfad könnte<br />

sich geändert haben und sich nun auf eine andere Zielfunktion<br />

beziehen. Ein Function Handle legt dagegen die Zielversion eindeutig<br />

fest und MATLAB kann die Zielfunktion aufrufen, ohne sie<br />

in jedem Durchlauf wieder suchen zu müssen.<br />

Altes Codeschema<br />

pts = 0:1000;<br />

x = zeros(size(pts));<br />

fun = 'sin';<br />

for npts = 1:length(pts)<br />

end<br />

x(npts) = fzero(fun,pts(npts));<br />

Neues Codeschema<br />

pts = 0:1000;<br />

x = zeros(size(pts));<br />

fun = @sin;<br />

for npts = 1:length(pts)<br />

end<br />

x(npts) = fzero(fun,pts(npts));<br />

Datentypen von Variablen in Programmen durch-<br />

gängig beibehalten<br />

MATLAB versucht durch Optimierung von Berechnungen<br />

Speicher zu sparen. Führt man ein M-File aus, dann untersucht<br />

MATLAB zunächst das File und versucht es dann in optimaler<br />

Weise auszuführen. Wenn diese Analyse feststellt, dass die<br />

Variable D einen bestimmten Datentyp hat, etwa double, und<br />

dass dieser durchgehend unverändert bleibt, kann MATLAB<br />

seine Optimierungen anbringen.<br />

Altes Codeschema<br />

38 TheMathWorks News&<strong>Notes</strong> | 2008 TheMathWorks News&<strong>Notes</strong> | 2008 39<br />

D = 17.34;<br />

doSomething;<br />

D = single(D);<br />

Neues Codeschema<br />

D = 17.34;<br />

doSomething;<br />

S = single(D);<br />

Ausgabeargumente bei load verwenden<br />

MATLAB-Funktionen können sich auf unerwartete Weise verhalten,<br />

wenn MATLAB nicht “sehen” kann, dass einige der im<br />

Programm verwendeten Namen Variablen sind. Um dies zu vermeiden,<br />

verwendet man eine explizite Ausgabevariable mit load.<br />

MATLAB kann das Programm dann besser analysieren und erkennt<br />

zuverlässiger, welche Codeelemente Variablen sind. Eine Variable<br />

kann aber auch unvermittelt erzeugt werden, wenn man mit<br />

load einen Datensatz lädt, ohne dessen Variablen zu definieren.<br />

Angenommen, der Datensatz mydat.mat enthält die Variable var<br />

und ein Programm soll diese anzeigen.<br />

function mydisp<br />

load mydat<br />

disp(var)<br />

Wenn man mydisp ausführt, erhält man diesen Fehler:<br />

>> mydisp<br />

??? Input argument "x" is undefined.<br />

Error in ==> var at 55<br />

if isinteger(x)<br />

Error in ==> mydisp at 3<br />

disp(var)<br />

Er tritt auf, weil var auch der Name einer Funktion im MATLAB-<br />

Pfad ist und MATLAB dies bei seiner Analyse festgestellt hat, bevor<br />

es das Programm ausführt.<br />

Zur Vermeidung dieses Fehlers gibt es zwei Möglichkeiten:<br />

function mydisp1<br />

load mydat3 var<br />

disp(var)<br />

function mydisp2<br />

S = load('mydat.mat;);<br />

disp(S.var)<br />

In beiden Fällen versteht MATLAB, welche Elemente im Programm<br />

Variablen sind (var und S) und vermeidet so den Konflikt<br />

mit der im MATLAB-Pfad gefundenen Funktion. ■<br />

Einfache Tipps<br />

• Löschen Sie beim Debuggen mit clear variables (ab<br />

R2008a mit clearvars) die Variablen aus dem Workspace.<br />

clear allein löscht auch alle Breakpoints.<br />

• Verwenden Sie {} zur Extraktion von Zelleninhalten aus Cell-<br />

Arrays. Soll ein Cell-Array wie jedes andere Array behandelt<br />

werden, etwa für Umformungen, verwendet man dagegen ().<br />

• Benutzen Sie Handles zu Grafikobjekten, die später aktuali-<br />

siert werden sollen, anstatt sich vom jeweiligen Status abhän-<br />

gig zu machen. Erzeugen Sie beispielsweise eine Achse ein-<br />

mal mit hAx = axes; und verwenden Sie danach für diese<br />

Achse immer hAx statt gca. Die Verwendung dieser direkten<br />

Referenz ist robuster in Fällen, in denen der Fokus in MATLAB<br />

gerade auf etwas anderem liegt als auf diesem Grafikfenster<br />

oder dieser Achse.<br />

Quellen<br />

BLOG: Loren on the Art of MATLAB<br />

www.mathworks.de/nn8/loren<br />

MATLAB-HILFE<br />

www.mathworks.de/nn8/matlabdoc


TIPPS UND TRICKS<br />

Erzeugung und Einsatzmöglichkeiten von Web-Views<br />

Von Arkadiy Turevskiy<br />

Web-Views sind mit dem Simulink Report Generator erzeugte HTML-Dateien. In diesen interaktiven Abbildern von Simulink-<br />

und Stateflow ® Modellen navigiert man genau so wie in Modellen; aufgrund des HTML-Formats kann man sie jedoch mit<br />

jedem Web-Browser öffnen und betrachten.<br />

Web-View eines Simulink-Modells des HL-20-Gleiters der NASA. Man kann hier die Blockparameter<br />

einsehen (oben rechts), durch Anklicken von Subsystemen oder mit der Baumansicht<br />

durch die Web-View Darstellung navigieren und mit den gleichen Tastenkombinationen wie<br />

in Simulink die Ansicht zoomen und seitlich verschieben.<br />

Einsatzmöglichkeiten für Web-Views<br />

Web-Views ergänzen Simulink-Modelle im gesamten<br />

Model-Based Design Prozess. Sie sind<br />

besonders für folgende Situationen geeignet:<br />

• Sie wollen Spezifikationen Kollegen oder<br />

Partnern zur Verfügung stellen. Anstatt<br />

nun die Simulink-Modelle weiterzugeben,<br />

für deren Verwendung die MathWorks-<br />

Produkte erforderlich wären, mit denen<br />

die Modelle erzeugt wurden, können sie<br />

ein Web-View übermitteln. Ihre Kollegen<br />

bzw. Partner können sich so das Design<br />

einfach per Web-Browser anschauen.<br />

• Sie haben Veränderungen an Ihrem<br />

Simulink-Entwurf vorgenommen. Mit<br />

Web-Views können Sie Design-Reviews<br />

im Team auch auf Computern ohne instal-<br />

40 TheMathWorks News&<strong>Notes</strong> | 2008<br />

lierte MathWorks-Produkte durchführen.<br />

• Sie müssen Parameterwerte in einer bereits<br />

beim Kunden installierten Anwendung kalibrieren,<br />

haben aber keinen Zugang zum<br />

originalen Simulink-Modell. Mit Web-<br />

Views bekommen Sie einen Überblick, wo<br />

und wie die Parameter verwendet werden.<br />

• Ihr Projekt hat verschiedenste Design-Iterationen<br />

durchlaufen und Sie wollen sich<br />

eine bestimmte Modellversion ansehen.<br />

Statt diese in Simulink zu öffnen, können<br />

Sie hierzu nun die Web-View Darstellung<br />

verwenden. Dies reduziert die Gefahr unbeabsichtigter<br />

Änderungen am Design<br />

und andere Ingenieure können parallel am<br />

Modell weiterarbeiten.<br />

Erzeugung eines Web-Views<br />

1. Öffnen Sie Ihr Simulink-Modell.<br />

2. Wählen Sie im File-Menü Export to Web 1 .<br />

3. Wählen Sie unter folgenden Optionen:<br />

Möglichkeit, unter Masken zu schauen;<br />

Möglichkeit, Library-Links oder referen-<br />

zierten Modellen zu folgen; Angabe, welche<br />

Subsysteme berücksichtigt werden sollen.<br />

4. Klicken Sie OK zur Erzeugung des Web-<br />

View.<br />

Sie haben nun eine HTML-Datei und<br />

einen dazugehörigen Ordner in Ihrem Arbeitsverzeichnis,<br />

die Sie mit Kollegen zusammen<br />

nutzen oder auf Ihren Intranet-<br />

Server stellen können.<br />

Weiterentwicklung von<br />

Web-Views<br />

The MathWorks verbessert fortlaufend die<br />

Erzeugung von Web-Views. Mit R2008a unterstützen<br />

Web-Views u. a. MATLAB- und<br />

Dokumentations-Blöcke und ab R2008b<br />

auch Embedded MATLAB- und Simulink-<br />

Funktionen in Stateflow. ■<br />

____________________________________<br />

1 Voraussetzung ist eine Simulink Report Generator-Lizenz<br />

Quellen<br />

DEMO: ERZEUGUNG VON UND ARBEITEN<br />

MIT WEB-VIEWS<br />

www.mathworks.de/nn8/webview<br />

Eine offene Plattform für die Anwendergemeinde von MATLAB und Simulink<br />

Austausch von Codebeispielen,<br />

Tutorials, Diskussionen und vieles mehr.<br />

www.mathworks.de/nn8/matlabcentral


Quellen<br />

Website<br />

www.mathworks.de<br />

Technischer Support<br />

www.mathworks.de/support<br />

Online User Community<br />

www.mathworks.de/matlabcentral<br />

Demos<br />

www.mathworks.de/products/demos<br />

Schulungen<br />

www.mathworks.de/training<br />

Produkte von Drittanbietern<br />

www.mathworks.de/connections<br />

Weltweite Kontaktinformation<br />

www.mathworks.de/contact<br />

E - M a i l<br />

info@mathworks.de<br />

Webinare von<br />

The MathWorks<br />

Technische Web-Seminare, live und als Aufzeichnungen<br />

Aufgezeichnete Webinare in insgesamt 16 Sprachen<br />

Über 300 Themenbereiche rund um MATLAB und Simulink, darunter:<br />

• Objekt-Orientierte Programmierung<br />

• Parallel Computing<br />

• Bioinformatik<br />

• Finanzmodellierung und –analyse<br />

www.mathworks.de/nn8/webinars<br />

Friedlandstraße 18<br />

52064 Aachen<br />

Germany<br />

Wenn unzustellbar, bitte zurück<br />

91577v00 09/08<br />

• Signal- und Bildverarbeitung<br />

• Mechatronik<br />

• Verifikation und Validierung<br />

• C- und HDL-Codegenerierung

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!