Pourquoi devrais-je utiliser des filtres numériques pour le passe-bande plutôt que de simplement manipuler des signaux dans le domaine fréquentiel puis les récupérer dans le domaine temporel?

15

Je suis assez novice dans le traitement du signal et je sais que cette question est peut-être trop large. Mais j'aimerais quand même entendre des conseils d'experts.

On m'a appris à utiliser butter(pour concevoir le filtre Butterworth alias le filtre d'amplitude maximale plate) et filtfilt(filtrage numérique en phase zéro) pour le filtrage passe-bande des signaux EEG (électroencéphalogramme) dans MATLAB hors ligne (c'est-à-dire après la fin de l'enregistrement). De cette façon, vous pouvez éviter les "retards" inévitables causés par le filtre numérique (c'est-à-dire le filtrage à phase nulle).

Ensuite, quelqu'un m'a demandé pourquoi nous ne pouvions pas utiliser fft(transformée de Fourier rapide) pour obtenir la représentation du domaine fréquentiel du signal, puis régler la puissance des fréquences indésirables à zéro, suivi de ifft(transformée de Fourier rapide inverse) pour récupérer les données filtrées dans le temps domaine dans le même but. Cette manipulation dans le domaine des fréquences m'a semblé plus simple et raisonnable, et je ne pouvais pas vraiment dire pourquoi.

Quels sont les avantages et les inconvénients de l'utilisation d'une fft/ifftméthode simple pour le filtrage passe-bande? Pourquoi les gens préfèrent utiliser des filtres numériques FIR ou IIR?

Par exemple, la fft/ifftméthode est-elle plus sujette aux fuites spectrales ou aux ondulations par rapport aux filtres numériques établis? La méthode souffre-t-elle également d'un retard de phase? Existe-t-il un moyen de visualiser la réponse impulsionnelle pour cette méthode de filtrage à des fins de comparaison?

Kouichi C. Nakamura
la source
Question connexe (mais pas nécessairement en double): electronics.stackexchange.com/questions/100348/why-use-a-filter/…
helloworld922
L'utilisation d'une FFT pour filtrer un signal est absolument valable, mais il y a quelques points à surveiller. Voir cette question / réponse similaire pour plus d'informations: stackoverflow.com/a/2949227/565542
sbell
5
Des questions comme celle-ci pourraient être plus appropriées pour le site de traitement du signal .
Jason R
2
Je pense que le Guide du scientifique et de l'ingénieur sur le traitement numérique du signal par Steven W. Smith a une réponse. Je pense qu'il dit que le sample in - sample out est beaucoup plus efficace avec un filtre numérique. Mais, il y a une largeur minimale de la fenêtre (64 échantillons ou plus, je ne me souviens pas exactement) quand il est plus approprié d'impliquer la conversion FFT où vous pouvez avoir un filtre de brique dans le domaine freq. L'efficacité n'est pas le seul problème. Le filtre en brique implique que vous devez utiliser des échantillons du futur, ce qui est impossible en temps réel.
Val
Merci, je cherchais quelque chose comme le site de traitement du signal, mais je ne l'ai pas trouvé.
Kouichi C. Nakamura

Réponses:

9

La raison principale pour laquelle le traitement dans le domaine fréquentiel ne se fait pas directement est la latence impliquée. Pour faire, par exemple, une FFT sur un signal, vous devez d'abord enregistrer l'intégralité du signal du domaine temporel, du début à la fin, avant de pouvoir le convertir en domaine fréquentiel. Ensuite, vous pouvez effectuer votre traitement, le reconvertir dans le domaine temporel et lire le résultat. Même si les deux conversions et le traitement du signal au milieu sont effectivement instantanés, vous n'obtenez pas le premier échantillon de résultat tant que le dernier échantillon d'entrée n'a pas été enregistré. Mais vous pouvez obtenir des résultats "idéaux" dans le domaine fréquentiel si vous êtes prêt à accepter cela. Par exemple, un morceau de 3 minutes enregistré à 44100 échantillons / seconde vous obligerait à faire 8 millions de transformations de points, mais ce n'est pas un gros problème sur un processeur moderne.

Vous pourriez être tenté de diviser le signal du domaine temporel en blocs de données plus petits et de taille fixe et de les traiter individuellement, réduisant ainsi la latence à la longueur d'un bloc. Cependant, cela ne fonctionne pas à cause des "effets de bord" - les échantillons à chaque extrémité d'un bloc donné ne s'aligneront pas correctement avec les échantillons correspondants des blocs adjacents, créant des artefacts répréhensibles dans les résultats.

Cela se produit en raison d'hypothèses implicites dans le processus de conversion entre le domaine temporel et le domaine fréquentiel (et vice-versa). Par exemple, la FFT et l'IFFT "supposent" que les données sont cycliques; en d'autres termes, que des blocs de données de domaine temporel identiques viennent avant et après le bloc en cours de traitement. Comme ce n'est généralement pas vrai, vous obtenez les artefacts.

Le traitement dans le domaine temporel peut avoir ses problèmes, mais le fait que vous puissiez contrôler la latence et qu'il ne produise pas d'artefacts périodiques en fait un gagnant évident dans la plupart des applications de traitement du signal en temps réel.

(Ceci est une version étendue de ma réponse précédente .)

Dave Tweed
la source
1
Merci beaucoup pour la réponse détaillée en termes simples. Maintenant, je peux voir que dans ma question, j'aurais dû mentionner que mon travail est principalement pour l'analyse hors ligne plutôt que le traitement en ligne ou en temps réel. Je vais modifier la question. Votre point est assez clair: la FFT nécessitant toute la durée des données, vous devez attendre la fin de l'enregistrement.
Kouichi C. Nakamura
1
OK très bien. Permettez-moi de souligner une dernière chose sur le filtrage dans le domaine fréquentiel qui peut ou non être un problème pour vous: les filtres ne seront pas causaux dans le domaine temporel. En d'autres termes, leurs réponses impulsionnelles s'étendent à la fois dans le temps positif et négatif. Cela peut avoir des effets surprenants si vous n'en êtes pas conscient.
Dave Tweed
Merci. J'ai recherché "Filtre causal" sur Wikipédia. Par définition, le wagon couvert FFT ne se soucie pas du temps, donc je peux voir qu'il n'est pas causal. Cette nature explique pourquoi vous ne pouvez pas l'utiliser pour le filtrage en temps réel.
Kouichi C. Nakamura
3
@DaveTweed: Votre affirmation sur la nécessité d'une FFT de 8 millions de points afin de filtrer un morceau de 3 minutes échantillonné à 44,1 kHz est incorrecte. Les algorithmes de convolution basés sur FFT sont en fait largement utilisés dans la pratique. Des méthodes telles que chevauchement-sauvegarde et chevauchement-ajout sont utilisées de sorte que des tailles FFT plus modestes (et donc une latence de traitement) sont nécessaires. Ces techniques font exactement ce que suggère votre deuxième paragraphe: utilisez des blocs plus petits tout en gérant les «effets de bord» qui se produisent entre eux.
Jason R
2
@DaveTweed: Je ne suis pas d'accord. Les méthodes de convolution rapide comme la superposition-sauvegarde et la superposition-addition sont équivalentes (jusqu'à la précision numérique) à la convolution linéaire directe (c'est-à-dire la mise en œuvre du filtre dans le domaine temporel). Il n'y a aucun compromis sur les performances dans les conditions aux limites de tout type par rapport au traitement dans le domaine temporel, et leur latence limitée les rend toujours utiles pour de nombreuses applications en temps réel. Je soutiens que l'affirmation selon laquelle le filtrage dans le domaine fréquentiel nécessite une grande FFT sur l'ensemble du signal d'entrée est fausse, et je ne sais pas ce que vous entendez par traitement de domaine fréquentiel "pur" dans ce contexte.
Jason R
2

Vous pouvez certainement utiliser des filtres idéaux "boxcar" dans le domaine fréquentiel. La dualité dit que cela équivaut à une convolution avec une fonction sinc de longueur infinie. Pour réduire les artefacts associés à la finitude de la longueur, la fonction sinc est souvent multipliée par une fenêtre. Vous avez peut-être entendu parler de Hamming, Hanning (en fait von Hann), du cosinus surélevé et d'autres techniques de fenêtrage. La convolution peut être plus simple à calculer que l'approche fft / ifft, mais les réponses sont les mêmes.

Chaque méthode aura des avantages et des inconvénients. Le Butterworth est IIR, et les wagons couverts sont FIR. Les Butterworth sont probablement plus plats dans la bande passante, mais probablement avec un roulement moins prononcé, selon l'ordre de l'IIF et la largeur de la FIR. filtfilt serait plus difficile à mettre en œuvre en temps réel.

Scott Seidman
la source
1
Pour une explication très claire du fenêtrage et du filtrage par blocs, consultez le livre, Filtres numériques de RW Hamming. Disponible chez Dover, donc très bon prix. (Soit dit en passant, Scott, je pense que c'est le Hamming de la fenêtre qui est nommé et von Hann est celui qui a obtenu son nom massacré en nommant sa fenêtre)
Le Photon
De plus, je suis presque sûr qu'un wagon couvert mis en œuvre avec des FFT est, par définition, parfaitement plat dans la bande passante. Quand nous disons que le filtre Butterworth est "au maximum plat", je pense que nous en parlons uniquement dans le contexte des filtres causaux (et Wiki dit que même dans ce cas, il est possible de faire un filtre Chebychev inverse qui est plus plat qu'un Butterworth).
The Photon
1
Convenu pour une longueur infinie idéale, mais pas si sûr après la troncature et le fenêtrage
Scott Seidman
@ThePhoton Merci pour la correction Hamming / von Hann. Impossible de visualiser correctement ma bibliothèque depuis la maison.
Scott Seidman
@The Photon; Merci pour le livre sur les filtres numériques de Hamming . Je l'ai regardé et il semblait écrit spécialement pour les apprenants du primaire. Je l'ai acheté avec espoir. :)
Kouichi C. Nakamura
0

Questions connexes

Pourquoi est-ce une mauvaise idée de filtrer en mettant à zéro les bacs FFT? /signals/6220/why-is-it-a-bad-idea-to-filter-by-zeroing-out-fft-bins

Supprimer les valeurs de FFT résulte-t-il comme un filtrage? /signals/11487/removing-values-from-fft-result-same-as-filtering?noredirect=1&lq=1

Pourquoi utilisons-nous la fenêtre dans le domaine temporel plutôt que la FFT modifie le spectre et que la FFT inverse /signals/8911/why-do-we-use-window-in-time-domain-rather -qui-ne-fft-modifie-le-spectre-et-t? noredirect = 1 & lq = 1

Kouichi C. Nakamura
la source