J'essaie de comprendre la relation entre un filtre FIR conçu à partir de "premiers principes" en utilisant un noyau de filtre avec convolution, et un filtre conçu de deux manières en utilisant FFT (voir ci-dessous).
Pour autant que je comprends, la réponse impulsionnelle d'un filtre FIR est la même chose que le noyau de convolution du filtre. (Corrige moi si je me trompe.)
De plus, à ma connaissance, les fréquences composantes (c'est-à-dire la transformée de Fourier) de la réponse impulsionnelle d'un filtre FIR sont identiques à la réponse en fréquence du filtre. Et, par conséquent, la transformée de Fourier inverse me rendra la réponse impulsionnelle (encore une fois, corrigez-moi si je me trompe).
Cela m'amène à deux conclusions (ignorer la réponse de phase ou supposer une réponse de phase linéaire):
Je devrais être capable de concevoir un filtre FIR de réponse en fréquence arbitraire en "dessinant" ma réponse en fréquence souhaitée, en prenant un IFFT pour obtenir la réponse impulsionnelle, et en l'utilisant comme mon noyau de convolution.
Alternativement, je devrais être capable de créer un filtre en prenant la FFT du signal d'entrée, en multipliant par ma réponse en fréquence arbitraire souhaitée dans le domaine fréquentiel, et en prenant une IFFT du résultat pour produire le signal de sortie.
Intuitivement, on dirait que 1 & 2 sont équivalents, mais je ne suis pas sûr de pouvoir le prouver.
Il semble que les gens (et la littérature DSP) se donnent beaucoup de mal pour concevoir des noyaux FIR avec des réponses prédéfinies, en utilisant (pour moi) des algorithmes compliqués comme Chebyshev ou Remez (je jette quelques noms que j'ai lus, sans vraiment les comprendre) .
- Pourquoi aller à ces longueurs, lorsqu'une transformation FFT / IFFT existe pour chaque noyau FIR possible?
- Pourquoi ne pas simplement dessiner la réponse en fréquence exacte que vous désirez, prendre un IFFT, et il y a votre noyau FIR (méthode 1 ci-dessus)?
la source
Réponses:
L'une des raisons pour lesquelles vous voyez des gens concevoir des filtres FIR, plutôt que d'adopter une approche directe (comme 1 et 2) est que l'approche directe ne prend généralement pas en compte la périodicité dans le domaine fréquentiel, et le fait que la convolution implémentée à l'aide d' une FFT est convolution circulaire .
Qu'est-ce que ça veut dire?
Supposons que vous ayez un signal et une réponse impulsionnelle de filtre (noyau de convolution; vous avez raison, ce sont les mêmes) h = [ 1 , 1 ] .x = [ 1 , 2 , 3 , 4 ] h = [ 1 , 1 ]
La convolution est [ 1 , 3 , 5 , 7 , 4 ] , un vecteur de 5 longueurs. Si vous utilisez la FFT (de mauvaise longueur, 4), la réponse que vous obtenez est [ 3 , 5 , 7 , 5 ] . La raison de la différence est que le résultat de la convolution linéaire de ces deux est de longueur 5, mais le résultat de la convolution circulaire est quelle que soit la longueur de la FFT.y= x ∗ h [ 1 , 3 , 5 , 7 , 4 ] [ 3 , 5 , 7 , 5 ]
Si la longueur de la FFT est supérieure ou égale à la longueur du résultat de la convolution linéaire, alors les deux sont les mêmes. Sinon, les deux ne sont pas les mêmes (à moins que les données ne concordent d'une manière ou d'une autre à le faire, par exemple si un signal était nul).
la source
Un problème concerne les transformations de longueur infinie qui s'enroulent lorsque vous utilisez une FFT de longueur finie. La transformée de Fourier d'une réponse en fréquence de longueur finie est une réponse impulsionnelle de longueur infinie ou un noyau de filtre. La plupart des gens aimeraient que leur filtre se termine avant de mourir ou de manquer de mémoire d'ordinateur, donc besoin d'astuces pour produire des filtres FIR plus courts. Le simple fait de laisser la queue de la réponse impulsionnelle infinie enrouler la FFT, ou de la tronquer à une certaine longueur générique, peut produire un filtre FIR inférieur pour la spécification de fréquence souhaitée par rapport à l'un des prototypes de filtres "classiques".
Un autre problème est qu'une réponse en fréquence aléatoire "dessinée" a très souvent une réponse horrible (dépassements sauvages) entre les points dessinés à n'importe quelle résolution finie. Convertissez-vous en un filtre FIR, et ça sonne comme un fou. Les prototypes de filtres classiques sont conçus pour avoir des fonctions de réponse en fréquence qui sont lisses entre les points d'échantillonnage.
Votre (2) est appelé convolution rapide, et couramment utilisé si la FFT est plus longue que la longueur de la fenêtre de données plus le noyau de filtre combiné, et un ajout / enregistrement de chevauchement approprié est utilisé pour prendre en charge le début / la fin de chaque segment de convolution ou fenêtre (car les FFT ont généralement une longueur en blocs).
la source
Re 1): Oui, vous pouvez concevoir un filtre FIR en "dessinant" la réponse en fréquence (en amplitude et en phase. Cependant, cela a tendance à être très inefficace: la longueur de la réponse impulsionnelle (et l'ordre du filtre) est simplement pré -déterminé par votre longueur de FFT Si vous choisissez une FFT à 128 points, vous obtenez 128 prises pour la réponse impulsionnelle et si vous choisissez la FFT à 4096 points, vous obtenez 4096 prises de filtre.
Concernant 2): Oui, vous pouvez filtrer par multiplication dans le domaine fréquentiel et c'est en effet la seule façon de le faire efficacement pour des réponses impulsionnelles importantes. Cependant, comme l'a souligné Peter K, la multiplication dans le domaine fréquentiel correspond à la convolution circulaire. La méthode la plus courante pour implémenter la convolution linéaire est l'algorithme "chevauchement" ou "chevauchement" (facilement googlé).
la source
Je ne suis pas sûr de comprendre tout ce qui a été dit ici, mais je voudrais plaider en faveur de la méthode de la transformée de Fourier.
Tout d'abord, c'est un moyen incroyablement flexible et simple de concevoir des filtres FIR. Comme vous l'avez dit, il suffit de définir l'amplitude et les réponses de phase. Cependant, comme cela a été dit, vous devez faire un peu attention à la façon dont vous définissez la réponse. Une réponse arbitraire peut nécessiter un nombre excessivement important de taps à implémenter et donner une réponse terrible dans le domaine temporel. Faites donc attention à la façon dont vous la définissez.
Deuxièmement, il est vrai que la méthode de Parks McClellan par exemple, peut générer un meilleur filtre que la méthode de Fourier pour certaines exigences spécifiques, mais il n'est pas facile de contrôler le nombre de prises et de définir également l'amplitude, la phase et la réponse de l'étape avec cela méthode.
Par exemple, supposons que vous souhaitiez concevoir un filtre FIR avec des caractéristiques similaires à un Bessel IIR 10 pôles, mais que vous souhaitiez rétrécir un peu la bande de transition (au détriment du dépassement de la réponse échelonnée). Ensuite, la méthode de Fourier rend ce problème facile à résoudre avec environ 22 taps, en fonction de la réduction de la bande de transition.
Si vous voulez voir de quoi la méthode Fourier est capable, essayez ce programme FIR http://www.iowahills.com/5FIRFiltersPage.html (c'est gratuit). Il peut, par exemple, concevoir des équivalents IIR pour les filtres Gauss, Bessel, Butterworth et Inverse Chebyshev. En général, il vous permet d'ajuster la réponse d'un filtre à presque tout, ce qui est le point fort de la méthode de Fourier. En revanche, les filtres ne sont probablement pas optimaux pour certaines exigences spécifiques.
la source
AFAIK c'est ce qu'on appelle "l'approche de filtrage naïf". Vous pouvez influencer le contenu spectral à certains points de l'espace des fréquences, mais vous ne faites rien d'utile pour le contenu des fréquences entre ces points. Si vous concevez un filtre FIR approprié, vous tenez également compte des points entre ces points principaux et un tel filtre est bien meilleur que le premier.
Cordialement, Bul.
la source