Forum: Projekte & Code Goertzel on speed


von Ob S. (Firma: 1984now) (observer)


Angehängte Dateien:

Lesenswert?

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.
von Christoph db1uq K. (christoph_kessler)


Lesenswert?

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.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

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.
von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Danke
Der Goertzel wird ja gern als Tondecoder empfohlen, quasi ein NE567 in 
Software.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Mir ist gerade aufgefallen, dass ich im Analog-Frontend vergessen habe, 
die beiden Elkos mit Werten auszustatten. Also: 10µF/6.3V. Dürfen aber 
auch größer sein, kommt nicht so genau drauf an.
von Udo K. (udok)


Angehängte Dateien:

Lesenswert?

Nettes Projekt.  Der PicoAnalyzerDesigner funktioniert unter Win11 noch 
nicht richtig (keine Farben) 😉.
: Bearbeitet durch User
von Christoph M. (mchris)


Angehängte Dateien:

Lesenswert?

Schön wäre es, wenn man kein Windows bräuchte, sondern einfach eine 
HTML-Seite, die auf jedem Rechner läuft.
Was genau muss sie denn produzieren?
von Udo K. (udok)


Lesenswert?

Läuft nicht, Win11 Edge 😒.  Ich sehe nur den Quelltext.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Udo K. schrieb:
> Nettes Projekt.  Der PicoAnalyzerDesigner funktioniert unter Win11 noch
> nicht richtig (keine Farben) 😉.

Das Programm dient vor allem dazu, dass du die Farben selbst nach deinen 
Wünschen festlegen kannst. Einfach mal in die Ankerpunkte klicken 
(kleines Rechteck bzw. kleiner Kreis) rechts in der Vorschau.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Christoph M. schrieb:
> Schön wäre es, wenn man kein Windows bräuchte, sondern einfach eine
> HTML-Seite, die auf jedem Rechner läuft.
> Was genau muss sie denn produzieren?

Na sowas, wie du in der Array-Definition presenter.c->barcolors sehen 
kannst.

static const uint16_t barcolors[ITEM_WIDTH * BAR_HEIGHT] {
//ITEM_WIDTH * BAR_HEIGHT kommagetrennte Zahlen
};
von Götz R. (darfnurdiefolgendenz)


Lesenswert?

Alle Achtung, bin schwer beeindruckt, würde ich glatt kaufen.
von Udo K. (udok)


Angehängte Dateien:

Lesenswert?

Ob S. schrieb:
> Udo K. schrieb:
>> Nettes Projekt.  Der PicoAnalyzerDesigner funktioniert unter Win11 noch
>> nicht richtig (keine Farben) 😉.
>
> Das Programm dient vor allem dazu, dass du die Farben selbst nach deinen
> Wünschen festlegen kannst. Einfach mal in die Ankerpunkte klicken
> (kleines Rechteck bzw. kleiner Kreis) rechts in der Vorschau.

Tut halt nicht...  Ich habe die Werte nach deiner Vorlage ausgefüllt...
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Udo K. schrieb:
> Ob S. schrieb:
>> Udo K. schrieb:
>>> Nettes Projekt.  Der PicoAnalyzerDesigner funktioniert unter Win11 noch
>>> nicht richtig (keine Farben) 😉.
>>
>> Das Programm dient vor allem dazu, dass du die Farben selbst nach deinen
>> Wünschen festlegen kannst. Einfach mal in die Ankerpunkte klicken
>> (kleines Rechteck bzw. kleiner Kreis) rechts in der Vorschau.
>
> Tut halt nicht...  Ich habe die Werte nach deiner Vorlage ausgefüllt...

Hmmm, seltsam. Die Skalenstriche erscheinen aber. Und die werden mit 
denselben Methoden gezeichnet wie die eigentliche Bar.

Export-Button ist ja aktiv, benutz den mal und schau dir das Ergebnis in 
einem Editor an. Sind dann wenigstens da die Farben zu sehen? Einfach 
mal nur die erste Zeile posten, das reicht schon, um zu sehen, ob da 
auch alles grau ist oder bunt.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Udo K. schrieb:
> Ob S. schrieb:
>> Udo K. schrieb:
>>> Nettes Projekt.  Der PicoAnalyzerDesigner funktioniert unter Win11 noch
>>> nicht richtig (keine Farben) 😉.

Ich hab's gerade unter Win11 ausprobiert und sogar auf Linux(Mono). Geht 
überall.
von Udo K. (udok)


Lesenswert?

In der ersten Zeile sind alle Werte 0xFFFF.  OS ist ein aktuelles Win11.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Udo K. schrieb:
> In der ersten Zeile sind alle Werte 0xFFFF.

Hmm, also weiss, sollte aber rot sein. Kann ich nicht erklären.

> OS ist ein aktuelles Win11.

Ich hab's getestet auf Win11Pro 25H2 Build 26200.8457. Kein Problem, 
wird hübsch bunt.

Mein Entwicklungsrechner ist Win10 Pro 22H2 Build 19045.6466. Auch kein 
Problem.

Und, wie gesagt: funktioniert auch unter Mono. Linux Mint 22 "Wilma" mit 
Mate-Desktop. Das Mono ist allerdings ein wenig aufgebohrt gegenüber der 
Distribution. Die haben VB rausgeworfen (warum auch immer), ich hab's 
manuell wieder reingepflanzt, weil ich halt meistens in VB programmiere.
von Udo K. (udok)


Lesenswert?

Woran es liegt weiss ich auch nicht. Ich werde es bei Gelegenheit auf 
einem anderen Rechner probieren. Ist aber nicht super wichtig.
Danke noch mal für das Projekt.
von F. P. (fail)


Lesenswert?

Solche zunächst unerklärlichen Unterschiede liegen manchmal an den 
Region- oder Spracheinstellungen des Betriebssystems, wegen "." 
gegenüber "," bei der Konvertierung von Fließkommazahlen. Keine Ahnung, 
ob das Programm überhaupt solche verwendet.
von Udo K. (udok)


Lesenswert?

Könnte aber sein, ich habe "." für Fließkommazahlen eingestellt.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Udo K. schrieb:
> Könnte aber sein, ich habe "." für Fließkommazahlen eingestellt.

Könnte tatsächlich was damit zu tun haben. Fließkommazahlen werden nur 
an einer Stelle verwenden, der Gammawert für die Berechnung der 
Farbverläufe.

Einfach mal "0.5" anstatt "0,5" eingeben und schauen, was dann passiert.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Ob S. schrieb:

> Einfach mal "0.5" anstatt "0,5" eingeben und schauen, was dann passiert.

Ergänzend noch: Eingaben in die Textfelder müssen mit der 
Enter/Return-Taste abgeschlossen werden, um übernommen zu werden.
von Udo K. (udok)


Lesenswert?

Ob S. schrieb:
>> Einfach mal "0.5" anstatt "0,5" eingeben und schauen, was dann passiert.
>
> Ergänzend noch: Eingaben in die Textfelder müssen mit der
> Enter/Return-Taste abgeschlossen werden, um übernommen zu werden.

Das wars, mit 0.5 geht es :-).
Ich habe mich auch gewundert warum die Werte nicht richtig übernommen 
werden, es braucht ein Return :-)
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Udo K. schrieb:

> Das wars, mit 0.5 geht es :-).

Tja, Double.Parse hält leider auch dann "0,5" für einen gültigen Wert, 
wenn "." als Dezimaltrenner konfiguriert ist. Wäre es anders, hätte es 
wenigstens eine Fehlermeldung gegeben.
So aber wird das Komma als Tausender-Trennzeichen interpretiert. 
Letztlich ergibt sich also ein Gamma-Wert von 500.0. Gültig, aber führt 
offensichtlich leider irgendwie dazu, dass aus jeder Farbe (evtl. ausser 
schwarz) bei der Berechnung weiss wird.

> es braucht ein Return

Ja, an dieser Stelle sollte eigentlich mal eine Plausibilitätsprüfung 
eingebaut werden. Die hätte z.B. sinnlos niedrige oder höhe Gammawerte 
bemeckern können. Aber leider war der Programmierer zu faul dazu, diese 
Parameterprüfungen noch einzubauen...
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
Noch kein Account? Hier anmelden.