Der Satz von Bayes ist ein spannendes Werkzeug aus der Welt der Mathematik, das uns hilft, Wahrscheinlichkeiten zu verstehen und zu berechnen. Er wird in vielen Bereichen angewendet, von der Medizin über Künstliche Intelligenz bis hin zu Alltagssituationen. Aber was genau besagt dieser Satz, und warum ist er so nützlich?
Mit einem SDR kann man Frequenzen überwachen. Mit rtl_power kann man dann CSV Dateien schreiben und diese dann mit einem Python Script in eine schöne übersichtliche Wasserfall Grafik umwandeln. Da kann man dann leicht sehen was für Aktivität auf den jeweiligen Frequenzen los war. Hier in Hannover ist halt nicht so viel los. Und das alles auf einen kleine Raspberry Pi.
Ich hatte vor einem Jahr schon mal davon berichtet, wie das mit meinem Java Programm geht. Nun wollte ich mal das Python Script ausprobieren was ich auf GitHub gefunden habe.
Wir nehmen mal die ACARS Frequenzen, andere siehe in dieser Tabelle.
Hier ein Auszug was so auf den Frequenzen läuft:
1
2
3
131,525ACARS Europa Sekundär
131,725ACARS Europa Primär
131,825ACARS Europa Sekundär
Wir starte rtl_power im Frequenzbereich 131 MHz bis 132 MHz, schreiben alle 10 Sekunden das Ergebnis in 1 KHz Schritten in die airband-131.000-131.999M-1k-12h.csv Datei und lassen das ganze 12 Stunden laufen. Als Korrekturfaktor gebe ich 48 ppm mit, das ist für andere Sticks natürlich ein anderer Wert, kann aber auch weggelassen werden.
Dann wandeln wir die erzeugte CSV Datei mit dem Python Script heatmap.py um. Wir schreiben alle 15 Minuten für die Y-Achse einen Zeit-Label und verwende die twente Palette, die gefällt mir am Besten:
Peter Cornelius singt:
„Der Kaffee ist fertig,
klingt das net unheimlich zärtlich.
Der Kaffee ist fertig,
klingt das net unglaublich lieb.“
In diesem Sinne. Wenn ein Kaffee (кофе) gekocht wurde, werde ich von meinen Raspberry Pi informiert, wie hier schon mal beschrieben. Nun generiere ich noch in Echtzeit, einmal am Tag eine Grafik mit MATLAB Visualization wieviele Tassen pro Tag gekocht wurden, hier das Diagramm:
Diese paar Zeilen Quellcode erzeugen das Diagramm:
Hohe Präzision: Low-Power-Modus, die Auflösung von 0.06 hPa (0,5 m)
Hohe linearen Modus mit einer Auflösung von 0.03 hPa (0,25 m)
Mit Temperatur-Ausgang
I2C-Schnittstelle
Temperaturkompensation
Reaktionszeit: 7,5 ms
Standby-Strom: 0.1 μA
Beseitigt die Notwendigkeit für einen externen Taktgeber
Größe: 21 x 15 x 10 mm
Die Platine mit dem BMP085 (auf GY-65) ist nur 1,5 cm x 2 cm klein.
Von oben:
Von unten:
Anschlussbelegung:
Software:
Folgende beiden Libs von Adafruit downloaden und in das Lib Verheichnis kopieren. Evl. noch die Verzeichnisnamen umbenennen, da keine Sonderzeichen vorhanden sein dürfen.
Dies Programm liest den Luftdrucksensor und den Temperatursensor endlos aus, und gibt die Werte über die Serielle-Schnittstelle mit Leerzeichen getrennt aus. Kommentare beginnen mit #.
z.B. # Luftdruck und Temperatur Messprogramm # TWDruck 1.0 vom 06.07.2013 # http://www.wenzlaff.de # Sensor: BMP085 # Treiber Version: 1 # Unique ID: 10085
# [Luftdruck in hPa] [Temperatur in Grad Celsius] [Höhe in Meter]
Das BMP085 an: SCL an A5 SDA an A4 VDD Plus 3.3V DC Masse Minus */ constlong MESSINTERVAL = 5000; // Messintervall in milli Sekunden constlong SENSOR_ID = 10085; // eindeutige Sensor ID String KOMMENTAR = "# "; // Kommentar präfix String TRENNER = " "; // Trennzeichen der Werte
if (event.pressure)
{ Serial.print(event.pressure); // Luftdruck in hPa Serial.print(TRENNER);
/* Calculating altitude with reasonable accuracy requires pressure * * sea level pressure for your position at the moment the data is * * converted, as well as the ambient temperature in degress * * celcius. If you don't have these values, a 'generic' value of * * 1013.25 hPa can be used (defined as SENSORS_PRESSURE_SEALEVELHPA * * in sensors.h), but this isn't ideal and will give variable * * results from one day to the next. * * * * You can usually find the current SLP value by looking at weather * * websites or from environmental information centers near any major * * airport. * * * * For example, for Paris, France you can check the current mean * * pressure and sea level at: http://bit.ly/16Au8ol */
Serial.print(temperature); // Temperatur in Grad Celsius Serial.print(TRENNER);
/* Then convert the atmospheric pressure, SLP and temp to altitude */ /* Update this next line with the current SLP for better results */ float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA; // 1013.25F Average sea level pressure is 1013.25 hPa
Serial.print(bmp.pressureToAltitude(seaLevelPressure,
event.pressure,
temperature)); // Höhe in Meter Serial.println();
} else
{ Serial.println(KOMMENTAR +"Sensor error");
} delay(MESSINTERVAL);
}
Die gerade Linie im Diagramm, rührt daher das der PC sich automatisch in den Standby-Betrieb schaltet und damit die Serielle-Verbindung nicht mehr abgefragt wird.
Der dritte Wert der Daten ist die Höhe, die ändert sich nicht gross und wird deshalb nicht im Diagramm dargestellt. Wie wird bei gnuplot die 3. Y-Achse erzeugt? Geht das überhaupt?
Eine kurze Messung mit zwei an das Arduino-Board angeschlossene Temp.-Sensoren DS18B20 ergibt diese Daten.
Daraus läßt sich mit diesen gnuplot Befehlen
set title "Temperaturverlauf"
set ylabel "Temperatur in Grad/Celsius"
set xlabel "Messzeitpunkt"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [26:28] # die y-Achse geht von:bis
set terminal png
set output "temperaturverlauf.png"
plot "temperatur.log" using 1:2 title "Innen Sensor" with lines, "" using 1:3 title "Aussen Sensor DS18B20" with lines
diese Grafik plotten:
Die Sensoren sind mit +-0,5 Grad Celsius bei -10 bis +85 Grad angegeben.
Die Differenz beider Werte ergibt mit diesen gnuplot Befehlen:
set title "Temperatur Differenz zweier Sensoren"
set ylabel "Temperatur Differenz in Grad/Celsius"
set xlabel "Messzeitpunkt"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [-1:1] # die y-Achse geht von:bis
set zeroaxis # die 0 Linie
set terminal png # erzeugt eine PNG Datei
set output "differenztemperaturverlauf.png" # Name der PNG Datei
plot "temperatur.log" using 1:($2-$3) title "Temperatur-Differenz" with lines
set terminal aqua # wieder auf Terminal
replot # nochmal in Terminal plotten
folgendes Ergebnis.
Mit welchem gnuplot Befehl bekomme ich eine horizontale Linie bei 0,5 und -0,5 Grad hin, die mit min und max Beschriftet ist? Ok, hier die Lösung.