Dieser schicke Audio Spectrum Analyzer ist mit sehr wenig Hardware
Aufwand realisiert. Er basiert auf dem RP2040 und
ist auch bekannt als Raspberry-PI Pico. Mittlerweile gibt es den in
diversen Varianten und Ausführungen. Den hier Verwendeten RP2040-Zero
gibt es bereits unter €3.00 / Stk.
Stückliste und Aufbau der Teile gemäß dieser Zeichnung:
Die schwarze Plexiglas Grundplatte wird gemäß dieser Zeichnung gefertigt.
In der 250x100mm großen Rückplatte müssen längsseitig 3 x M3 Löcher
gebohrt werden mit den selben Massen wie die 3mm Löcher der Grundplatte
so dass diese wie oben gezeichnet montiert werden kann. Die M3
Gewindelöcher sollten entsprechend den verwendeten M3 Senkschrauben
mindestens 15mm tief sein. Die 3mm Löcher in der Grundplatte sollten
angesenkt werden so dass die Schrauben bündig sind. Auch sollte man
beachten dass die M3 Löcher in der Mitte der Plexiglas Platte sind, da
die Dicke etwas ungenau sein kann.
Die Software ist auf die 2 Cores aufgeteilt, einer für die
Signalverarbeitung und einer zur Ansteuerung der Smart-LED und das USB
User Interface.
Die Signale werden mit 48kSPS gemessen und nach der Anpassung durch
den Auto-Level entsprechend mit Bandpassfiltern aufbereitet. Die Filter
können nicht einzeln eingestellt werden. Aber man kann das tiefste und
höchste Filter einstellen. Mit der Anzahl der Kanäle bzw. LED Streifen
errechnet dann die Software die logarithmischen Schritte zwischen allen
Filtern. Im Beispiel hier ist der Tiefste Filter auf 50Hz eingestellt,
der höchste auf 6400Hz. Mit 8 Kanälen ergibt das 50, 100, 200, 400, 800,
1600,
3200, 6400Hz. Verwendet man ein Mikrofon, kann es sein, dass man andere
Frequenzbereiche einstellen muss und die einzelnen Kanäle kalibrieren muss
um ein ausgewogenes Bild zu erhalten.
Die letzte LED des ersten Kanals ist gleichzeitig eine Status-LED.
Leuchtet sie gelb, ist das Eingangssignal übersteuert. Sie blinkt nicht
gleich bei jedem einzelnen zu hohen Wert auf, sondern erst wenn mehrere
Übersteuerungen in einer kurzen Zeit erfolgen.
Leuchtet sie rot, wurde ein FIFO-Überlauf festgestellt. Ein Grund dafür
ist die Kommunikation via USB, also während der Parametrierung. Ein
weiterer Grund kann sein, wenn alle 12 Kanäle verwendet werden und viele
hohe Frequenzen berechnet werden müssen, also z.B. der höchste Filter
>6400Hz eingestellt wird. In diesem Fall reicht einfach die
Rechenzeit nicht aus. Abhilfe könnte eine höhere Taktfrequenz bringen.
Im Source-Code sieht man beim initialisieren in der main() Funktion,
dass diese auf das spezifizierte Maximum von 133MHz eingestellt wird.
Eine Übertaktung bis 150MHz wäre aber problemlos möglich, bedeutet aber
dass man den Code neu kompilieren muss.
Die Konfiguration erfolgt via USB Schnittstelle. Nach dem Einstecken am PC erscheint ein serielles Gerät (COMx bei Windows, ttyACMx bei Linux). Mit einem Terminalprogramm wie z.B. PuTTY verbindet man zu dieser Schnittstelle und kann dann Konfigurations-Einstellungen Einsehen und verändern. PuTTY ist für alle gängigen Betriebssysteme frei erhältlich.
Man kann dafür aber auch das Smart Phone benutzen wie hier beschrieben.
Hier im Beispiel unter Linux mit der Schnittstelle /dev/ttyACM0:
Nach dem Öffnen, erscheint ein schwarzes Fenster mit dem
Terminal-Inhalt. Nach der Eingabe von ? und drücken der Enter-Taste (↵),
antwortet die Software mit der Beschreibung und Version sowie dem Hilfetext wie in diesem Beispiel:
WS2818 LED Strip 8-Band Spectrum Analyter binary for RP2040, (c) 2023 by Ludescher
0.0.0-Prototype-1
? = Help
A = List actual settings.
C = List all band corrections.
D = set all to default.
S = Store actual settings to flash.
X=n Set parameter X to value n.
Der Text ist selbsterklärend. So kann man mit A↵ alle Einstellungen ansehen
(wie oben Dargestellt) und mit X=n eine Einstellung verändern. Zum Beispiel
E=5↵ verändert die Helligkeit auf Stufe 5.
Sind alle Einstellungen wie gewünscht, tippt man S↵. Damit werden diese im Flash-Speicher gespeichert und bleiben auch nach dem Ausschalten erhalten.
Mit dem Wert N stellt man die Anzahl LED pro Kanal bzw. LED Streifen ein (12).
Mit dem Wert B stellt man die Anzahl LED Kanäle (Band) ein (8).
Mit dem Wert T stellt man die Geschwindigkeit ein, wie schnell die LEDs im Kanal reduziert werden.
Mit dem Wert P stellt man die Geschwindigkeit ein, wie schnell die Peak LEDs im Kanal reduziert werden.
Mit dem Wert V stellt man ein, ob die LED Streifen Linear verkabelt sind, oder ob jede Zweite kopfüber (reverse) verkabelt ist.
Mit dem Wert E stellt man die Helligkeit in 10 Stufen ein.
Mit dem Wert M stellt man den Farb-Modus ein, höhere Zahl = mehr Farbunterschiede zwischen den einzelnen Streifen.
Mit dem Wert I stellt man die Empfindlichkeit des Signaleingangs in mVrms ein (I=200 sind 200mVrms).
Mit dem Wert R=0 wählt man, dass die LEDs in den Kanälen Linear
angesteuert werden, also erste LED > 0%, letzte LED = 100%, bei 10
LEDs also je 10%.
Mit dem Wert R>0 wählt man, dass die LEDs in den Kanälen
Logarithmisch angesteuert werden. Z.B. R=30 heißt 30db für die
tiefste LED und 0db für die höchste, bei 10 LEDs also je 3db pro LED.
Mit dem Wert H stellt man die Frequenz des höchsten Bandpassfilters
ein. Nach der Eingabe werden alle Filter neu berechnet und die einzelnen
Frequenzen angezeigt.
Mit dem Wert L stellt man die Frequenz des tiefsten Bandpassfilters
ein. Nach der Eingabe werden alle Filter neu berechnet und die einzelnen
Frequenzen angezeigt.
Mit dem Wert F stellt man die Messfrequenz der Pegel ein. F=20 sind
20 Hz. Das heißt, die Pegelmessung aller Kanäle wird 20 mal pro Sekunde
auf Null gestellt. Soll eine Audio-Frequenz von 20Hz eingeschlossen
werden, sollte hier 20 oder weniger eingestellt werden. Ein tieferer
Wert macht die Anzeige der Kanäle aber auch träger.
Mit C↵ (ohne Wert) werden die Korrekturwerte aller Kanäle in %
angezeigt. Die obersten Kanäle müssen ggf > 100% sein da die Filter
mit weniger Messungen und damit weniger präzise berechnet werden können.
Mit Y wählt man, welchen Kanal man einstellen möchte. Z.B. Y=2↵ wählt Kanal 2, C=120↵ stellt Kanal 2 auf 120% ein.
Um die Pegelkorrektur der Kanäle einzustellen, kann man einen
Frequenzgenerator verwenden, die entsprechende Frequenz einstellen und
den Pegel entsprechend anpassen.
Verwendet man ein Mikrofon welches das Audiosignal via Lautsprecher
aufnimmt, muss man bedenken, dass Resonanzen der Lautsprecher und die
Akustik des Raums die Pegel beeinflussen können. So kann z.B. beim 800Hz
Filter 800Hz weniger anzeigen als 810Hz oder 790Hz. Da kann es
hilfreich sein, die Frequenz etwas zu variieren.
Die Software wurde auf einem Raspberry Pi 400 (technisch identisch mit dem Pi 4B) entwickelt.
Der Sourcecode sowie weitere wichtige Dateien, welche zum Compilieren benötigt werden, können hier von einer Zip-Datei heruntergeladen werden. Ebenfalls enthalten ist die Datei spectrum.uf2. Dies ist der binäre Code, welcher in die Zielhardware geladen wird.