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.
:
Bearbeitet durch User
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 :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.