Archive for uni

Geschwindigkeitsvergleich von Matlab und C

Im Rahmen meines Projekt musste ich ein Programm in Matlab schreiben, dass relativ große Dateien einliest und daraus bestimmte Dinge berechnet.

Konkret sieht das so aus: Die Dateien bestehen aus einem etwa 500 byte großen Header, in dem unter anderem die Anzahl der folgenden Datensätze kodiert ist, und dann einige zig bis mehrere hunder Megabyte an binärdaten, die als 32 bit unsigned Integer vorliegen. Die ersten vier Bit geben die Nummer eines Kanals an, oder wenn alle ersten vier bits auf 1 gesetzt sind, einen Überlauf.

Die hinteren 28 Bits sind ein Zeitstempel, der eingehende Signale auf 4ps (Picosekunden) auflöst.

Die Aufgabe war nun im Wesentlichen (auch wenn mir das etwas anders gesagt wurde), aus den Daten ein Histogramm zu bauen (bei den Testdaten etwa 64000 Bins lang), und damit eine Korrelation zu berechnen, und dann aus den ursprünglichen Daten noch ein paar Werte zu extrahieren.

Das Programm in Matlab war relativ schnell fertig geschrieben, aber es ist langsam. Grauenhaft langsam. Für eine 155MB große Eingabedatei rechnet das Programm etwa 6 Stunden auf meinem Laptop. Dafür mache ich vor allem die I/O-Operationen und Arrayzugriffe verantwortlich, die anscheinend nicht besonders effizient implementiert sind.

Also habe ich das gleiche noch in C implementiert. Ergebnis: die Laufzeit ist unter einer Minute, locker. Es ist noch nicht ganz fertig, bisher braucht es knapp 20s, unter 50s werde ich sicher bleiben. Und dabei ist das ganze noch ohne jegliche Optimierungen kompiliert.

Jetzt kann man ja sagen: Ist ja alles schön und gut, Matlab ist eher dafür geeignet, Vektoroperationen durchzuführen, die internen Matlabfunktionen sind da recht schnell.

Aber das beste kommt noch: Ich führe die Korrelation auf die Faltung zurück, und die scheint in Matlab auch nicht sehr effizient implementiert zu sein. Tatsächlich scheint Matlab mehrere Minuten an der Faltung zu rechnen.

Meine C-Implementierung führt die Faltung auf die schnelle Fouriertransformation zurück, berechnet mit der FFTW-Bibliothek. Und bleibt damit unter 5s.

Alles in allem war matlab in diesem Fall für rapid prototyping gar nicht schlecht, scheidet aber aufgrund grauenhafter Performance aus.

Comments

Spielereien mit Polarisationsfiltern

Zwei Bilder einer Digitaluhr mit Polarisationsfilter, in einem Bild ist das Display hinter dem Polfilter schwarz, im anderen ist es gut zu sehen. Dazwischen ist der Polfilter um etwa 90 Grad gedreht

Viele kennen sie vielleicht noch aus dem Physikunterricht: Polarisationsfilter. Normalerweise etwas dunkel aussehende, aber noch gut durchsichtige Plastikfolien, ein wenig dünner als eine EC-Karte.

Wenn man zwei davon hat, kann man sie gegeneinander verdrehen, und bei einem Drehwinkel von 90° sieht man nichts mehr durch.

“Alles graue Theorie” denkt ihr jetzt sicher, aber man sieht Polfilter täglich, ohne es zu wahrzunehmen: In LC-Displays oder TFT-Monitoren.

Mit einem Polfilter auf dem Display der Armbanduhr sieht man gar nichts mehr, wenn er entsprechend liegt, um 90° verdreht kann man noch bequem die Uhrzeit ablesen.

Das gleiche gilt für TFT-Monitore, wie das zweite Bild beweist.

Tatsächlich basieren die LCDs, also “Liquid Crystal Displays” oder auf Deutsch Flüßigkristallanzeigen, auf dem Prinzip der gekreuzten Polfilter: Im Display ist ein Polfilter, und in den einzelnen Anzeigeelementen ebenfalls. Wenn man an ein Anzeigeelement eine Spannung anlegt, richten sich die kleinen Kristalle in der Flüßigkeit nach dem elektrischen Feld aus und wirken als Polarisationsfilter.
Und die Displays sind so gebaut, dass sie dann einen rechten Winkel mit dem großen Polfilter bilden und damit Lichtundurchlässig werden - wir sehen einen dunklen Fleck.

Die Bilder zeigen übrigens auch, dass der große Polfilter in den Displays um etwa 45° gegen die Kanten des Displays verdreht sind.
In dem Bild mit dem Lapotopmonitor ist die die kurze Kante des Polarisationsfilters parallel zur Polarisationsrichtung.

Die ungefähre Polarisationsrichtung kann man übrigens recht einfach festellen, da viele Oberflächen polarisiertes Licht abgeben wenn sie diffus reflektieren.

Comments (2)

Labor für Quantenkryptographie

Optische Bank mit vielen kleinen Elementen und dünnen Glasfasernkabeln dazwischen

Sieht so ein Labor aus, das weltweit führend auf seinem Fachgebiet ist? Man möchte es nicht glauben. Doch normalerweise sieht man diese Labors nur, wenn sie für Besucher herausgeputzt sind. Da ich das Glück habe, bis zu vier mal die Woche dort zu arbeiten, geht es mir anders.

In dem Labor wird an dem weltweit schnellsten System zur Verteilung kryptografischer Schlüssel mit Hilfe der Quantenmechanik gearbeitet.

Mit Taktraten bis zu 3.3GHz und effektiven Bitraten von über 10kbps über mehr als drei Kilometer Glasfaser hält die Gruppe Photon Counting Technologies um Professor Gerald S. Buller zur Zeit den Weltrekord.

Optische Bank mit vielen kleinen Elementen und dünnen Glasfasernkabeln dazwischen

Die Verschlüsselung, die man damit erreichen kann, ist beweisbar sicher, und die Verteilung der Schlüssel ist nach bisherigem Verständnis der Quantenphysik auch sicher.

Meine Aufgabe ist es im Moment, die Software zu erweitern, die die Messungen auswertet. Später werde ich an den Lichtequellen arbeiten, um höhere Netto-Bitraten zu erzielen. Im Moment werden dazu VCSELs (Vertical Cavity Surface Emitting Lasers) verwenden, ich soll entweder bessere VCSELs finden oder andere Quellen

Comments

Was tun in langweiligen Vorlesungen?

Bis vor kurzem habe ich diese Frage noch sehr eindeutig beantwortet: Sudoku spielen!. Einfach ein paar Sudokus Herunterladen und ausdrucken.

Vor ein paar Tagen bin ich zum Postkartenschreiben übergegangen. Wenn man im Ausland ist, ist das recht naheliegend. Und die Empfänger freuen sich darüber.

Allerdings zeigt ein kleiner Preisvergleich, warum ich bald wieder auf Sudokus umsteigen werden:

Eine Seite mit 6 Sudokus auszudrucken kostet hier an der Uni 5 pence. Mit einem solchen Sudoku bin ich, weil ich mich in der Vorlesung nicht allzu sehr aufs lösen konzentrieren kann, etwa eine halbe Stunde beschäftigt. Also zahle ich 1.7p pro Stunde.

Eine Postkarte kostet so 20 bis 30 pence, die Briefmarke nach Deutschland nochmal 44. Eine Postkarte beschäftigt mich aber nur etwa eine Viertelstunde, das sind 2.6 Pfund pro Stunde, also mehr als Faktor 100 teurer.

Sorry an meine Freunde und Verwandte in Deutschland, in Zukunft gibts nur noch Sudokus ;)

Comments

Berufsmesse an der Uni

Heute war Berufsmesse an der Uni.

Ich suche zwar noch keine Arbeit, zumindest nicht Vollzeit, aber sowas muß man sich einfach mal antun. Und bisher waren meine Erfahrugen mit sowas eher mittelmäßig bis positiv.

Aber hier in Edinburgh war ich wirklich enttäuscht: die meisten Stände waren von Unternehmensberatungen oder anderen Consultingfirmen, deren Sinn sich mir nicht erschließt. Aber vielleicht ändert sich das ja noch mal.

Außerdem gab es noch zwei Ölförderfirmen, die British Army, einen Hersteller von Nuklearsprengköpfen und ein Waffenhersteller. Nicht so wirklich die Mischung, die ich erwartet habe.

Am Ausgang wurde ich dann von einer Angestellt der Universität angesprochen, ob ich Zeit für eine kurze Umfrage hätte. Hatte ich. Der freundlichen Dame habe ich dann auch gesagt, dass mir die Messe nichts gebracht hat, für sie schien das nicht wirklich etwas neues zu sein. Vielleicht wirds ja dann das nächste mal besser.

Comments

Matlab Sourcecode

So, gestern habe ich den Matlab Sourcecode bekommen, der die Quantum Bit Error Rate (QBER) aus Meßdaten des QKD-Systems berechnet.
Und ich hatte schlimmeres erwartet. Die meisten Variablennamen haben ausführliche, vielsagende Namen, und wenn man davon absieht, dass etwa 70% des Codes aus unbenutzten Callbackfunktionen besteht, ist das ganze auch gar nicht so unübersichtlich.

Ein paar kleinere Fehler sind mir beim ersten durchlesen aufgefallen, aber die sind größtenteils leicht zu beheben.

Etwas merkwürdig ist, dass man den Variablen nicht ansieht, ob sie Skalare, Arrays oder Matrizen sind. Das kann sich auch im Laufe des Programms ändern, was nicht besonders schön ist.
Meine Lektion daraus:
Schwach typisierte Sprachen sind schwer lesbar, wenn der Programmierer Mist gebaut hat.

Natürlich ist jede Sprache schwer lesbar, wenn der Programmierer Mist gebaut hat, aber es gibt ja noch Abstufungen…

Comments