[ARM CMSIS DSP] Stereo int16 "unpacking"

OP Persönliche Seite #5071082
Hallo Leute :)

Ich würde gerne Biquad-IIR-Filter aus der CMSIS DSP Filter-Libray 
verwenden und frage mich, ob es schnelle Funktionen zum unpacking von 
interleaved Audio-Samples (16Bit PCM Stereo Audio) gibt.

Für Mono-Arrays scheint das ja toll zu sein, aber wenn ich da packing 
und unpacking noch selbst machen muss, kann ich den IIR-Filter ja gleich 
effizienter selbst schreiben (oder die Funktion kopieren und zu Stereo 
aufbohren) ...

Weiß da zufällig jemand was darüber?

VG
Mampf
Ich hätte mir da mal die Dokzu zum DMA Controller vorgenommen. Eventuell 
kann man das mit Scatter-gather DMA Modi oder sowas wie CopyRect 
hinbekommen.

DMA Funktioniert aber nur dann besser, wenn die Daten aus eine Hardware 
wie I2S rausfallen. Ansonsten ist IMHO die CPU meistens schneller.
Zwei DMA Zugriffe, die von 32bit Source auf 16bit Destination schreiben 
würden die interleaved Samples entsprechend entpacken. Der erste 
Transfer wäre dann von der entsprechenden Buffer-Adresse der interleaved 
Samples weg, der zweite von der Buffer-Adresse +2 Offset.

/edit
Ich würde übrigens trotzdem empfehlen die Biquad-Filter entsprechend 
umzuschreiben um die gefilterten Samples direkt in den "Master-Buffer" 
hineinzuaddieren... zumindest sofern du nur eine Filter-Stage brauchst.
OP Persönliche Seite
Vincent H. schrieb:
> Ich würde übrigens trotzdem empfehlen die Biquad-Filter entsprechend
> umzuschreiben um die gefilterten Samples direkt in den "Master-Buffer"
> hineinzuaddieren...

Das hab ich dann auch gemacht ... Deinterleaven und mehrmals mit den 
CMSIS DSP-Funktionen in eigene Buffer filtern und die Buffer dann mit 
Gain zusammenzuaddieren war im Prinzip aufwändiger, als das ganze gleich 
zu Fuß zu erledigen :)
OP Persönliche Seite
Ah was sehr seltsam war ...

Ich hatte zwei verschiedene Equalizer-Designs ausprobiert...

Der erste hatte mehrere Bandpassfilter. Nach jedem Bandpassfilter wurde 
ein Gain auf das Band multipliziert und dann addiert.

Der andere war kaskadiert über Low-Shelve, mehrere Peak und einem 
High-Shelve Filter.

Bei dieser Topologie hatte ich aber massive Probleme mit Instabilität 
und der Filter lief ungefähr 3sec gut, bis der dann ausbrach und gegen 
+inf wanderte.

Seltsam ... Vermutlich waren die Grenzfrequenzen bei der Sample-Rate für 
die Filter in den unteren Frequenzen zu klein und damit 
Fließkommagenauigkeit zu wenig.

Die zweite Variante hätte mir gut gefallen, weil der Frequenzverlauf 
absolut linear gewesen wäre, wenn jede Verstärkerstufe ein Gain von 0dB 
hat.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.