T heMathWorksNews&Notes
T heMathWorksNews&Notes
T heMathWorksNews&Notes
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