Forum: Mikrocontroller und Digitale Elektronik [ARM CMSIS DSP] Stereo int16 "unpacking"


von Mampf F. (mampf) Benutzerseite


Lesenswert?

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

von Jim M. (turboj)


Lesenswert?

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.

von Vincent H. (vinci)


Lesenswert?

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.

: Bearbeitet durch User
von Mampf F. (mampf) Benutzerseite


Lesenswert?

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 :)

von Mampf F. (mampf) Benutzerseite


Lesenswert?

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.

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.