Comment concevoir un filtre très étroit?

15

Supposons que j'ai un signal audio échantillonné à Hz et que j'aimerais concevoir un filtre passe-bas qui isole tout ce qui est inférieur à ~ Hz. Dans le monde numérique, il s'agit d'un filtre passe-bas avec la bande passante à . De plus, la bande de transition doit également être raisonnable. Construire un filtre FIR pour cela peut avoir beaucoup de tapotements qui à long terme affectent la précision. Un filtre IIR n'est pas non plus idéal car l'audio souffre d'une réponse de phase non linéaire dans les filtres, donc à moins que le signal ne soit filtré, puis inversé et filtré à nouveau, ce n'est pas vraiment une option.4800060[-π400,π400]

Une transformation en ondelettes pourrait-elle être meilleure à cet égard que le filtrage régulier en une seule fois?

Phonon
la source
Y a-t-il une raison pour laquelle vous ne voulez pas décimer?
Lorem Ipsum
Non, décimer c'est bien tant que j'obtiens ce que je veux.
Phonon
1
Qu'est-ce qu'une bande de transition "raisonnable"? Cela va déterminer l'ordre de votre filtre. Si votre bande d'arrêt commence à 300 Hz, par exemple, vous êtes probablement en assez bonne forme. Si vous voulez une forte atténuation à quelque chose comme 60,1 Hz, cela va être long. Les longs filtres FIR ne sont pas nécessairement mauvais, cependant
Jason R
5
Vous avez besoin d'une spécification de filtre réelle, sinon la question n'a pas de sens. Énoncer l'ondulation acceptable de la bande passante, le rejet de la bande d'arrêt, la largeur de la bande de transition, etc.
Paul R
Logique. Ça ira.
Phonon

Réponses:

20

Si vous optimisez pour le temps d'ingénierie et que vous êtes sur une plate-forme qui prend bien en charge les grandes FFT (c'est-à-dire pas un point fixe), suivez les conseils de hotpaw2 et utilisez une convolution rapide . Il fonctionnera beaucoup mieux qu'une implémentation FIR naïve et devrait être relativement facile à implémenter.

D'un autre côté, si vous avez du temps à consacrer à cela pour obtenir la meilleure implémentation ou si vous êtes sur une plate-forme à virgule fixe, vous devez utiliser une structure multirate down-filter-up-soustract. Mais c'est un peu plus compliqué de tout faire correctement.

J'ai accès à des implémentations fiables et hautement optimisées des outils de convolution rapide et de filtrage multidébit. La convolution rapide prend environ 3 fois plus de temps pour obtenir des performances de signal équivalentes par rapport à la structure multidébit. De plus, c'est même sur une plate-forme à virgule flottante. L'écart s'élargirait considérablement sur un point fixe dsp.

De façon générale:

Conversion vers le bas:

Utilisez 8 étages de filtres demi-bande décimés par 2 pour transformer votre signal 48 kHz en un signal 187,5 Hz. La première étape de ce sous-échantillonnage peut avoir une très large bande de transition, permettant à l'énergie de se replier tant qu'elle ne se replie pas dans la plage inférieure à 60 Hz. Au fur et à mesure que les étapes progressent, le nombre de prises doit augmenter, mais elles seront appliquées à des taux d'échantillonnage progressivement inférieurs, de sorte que le coût global de chaque étape reste faible.

Filtration:

Effectuez votre filtrage serré autour des 60 Hz pc pour conserver l'énergie que vous voudrez éventuellement soustraire. Le filtrage serré présente un double avantage:

  1. La bande passante de transition de 1 Hz est 256 fois plus grande en termes de fréquence numérique à faible débit par rapport au débit d'origine. Ainsi, chaque pression sur votre filtre est 256 fois plus puissante.
  2. Le signal lui-même est à un taux inférieur, donc le filtre n'a besoin que de traiter 1/256 des données.

Conversion ascendante:

Il s'agit essentiellement de l'inverse des étapes de décimation. Chacun des 8 étages d'interpolateur double le taux en estimant l'échantillon qui se situe entre les échantillons d'entrée consécutifs. La bande de transition s'élargit à mesure que la fréquence d'échantillonnage augmente.

Soustraire:

Soustrayez votre signal filtré passe-bas à plein débit du signal d'origine. Si vous avez ajusté correctement tous les retards de groupe, la structure globale sera un filtre passe-haut avec une bande passante de transition étroite.

Mark Borgerding
la source
Ceci est une réponse fantastique. Puis-je avoir vos commentaires sur ce post? dsp.stackexchange.com/questions/29655/…
richieqianle
6

Essayez un filtre de convolution d'ajout / enregistrement avec chevauchement avec le FFT / IFFT le plus long qui correspond à vos contraintes de latence et de performances de calcul. Vous pouvez concevoir des filtres FIR extrêmement longs lorsque vous utilisez cette méthode avec des FFT encore plus longues.

Si vous pouvez FFT le morceau entier, ou votre fichier de signal audio entier, dans un très long FFT + IFFT (il existe des algorithmes FFT spéciaux pour les longs vecteurs qui ne tiennent pas dans dcache ou RAM), vous n'aurez pas besoin d'en faire superposez le traitement d'ajout / sauvegarde, et vous pouvez obtenir une bande de transition très étroite.

hotpaw2
la source
4

Il y a clairement deux choix: FIR & IIR. Comme déjà indiqué, le FIR nécessite une réponse impulsionnelle TRÈS longue (1000s de taps) et est coûteux en termes de mémoire, MIPS et latence avec un chevauchement add / save étant le choix le plus efficace. Cependant, la latence peut être un vrai problème. Si vous souhaitez l'utiliser comme passe-haut pour un caisson de basse home cinéma, la latence sera si élevée que vous perdrez la synchronisation labiale avec la vidéo.

L'IIF est de plusieurs ordres de grandeur moins cher et donc fréquemment utilisé. Il a en effet une réponse de phase non plate mais dans de nombreux cas, ce n'est pas un problème ou peut être contourné. Par exemple, si vous avez besoin d'un filtre passe-haut pour protéger les pilotes dans un caisson de basse, la réponse de phase n'est pas très importante car la réponse de phase globale du système est dominée par le pilote, le boîtier et l'acoustique de la pièce. Le filtre ne joue ici qu'un rôle mineur. Dans de nombreux cas, vous devez également maintenir la phase "relative" et non la phase absolue. Disons que vous voulez appliquer le passe-haut sur le signal A mais pas sur le signal B, vous pouvez simplement mettre un passe-haut correspondant sur le signal B afin que la phase relative de A et B reste la même. La latence globale et le retard de groupe de cette approche sont encore bien inférieurs à ceux de la méthode FIR.

Hilmar
la source