Mal wieder etwas Langeweile, deswegen habe ich mich mal daran gemacht, meine damalige ATtiny85-Lösung Beitrag "Audio Spektrum Analyzer mit ATtiny85" für einen PiPico umzusetzen. Natürlich erheblich aufgebohrt, da der Pico wesentlich mehr Rechenleistung zu bieten hat als der kleine Tiny. Deswegen brauchte ich auch nicht alle Tricks zu verwenden, die ich damals beim Tiny angewandt hatte. Die gesamte Signalverarbeitung läuft jetzt mit 32Bit (in verschiedenen Festkommaformaten, denn eine FPU hat der PiPico nicht). Es gibt jetzt statt 10 (bzw. 11) Bins im Oktavabstand 19 im "Halboktavabstand". Zwischen zwei benachbarten Bins unterscheidet sich also die Mittenfrequenz nicht mehr um den Faktor 2, sondern um den Faktor sqrt(2). Dementsprechend mussten die Halbbandfilter steiler werden und sind jetzt 4.er Ordnung statt 3.er wie beim Original. Außerdem kann das Teil jetzt Stereo, hat also zwei (identische) Kanäle zu bieten. Die Ausgabe erfolgt nicht mehr über ein WS2812-Array, sondern über ein günstiges ILI9341-SPI-Display (in meinem Fall 3,8") und zwar mit 60Hz Refresh (statt 16,7Hz im Original). Gleich geblieben ist die Eigenschaft, dass kein Framebuffer im Controller benötigt wird. Denn damals wie heute hätte der RAM dafür nicht gereicht. Die Signalverarbeitung erfordert gut 80% der Rechenleistung eines PiPico Kerns und läuft deshalb komplett auf Core1. Die Aufbereitung der Daten für das Display läuft auf Core0 und kann bei besonders ungünstigen Audiodaten (Extremfall: alle Bins gleichzeitig von 0 auf Max) gelegentlich mal aus der Echtzeit geraten. Macht keinen Schlimmen, der Code ist darauf vorbereitet. Es wird maximal ein kleiner Ruckler in den Animationen sichtbar. Die Überlastsituation kann man sich auf Wunsch mit der LED des Pico anzeigen lassen. Mit realer Musik angesteuert habe ich sie noch nie aufblitzen sehen. Das Analog-Frontend ist wieder bewusst primitiv gehalten, Anti- Aliasfilter gibt's also auch hier wieder nicht. Es ist dafür ausgelegt, Eingangspegel bis +2dBV brauchbar an die ADC des Pico zu liefern. Ach so: diesmal gibt's auch Quelltexte. Sind für das offizielle PiPico-C/C++-SDK geschrieben. Eine Helper-Anwendung (DotNet4.8.1) zur Herstellung eigener Farbschemata für die Bins habe ich auch gleich beigelegt. Der Screenshot zeigt das tatsächlich im Code verwendete Design (presenter.c->barcolors[]). Der Export-Button legt direkt den C-Quelltext in die Zwischenablage. Sorry übrigens für die Qualität des Videos und des daraus entnommenen Screenshot. Die Kamera hatte zwar Makrofunktion, aber erhebliche Probleme mit der Tiefenschärfe und Farbtreue. Das Displaybild sieht also in der Realität deutlich besser aus als hier gezeigt.
Habe ich das richtig in Erinnerung, dass der Goertzel nur ein Amplitudenspektrum liefert, keine Phasen wie die Fourier-Analyse? https://de.wikipedia.org/wiki/Goertzel-Algorithmus Normalerweise bracht man die ja nicht, ist also kein Problem.
Christoph db1uq K. schrieb: > Habe ich das richtig in Erinnerung, dass der Goertzel nur ein > Amplitudenspektrum liefert, keine Phasen wie die Fourier-Analyse? Nein. Goertzel kann auch Phaseninfos liefern. Wird aber in dieser Anwendung nicht benötigt und deshalb werden etwas vereinfachte Goertzels verwendet, die halt nur die Amplitdude liefern können.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.


