Filtre passe-bas de sous-échantillonnage pour l'audio: FIR ou IIR?

8

Je travaille sur un projet de traitement audio en temps réel dans lequel je dois sous-échantillonner une fréquence d'échantillonnage de 44,1 kHz à une fréquence d'échantillonnage inférieure encore à déterminer, essentiellement pour réduire la complexité de calcul. Je cherche un filtre de sous-échantillonnage décent, et j'ai trouvé des articles suggérant à la fois IIR (principalement elliptique) et FIR (principalement phase minimale). Le filtre à phase minimale FIR ne fonctionnerait pas nécessairement pour moi, car j'ai besoin d'un filtre à phase linéaire. Les options sont donc soit des FIR à phase linéaire qui pourraient avoir une latence considérable, soit un IIR à double filtrage ( filtfiltcommande MATLAB ) qui filtre d'abord en avant puis en arrière.

Quels sont les avantages et les inconvénients des filtres FIR et IIR en tant que filtres de sous-échantillonnage? Qu'est-ce qui est plus pratique dans une application en temps réel?

Phonon
la source

Réponses:

10

Si une phase linéaire est une exigence, cela vous orientera probablement vers une implémentation FIR. Il est possible de construire des filtres IIR qui ont une phase linéaire approximative, mais il est facile de concevoir une FIR à phase linéaire.

Si vous êtes préoccupé par la latence, le filtrage avant-arrière comme dans filtfiltn'est pas vraiment une bonne option. En général, il est vraiment destiné à être utilisé dans un processus hors ligne, car pour implémenter la technique exactement, vous devez exécuter l'intégralité du signal vers l'avant, puis faire la même chose en sens inverse. Cela implique que vous avez accès à la totalité du signal à la fois, ce qui n'est pas proportionné à un faible retard.

En général, un filtre FIR nécessitera un ordre supérieur pour un ensemble donné d'exigences de performances. Cependant, les filtres FIR apportent de réels avantages, tels qu'une stabilité garantie, une moindre sensibilité aux erreurs d'arrondi (car l'erreur de quantification n'est pas renvoyée à travers le filtre, bien que vous puissiez compenser cela avec une complexité accrue), et simplement réalisée réponse de phase linéaire. De plus, des implémentations de filtres FIR efficaces sont disponibles pour de nombreuses architectures de processeur, ce qui atténue quelque peu le coût des prises supplémentaires.

Une autre façon d'atténuer le coût supplémentaire pour les filtres FIR dans votre situation est de tirer parti de techniques de traitement du signal multidébit efficaces. Plus précisément, vous pouvez utiliser une approche de décimation polyphasée pour réduire considérablement le nombre de calculs que vous effectuez dans le processus de décimation de votre signal. Cela a pour effet de diminuer le nombre de prises effectives (en termes de complexité de calcul) dans le filtre de décimation. De plus, si vous devez décimer de manière importante, les approches à plusieurs étapes peuvent vous aider à réduire davantage votre charge. Le livre d'introduction de DSP à Lyon contient de bons documents faciles à lire sur ces sujets.

Étant donné des paramètres plus spécifiques de votre système, on pourrait faire des recommandations plus pointues. Quelles sont vos exigences de conception de filtre? De quelles capacités de calcul votre plateforme dispose-t-elle? À quel taux d'échantillonnage décimerez-vous?

Jason R
la source
La décimation polyphasée est exactement ce que je cherchais! Merci =)
Phonon
@Phonon Et si vous voulez aller encore plus loin, regardez les implémentations «CIC» (Cascade Integrator Comb). C'est une technique généralement utilisée lorsque la différence de taux d'échantillonnage est très importante.
Spacey
Les filtres CIC sont populaires pour les implémentations matérielles (comme dans les FPGA) car ils ne nécessitent aucune multiplication, seulement des retards et des ajouts. Cela se fait au détriment de certains degrés de liberté quant à la forme réelle de la réponse du filtre. Si vous avez des exigences strictes pour la réponse en fréquence du décimateur, vous pouvez faire mieux que les approches CIC, à condition de pouvoir gérer la charge de travail.
Jason R
@JasonR Vous avez éveillé ma curiosité - quoi de mieux que CIC? (Je suppose que vous parlez toujours de faire mieux que CIC pour FPGA ou parlons-nous hors ligne?)
Spacey
Mon commentaire faisait référence au fait que vous avez relativement peu de contrôle sur la réponse en fréquence d'un filtre CIC par rapport à un filtre FIR général, que vous pouvez concevoir pour avoir une coupure arbitrairement nette si vous lui donnez suffisamment de taps. Comme pour la plupart des problèmes de conception de filtre, vous avez besoin de toutes les spécifications de performances du tableau afin de choisir la meilleure approche.
Jason R
1

Qu'entendez-vous par «faible latence»?

Si vous voulez dire en dessous de 1 mS avec une forte réduction de la fréquence d'échantillonnage, alors une FIR de phase minimale peut être requise. Si vous voulez dire environ 1 / 30e de seconde, vous pourriez même être en mesure d'implémenter un filtre FIR à phase linéaire efficace en utilisant une approche d'ajout / sauvegarde à chevauchement FFT (convolution rapide).

hotpaw2
la source
1

Un petit problème concernant la complexité temporelle: les filtres FIR sont vectorisables, ce qui aide vraiment dans les architectures CPU modernes. De plus, les filtres IIR subissent un impact sur les performances car la valeur de sortie actuelle dépend des valeurs de sortie antérieures, ce qui supprime l'avantage du pipelining.

MackTuesday
la source