Filtrage du streaming audio

9

Étant donné quelque chose comme 103 points de données (N=103), un DFT restituera 103 valeurs de fréquence. Ensuite, faire quelque chose comme filtrer les hautes fréquences implique de mettre à zéro les valeurs des hautes fréquences de la DFT et de faire la DFT inverse pour récupérer 103 points de données qui représentent le signal d'origine sans les hautes fréquences.

Cela a du sens pour moi étant donné les 103 points de données à la fois. Mais qu'en est-il du streaming d'un fichier audio WAV qui est plutôt volumineux (disons par exempleN=dix5). Si l'on voulait filtrer les hautes fréquences alors l'approche que je viens de décrire sur l'ensemble des données dedix5les points ont logiquement un sens. Mais ce n'est pas raisonnable lors de la diffusion d'un fichier WAV pour la lecture. Que fait-on pour filtrer à haute fréquence une lecture en continu d'un fichier audio?

user782220
la source

Réponses:

12

FFT -> mise à zéro des coefficients -> IFFT n'est pas la bonne façon de faire le filtrage - le filtre réel réalisé en le faisant a de mauvaises caractéristiques.

La bonne façon de filtrer les signaux est de calculer les coefficients d'un filtre numérique , un processus connu sous le nom de conception de filtre et pour lequel un grand nombre d'outils logiciels / documentation est disponible, et de l'appliquer à votre séquence d'entrée. En résumé, cela consiste à évaluer pour chaque échantillon une combinaison linéaire des échantillons d'entrée précédents et des échantillons de sortie passés. Selon les exigences de votre filtre en termes de réjection / ondulation de la bande d'arrêt, seuls quelques coefficients peuvent être nécessaires, ce qui le rend beaucoup plus efficace que la FFT. Étant donné que les seules informations requises pour calculer un échantillon de sortie sont les quelques échantillons d'entrée / sortie passés, il n'y a aucun problème à les appliquer au streaming audio.

Vous n'aurez besoin d'utiliser la FFT que si vous décidez d'utiliser des filtres FIR, et si vos exigences en matière de filtres font qu'ils ont un nombre incroyablement élevé de coefficients. Dans ce cas particulier, il sera efficace d'appliquer le filtre à des blocs successifs de vos données d'entrée via FFT et à chevauchement .

pichenettes
la source
8

La meilleure façon d'appliquer le filtrage du domaine fréquentiel pour les flux de signaux est l'ajout de chevauchement (ou les saveurs associées chevauchent la sauvegarde, ou bloquent les convolvers, etc.).

Vous prenez essentiellement une image à la fois (disons 1024 échantillons). Mettez le zéro à deux fois la longueur (2048), effectuez une FFT, multipliez avec la fonction de transfert (également à zéro) du filtre, effectuez une FFT inverse. Enregistrez les 1024 derniers échantillons en tant que chevauchement pour l'image suivante, ajoutez le chevauchement de l'image précédente les 1024 premiers échantillons et ceci est votre sortie. Pour chaque 1024 échantillons d'entrée, vous obtenez 1024 échantillons de sortie et vous répétez simplement cela pour les images suivantes jusqu'à ce que le flux soit terminé.

Toute l'entreprise avec un remplissage nul et un chevauchement est nécessaire car la multiplication dans le domaine fréquentiel implémente la convolution circulaire et vous voulez vraiment une convolution linéaire dans la plupart des applications.

Il existe des variantes à ces méthodes utilisant différentes fonctions de fenêtre et chevauchements mais c'est toujours le même principe: découpez-le en petits morceaux et traitez un morceau à la fois.

Hilmar
la source
Y a-t-il un livre qui rentre dans les détails de cela?
user782220
@ user782220: dsp.stackexchange.com/questions/427/…
Martin Thompson