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/ifft
mé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/ifft
mé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?
la source
Réponses:
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 .)
la source
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.
la source
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
la source