Posts Tagged‘Matlab’

DA-Martin-Laufzeit-Bokeh

Perfektes Python Setup für MATLAB liebende Ingenieure

by Paul Balzer on 25. November 2013

No Comments

Als Ingenieur ist man von der Informatik meilenweit entfernt. Im Studium wird man manchmal an Mathworks Matlab herangeführt, versteht es aber im Allgemeinen erstmal nicht. In Fleisch und Blut geht es ohnehin nie über, weil es nahezu unbeschränkte Möglichkeiten bietet, das Studium aber nur eine kurze Zeit dauert.

Während man die ersten Semester Diagramme und Protokolle lieber mit Excel erstellt, reduziert sich die Zeit, in welcher man sich mit Matlab beschäftigen kann, noch weiter. In den letzten Semestern, vielleicht erst in der Diplomarbeit, merkt man dann aber, dass es echt gut ist! Warum nicht eher?

Kommt man aus dem Uni-Umfeld heraus, wird es leider sehr teuer mit Matlab! Eine Standard Einzelplatz Lizenz ohne eine einzige Toolbox kostet 2.000€ Netto. Nur um ein paar Diagramme zu erstellen?

Ich habe mir daher vor einiger Zeit Python angesehen, welches nach einiger Zeit zunehmend Spaß macht! Da es zu Beginn relativ schwer war, einen Einstieg zu finden, möchte ich mein Setup mal vorstellen.

Python

Das Herz der Angelegenheit und bei Linux, Unix und MacOS schon von Haus aus an Board. Für Windows muss man es manuell nachinstallieren: Download Python.

In der Kommandozeile oder im Terminal kann man nun Python nutzen.

python-console-mac

Plug-Ins

Python an sich ist nun schon mächtig, aber immernoch ein zahnloser Tiger, so lange es ohne Zusatzpakete auskommen muss. Zum installieren der Pakete kann man auf Paketmanager zurückgreifen, die die Arbeit in den meisten Fällen übernehmen.

PIP Paketmanager

Der Paketmanager, welcher  nachfolgend die Arbeit der Installation/Upgrades übernimmt, ist PIP. Die Installation von PIP erfolgt betriebssystemabhängig. Am einfachsten mit der get-pip.py, welche dort herunter geladen werden kann. Da wir ja Python installiert haben, können wir einfach:

python get-pip.py

eingeben, dann müsste alles automatisch funktionieren. Da es nun für jedes Betriebssystem immer ein paar Unterschiede gibt, möchte ich aus diesem Beitrag kein Installationstutorial machen, sondern einfach nur zeigen, was meiner Meinung nach am besten geeignet ist, ohne Support.

Scipy

Das wichtigste Paket, wenn man in großen Schritten Richtung Matlab gehen möchte: Scipy. Es enthält viele elementare Pakete, wie z.b.

  • Matplotlib zum Erstellen von Plots
  • IPython zum angenehmen arbeiten
  • Numpy zur effizienten und einfachen numerischen Berechnung

Arbeitsumgebung IPython

Ich habe einige Python IDEs ausprobiert, aber bin nun bei IPython hängen geblieben. IPython kommt mit Scipy mit und ist sehr umfangreich. Gestartet wird die Arbeitsumgebung über die Kommandozeile mit

ipython notebook --script

Der Befehl notebook startet einen lokalen Server, welcher über den Browser unter localhost angesprochen werden kann. Auf der ‘Webseite’ ist es dann möglich so genannte Notebooks zu öffnen, welche ähnlich wie MATLAB .m Files zu nutzen sind. Der Schalter –script sorgt dafür, dass immer parallel eine .py (also eine Python Datei) gespeichert wird, wenn man das Notebook (.ipynb) speichert.

ipython-start-mac

Import

Der große Unterschied zu MATLAB ist nun, dass man bei Python immer erst mal sagen muss, welche Plug-Ins man nutzen möchte im aktuellen Projekt (ähnlich der ‘path’ Umgebung in MATLAB). Möchte man beispielsweise ein Plot erstellen, so ist vorher mitzuteilen, dass die mit Scipy gelieferte Bibliothek Pyplot zu verwenden ist.

import matplotlib.pyplot as plt

Danach stehen alle Funktionen von Matplotlib unter dem Objektnamen plt zur Verfügung.

Plot erstellen

Ein Plot lässt sich beispielsweise erstellen mit

x=range(5)
y=range(5)
plt.plot(x,y)
plt.show()

Diese Bibliothek ist sehr mächtig, wie die Beispiele zeigen!

Beispiel

import numpy as np
import matplotlib.pyplot as plt
import random
import time

n = 1100000
m=0.0
v=0.0
elapsed=[]
vals=[]
for i in xrange(0,n,1000):
    #print 'Berechne für ' + str(i) + ' Werte.'
    values = np.random.sample(i)

    start = time.clock()
    m = np.mean(values)
    v = np.var(values)

    elapsed.append((time.clock() - start))
    vals.append(i)

fig = plt.figure(figsize=(12,5))
plt.plot(vals,elapsed, 'ro')
plt.xlabel(u'Anzahl Werte')
plt.grid()
plt.ylabel(u'Berechnungszeit [s]')
plt.title(u'Berechnungsdauer für var() und mean()')
plt.savefig('Berechnungsdauer.png',dpi=72)

plt.close()
print('Done.')

Berechnungsdauer

  Download IPython Notebook

Zusatzbibliotheken machen Python mächtig

Zwar gibt es für MATLAB unzählige Toolboxen und auch das Matlab Central, wo Zusatzfunktionen herunter geladen werden können, aber der große Vorteil an Python ist: Es ist kostenfrei!

Ein Blick auf die kompilierten Windows Versionen der Pakete zeigt, dass man überhaupt nicht überblicken kann, was alles möglich ist. Die Pakete die ich bisher genutzt habe, sind folgende:

Schönere Plots

Möchte man das Plot jetzt auch noch mal in “schön” haben, so bietet sich Bokeh an. Es muss natürlich importiert werden

from bokeh.plotting import *

aber anschließend geht es sogar einfacher und ansehnlicher als mit Matplotlib:

scatter(vals, elapsed, title='Berechnungsdauer')
show()

DA-Martin-Laufzeit-Bokeh

Learning by Doing

Weiterführend ist der Kurs “Introduction to scientific computing with Python” von   J.R. Johansson empfohlen! Hier insbesondere der Teil 4: matplotlib – 2D and 3D plotting in Python.

Nachteil ggü. MATLAB

Der Nachteil ist ganz eindeutig, dass viele viele viele verschiedene Menschen die Zusatzpakete erstellen und jeder so seine eigene Art hat, dies umzusetzen. Das führt dazu, dass zum einen die Webseiten, wo die Pakete zu bekommen sind, nicht einheitlich aussehen und teilweise wirklich schlecht gepflegt werden (Installationshinweise usw..) und zum anderen auch die Art, wie man die Pakete nutzen kann, verschieden ist.

Bei MATLAB ist alles zentral durch Mathworks organisiert, d.h. man kann sich drauf verlassen, dass es eine ordentliche Hilfe gibt, dass die Funktion genau so funktioniert wie dort dargestellt und das es vom Syntax her eindeutig ist.

Bei einigen Python Paketen ist es eher ein Rätselraten, wie man das nun so benutzt, dass es macht was man möchte. Da wird http://stackoverflow.com/ schnell der beste Freund!

gemessener Geschwindigkeitsverlauf (oben) und zugehörige Likelihood Funktion bei angenommener Normalverteilung mit Standardabweichung von 1 (unten)

Umfelderkennung als Schätzaufgabe: Der Maximum Likelihood Estimator

by Paul Balzer on 5. August 2013

No Comments

Erfasst man einen realen Vorgang mit einem Sensor, so hat man intuitiv das Gefühl, dass dieser Sensor den realen Wert ‘schon korrekt messen wird’. Das Problem ist, dass kein Sensor perfekt ist. Am Beispiel der Umfeldsensorik für PKW ist ein sehr populärer Sensor der Radar, welcher z.B. für die adaptive Geschwindigkeitsregelung ACC, Ein-/Ausparkassistenten oder auch Totwinkelassistenten eingesetzt wird.

Schaut man sich die Rohmesswerte eines solchen Sensors an, wird klar, was mit ‘nicht perfekt’ gemeint ist:

Rohmessdaten eines Nahbereichsradarsensors für mehrere Radfahrer (blau) und KFZ (grün). Quelle: [Höringklee 2013 - Entwicklung eines Assistenzsystems zur Überwachung nicht einsehbarer Bereiche im Fahrzeugumfeld]

Rohmessdaten eines Nahbereichsradarsensors für mehrere Radfahrer (blau) und Fahrzeuge (grün), welche sich an den Sensor (schwarzes Kreuz links) annähern. Quelle: [Höringklee 2013 - Entwicklung eines Assistenzsystems zur Überwachung nicht einsehbarer Bereiche im Fahrzeugumfeld]

Die Herausforderung ist nun, aus diesen Rohmessdaten einen klaren Mehrwert zu generieren. Es ist innerhalb eines Bruchteils einer Sekunde die Entscheidung zu treffen:

Ist dort etwas?
Kommt dort etwas?
Wie schnell ist es?
Was ist es?

Continue Reading

ExtendedKalmanFilter

Das Extended Kalman Filter einfach erklärt

by Paul Balzer on 21. Juni 2013

10 Comments

Continue Reading

Kalman-Filter-Step

Das Kalman Filter einfach erklärt [Teil 2]

by Paul Balzer on 11. Mai 2013

8 Comments

Nachdem wir im Teil 1 den Kern des Kalman Filters geklärt haben, widmen wir uns nun dem komplizierteren Teil. Die genannte Vorgehensweise mit dem multiplizieren bzw. addieren der Mittelwerte und Varianzen funktioniert so nur im eindimensionalen Fall.

Das heißt, wenn der Zustand, den man messen möchte, mit nur einer Variablen vollständig beschrieben werden kann. Das Beispiel, welches eingangs genannt wurde, die Position eines Fahrzeugs im Tunnel zu bestimmen, kann aber nicht mehr mit einer Variablen vollständig beschrieben werden. Zwar interessiert nur die Position, aber diese ist genau genommen ja schon 2-Dimensional in der Ebene (x & y). Außerdem kann nur die Geschwindigkeit (x’ & y’) gemessen werden, nicht die Position direkt. Dies führt zu einem 4D-Kalman-Filter, mit folgenden Zustandsvariablen:

x=\begin{bmatrix}x \\y \\\dot x \\\dot y\end{bmatrix}=\begin{matrix}\text{Position X} \\ \text{Position Y} \\ \text{Geschwindigkeit in X} \\ \text{Geschwindigkeit in Y}\end{matrix}

Herr Kalman hatte sich nun überlegt, wie man es schafft, trotz verrauschter Messung einzelner Zustandswerte, eine optimale Schätzung aller Zustände zu berechnen.

Continue Reading

YUKnowKalman

Das Kalman-Filter einfach erklärt [Teil 1]

by Paul Balzer on 11. Mai 2013

8 Comments

Nehmen wir an man fährt mit seinem PKW Navi in einen Tunnel. Das GPS Signal ist weg. Trotzdem möchte man vielleicht angezeigt bekommen, dass man die Ausfahrt im Tunnel nehmen soll. Woher soll das Navi wissen, wo man gerade ist? Richtig: Es fusioniert die Fahrzeugsensoren und berechnet damit die Position so gut es geht.

YUKnowKalman

Nun denkt man sich: OK, wenn ich zuletzt am Tunneleingang war und mit 50km/h fahre, dann kann das Navi ja exakt ausrechnen, wo (x=Position) man sich 1 Minute (t=Zeit) später befindet:

x=x_\text{Tunneleingang}+v\cdot t

Continue Reading

Orangener Wert ist linear interpoliert zu den bestehenden blauen Werten

HowTo: Daten interpolieren mit Matlab

by Paul Balzer on 2. März 2013

No Comments

Interpolation hat fast jeder schon einmal gehört. Man benötigt zu bestehenden Messwerten eine feiner Auflösung und bestimmt Zwischenstellen linear, polynomisch oder mittels Spline. Im nachfolgenden Bild ist eine lineare Interpolation (orange) zu bestehenden Messwerten (blau) zu sehen.

Orangener Wert ist linear interpoliert zu den bestehenden blauen Werten

Orangener Wert ist linear interpoliert zu den bestehenden blauen Werten

Es gibt allerdings auch noch wesentlich ausgeklügeltere Verfahren der Interpolation, mit dessen Hilfe man erstaunliche Ergebnisse erzielen kann. Im Folgenden soll beispielhaft die Interpolation einer harmonischen Schwingung mit Matlab erfolgen.

Continue Reading

One-does-simply-not-differentiate-noisy-signals

Differenzieren verrauschter Signale

by Paul Balzer on 29. Januar 2013

2 Comments

Ein Thema, was mich schon lange beschäftigt, was aber wahrscheinlich die wenigsten Menschen überhaupt interessieren dürfte, möchte ich in diesem Beitrag mal abhandeln. Es geht dabei um das Differenzieren verrauschter Signale. Da stellt sich natürlich die Frage: Wo kommt so etwas überhaupt vor? An unglaublich vielen Stellen kommt das vor. Immer wenn man von einer gemessenen Größe auf eine andere schließen möchte, welche differenziellen Zusammenhang hat. Beispielsweise bei der Leistungsmessung auf einem Rollenleistungsprüfstand oder wenn man aus Positionsangaben einer GPS Messung die Geschwindigkeit berechnen möchte oder oder oder.

tell-me-more-about-differentiate-noisy-signals

Continue Reading

AM Button am Audioradio

Amplitudenmodulation grafisch darstellen mit Matlab

by Paul Balzer on 11. Juli 2012

No Comments

Der ein oder andere hat sich vielleicht schon mal gefragt, was am Autoradio die Knöpfe AM und FM bedeuten, kommen doch bei beiden mehr oder weniger gute Radiosender an. Es handelt sich dabei um verschiedene Verfahren, mit welchen die Radiostationen ihre Audiosignale Codieren, um sie über Funk durch die Luft an das Autoradio zu senden.

Diese Codierung ist notwendig, weil Sprache, Musik und unsere Ohren in einem Frequenzbereich von 20…20.000Hz arbeiten. Geht man einige Meter von einem sprechenden Menschen weg, so ist er kaum noch zu verstehen. Die Dämpfung von Audiosignalen in der Luft ist erheblich, in diesem Frequenzbereich kann Radio also nicht übertragen werden. Das Audiosignal muss an der Quelle codiert werden, damit es über weitere Strecken übertragen werden kann. Eines dieser Verfahren, wenn auch ein sehr sehr einfaches, ist die so genannte Amplitudenmodulation AM.

Continue Reading

Frequenzspektrum der vertikalen Netzlast aus dem Jahr 2011, Datenquelle: http://www.50hertz.com/de/149.htm

Frequenzspektrumanalyse (FFT oder DFT) mit Matlab

by Paul Balzer on 14. Juni 2012

4 Comments

Um technische Sachverhalte beurteilen zu können, bietet es sich an, diese erst einmal zu messen. Die physikalische Größe wird also vom Computer diskret (d.h. nur “alle paar Millisekunden” oder “1x im Jahr” oder “jede 15min”) abgespeichert und kann dann weiter verarbeitet werden. Beispielhaft hier die vertikale Netzlast des deutschen Stromnetzes von 2011:

vertikale Netzlast aus dem Jahr 2011, Datenquelle: http://www.50hertz.com/de/149.htm

Möchte man dieses gemessene Signal jetzt auf beinhaltende Frequenzanteile untersuchen, so wurde vom genialen und zu seiner Zeit verkannten Mathematiker Joseph Fourier, die nach ihm benannte Fourier-Analyse entwickelt, welche das exzellent erledigt.

Continue Reading

Harley Davidson Knucklehead-Bobber

Starr-Rahmen: schick, aber gefährlich

by Paul Balzer on 1. Juni 2012

2 Comments

Bild unter CC-Lizenz von flickr User “pilot_micha”

Man kann es ja nicht leugnen, so ein Starr-Rahmen sieht einfach klasse aus. Das findet der Prüfer beim DEKRA oder TÜV auch, aber er sieht die Gefahren. Welche das sind, wird bei folgender einfachen Berechnung deutlich.

Continue Reading

Geschwindigkeit-Strecke-3D

Datenvisualisierung mit Matlab II

by Paul Balzer on 29. September 2011

No Comments

Die Variante, die Daten über ein Videobild zu legen, ist ähnlich, wie mit Kanonen auf Spatzen zu schießen. Das sieht zwar schön aus, aber ist sehr viel Aufwand. Oft reicht es auch aus, die Daten in Diagrammen darzustellen.

Geschwindigkeit-Strecke-3D

Im Folgenden möchte ich zeigen, wie man Daten aus einer Datei in anschauliche Diagramme verpackt und automatisiert abspeichert.

Continue Reading

Datenvisualisierung mit Matlab

by Paul Balzer on 28. September 2011

1 Comment

Ich hatte vor ein paar Tagen die Möglichkeit auf einem heißen Sitz platz zu nehmen. Genauer gesagt auf dem Beifahrersitz eines BMW M3 3.2 E36, welcher von einem geschätzten Kollegen über den Eurospeedway Lausitzring bewegt wurde. Dazu habe ich mir eine Kamera und eine V-Box Mini geschnappt (danke an alle Beteiligten!) und ein paar Fahrdynamikdaten aufgezeichnet.

Screenshot

Wenn man genug Kleingeld hat, kann man ein fix und fertiges System kaufen, mit welchem Daten+Video synchron aufgezeichnet werden. Racelogic hat das z.B. im Angebot. Ich möchte im Folgenden zeigen, wie man aus Video und Daten trotzdem eine annehmbare Datenvisualisierung produzieren kann.

Continue Reading

Lineares Besäufnis–Ein Beispiel der angewandten Regelungstechnik

by Paul Balzer on 17. Dezember 2010

1 Comment

corona

Regelungstechnik ist nicht unbedingt ein Haupteinsatzgebiet der Fahrzeugtechniker. Immerhin ist es ja auch eine eigenständige Studienrichtung im Fachgebiet der Automatisierungstechnik. Da sind die Profis zu finden.

Dennoch sei mir an dieser Stelle gegönnt einen Einblick in diese interessante Fachrichtung zu geben.

Continue Reading