Teensy ist ein Mikrocontroller mit relativ viel Rechenpower und Arbeitsspeicher. Die Version 4.1 hat eine integrierte SD-Karte zum Daten aufzeichnen.
Es gibt ein Audioboard mit dem man mit 44 kHz und 16 bit Signale aufzeichnen kann. Damit lassen sich auch die Signale von unserem Radarmodul aufzeichnen.
Mit dem Audio System Design Tool kann man die Audioflüsse virtuell „verdrahten“ und sich Programmcode ausgeben lassen den man auf den Teensy laden kann.
Um das Board zu programmieren wie hier beschrieben die Arduino-IDE 2.0 oder höher herunterladen und die Teensy Library installieren.
Unter File > Preferences „Additional Boards Managers URLS“ eintragen: https://www.pjrc.com/teensy/package_teensy_index.json
Unter Linux sollte man noch die Hinweise auf dieser Seite beachten (man mus libfuse installieren). Ausserdem muss noch eine udev-Regel eingerichtet werden:
Für uns relevant ist die AudioAnalyzeFFT1024 Funktion, die eine Fouriertransformation der Audiodaten berechnet. Die Berechnung läuft asynchron und über die available() Funktion können Daten abgefragt werden. Ein Beispiel-Sketch findet man unter File > Examples > Audio > Analysis > FFT.
Alternativ könnten wir auch die AudioAnalyzeNoteFrequency Funktion verwenden um die dominante Frequenz direkt zu ermitteln. Hier gibt es ein Beispiel-Sketch unter File > Examples > Audio > Analysis > NoteFrequency.
Unseren bisherigen Entwicklungsstand kann man von github runterladen als zip. Um den Code ausführen zu können muss noch die OpenAudio_ArduinoLibrary als zip heruntergeladen und installiert werden. Dazu in der Arudino IDE unter Sketch > Include Library > Add .ZIP Library auswählen.
Für die Visualisierung muss Processing heruntergeladen werden.
teensy_audio_linein.ino (1,7 KB)
Der Controller (Teensy 4.1 + Audioboard) nimmt über Line In Daten auf. Der eine Kanal geht direkt an den PC, der andere über einen 6kHz Tiefpass an den PC. Zusätzlich wird vom gefilterten Kanal eine FFT gemacht. Dier Ergebnisse der FFT gehen per serieller Schnittstelle an den PC. Die Audiodaten können per Audacity o.ä. aufgenommen werden.
Für die FFT Daten habe ich ein Quick&Dirty Skript in Python geschrieben. Es nimmt eine vorgegebene Nummer an Messungen entgegen und plottet über einen vorgegebenen Frequenzbereich. spectrum_receiver.py (828 Bytes)
Es passt zwar nicht ganz zu diesem Faden, die anderen zum Thema CityRadar sind jedoch schon geschlossen worden, so dass ich meine Frage dort mehr stellen kann, aber vielleicht dennoch interessant: Welche Quantisierung ist unbedingt notwendig?
Der verwendete ADC wandelt mit 16 Bit pro Sample (pro Kanal). Würden 12 Bit auch ausreichen, wenn die verkürzten 4 Bit ohnehin im Rauschen untergingen?
Vielleicht kann man den Qualitätsunterschied unkompliziert mit Audacity testen. Bitte keinen großen Aufwand betreiben. War nur mehrfach eine Überlegung.
Die Auswertung fokussiert sich erstmal auf die Messung direkt an der Straße. Vom Balkon aus sind zu viele Autos gleichzeitig messbar. Hier muss ein Tracking der verschiedenen Geschwindigkeitsverläufe implementiert werden. Direkt an der Straße ist das einfacher da jeweils das vorderste Auto am meisten reflektiert und wahrscheinlich auch die Autos dahinter verdeckt.
dominante Frequenz bestimmen
Bewegungsrichtung aus IQ-Signal bestimmen
Verläufe von Geschwindigkeit, Signalstärke und Triggersignale (siehe unten) in csv-Datei speichern
noise-floor
einmal messen und hard coden
eventuell noise floor laufend bestimmen oder über Kalibrierphase am Anfang?
Abstand zum noise floor berechnen
Grenzwert für noise floor Abstand definieren (~5-6dB)
Triggersignal wenn Auto vorbei fährt (hohe Amplituden auf vielen Frequenzen)
Signalverlauf speichern
Triggersignal scheint verlässlich zu sein
Grenzwert festlegen
cooloff timer für nochmalige Überschreitung (um zu vermeiden dass das gleiche Auto mehrmals triggert)
maximale Geschwindigkeit nach Trigger bestimmen
vom Sensor weg:
timer für Ermittlung der maximalen Geschwindigkeit nach Trigger festlegen
zum Sensor hin:
Zwischenspeicher implementieren um auf Werte in der Vergangenheit zugreifen zu können
Wann wird Geschwindigkeitsermittlung beendet bzw. wann wird die History „vergessen“
wenn kein Signal mehr detektierbar (mit timeout)
wenn erneuter Trigger
Speicherung von Zähler und Geschwindigkeit für die Verkehrsstatistik (csv-Tabelle)
Hin- und Rückfahrten besser voneinander trennen
simple Fußgänger-Erkennung als „Amplitude unter 10km/h“
Grenzwert definieren
an verschiedenen Straßen testen
Python Programm zum Anzeigen der gespeicherten Rohdaten plus detektierte Signale als Kurvenverläufe
Für Januar 2024:
Fußgänger-Erkennung
Fußgänger über Oszillation im Signal detektieren (Arm- und Beinbewegung)