Autres conseils

Vous avez raison de dire que vous devez appliquer un filtrage passe-bas sur votre signal. Tout signal supérieur à 5500 Hz sera présent dans votre signal sous-échantillonné mais "aliasé" sous une autre fréquence. Vous devrez donc supprimer ceux-ci avant de sous-échantillonner.

C’est une bonne idée de filtrer avec des flotteurs. Il existe également des algorithmes de filtrage de points fixes, mais ceux-ci doivent généralement faire des compromis sur la qualité. Si vous avez des flotteurs, utilisez-les!

L’utilisation de filtres DFT pour le filtrage est généralement excessive et complique les choses, car les fichiers DFT ne sont pas un processus continu, mais fonctionnent sur des tampons.

Les filtres numériques ont généralement deux goûts. FIR et IIR. C’est généralement la même idée, mais les filtres IIF utilisent des boucles de rétroaction pour obtenir une réponse plus raide avec beaucoup moins de coefficients. Cela pourrait être une bonne idée pour le sous-échantillonnage, car vous avez besoin d’une pente de filtre très raide.

Le sous-échantillonnage est en quelque sorte un cas particulier. Parce que vous allez jeter 3 échantillons sur 4, vous n'avez pas besoin de les calculer. Il existe une classe spéciale de filtres pour ce filtre appelé polyphasé.

Essayez de rechercher Google plus d'informations dans les formats polyphasé IIR ou FIR polyphasé.

Notez (en plus des autres commentaires) que l’approche simple-facile-intuitive " réduit l’échantillon par un facteur de 4 en remplaçant chaque groupe de 4 échantillons consécutifs par la valeur moyenne ", n’est pas optimal mais n’est néanmoins pas faux, ni concrètement ni conceptuellement. Parce que la moyenne correspond précisément à un filtre passe-bas (une fenêtre rectangulaire, qui correspond à une fréquence sinc). Ce qui serait conceptuellement faux, c’est de sous-échantillonner un échantillon sur 4: cela créerait un aliasing.

Au fait: pratiquement tout logiciel effectuant un rééchantillonnage (audio, image ou autre; par exemple pour le cas audio: sox) en tient compte, et vous permet fréquemment de choisir le filtre passe-bas sous-jacent.

Vous devez appliquer un filtre passe-bas avant de sous-échantillonner le signal pour éviter le "crénelage". La fréquence de coupure du filtre passe-bas doit être inférieure à la fréquence de Nyquist, qui correspond à la moitié de la fréquence de l'échantillon.

Le processus que vous avez appelé "Décimation". Il y a 2 étapes:

  1. Appliquer un filtre passe-bas sur les données (dans votre cas, LPF avec Cut Off en Pi / 4).
  2. Sous-échantillonnage (dans votre cas, prélever 1 échantillon sur 4).

Il existe de nombreuses méthodes pour concevoir et appliquer le filtre passe-bas.

Vous pouvez commencer ici:

http://fr.wikipedia.org/wiki/Filter_design

Vous pouvez utiliser libsamplerate pour faire le gros du travail. Libsamplerate est une API C et prend en charge le calcul des coefficients de filtrage. Vous pouvez choisir parmi différents filtres de qualité afin de pouvoir échanger qualité contre vitesse.

Si vous préférez ne pas écrire de code, vous pouvez simplement utiliser Audacity pour effectuer la conversion du taux d'échantillonnage. . Il offre une interface graphique puissante et utilise libsamplerate pour la conversion de sa fréquence d'échantillonnage.

Je voudrais essayer d’appliquer DFT, découper 3/4 du résultat et appliquer DFT inverse. Je ne peux pas dire si ça sonnera bien sans vraiment essayer.

Le "meilleur" La solution possible est en effet une DFT, qui rejette les 3/4 supérieurs des fréquences et effectue une DFT inverse, le domaine étant limité au 1/4 inférieur. Jeter les 3/4 premiers est un filtre passe-bas dans ce cas. Le rembourrage à une puissance de 2 échantillons vous donnera probablement un avantage de vitesse. Soyez conscient de la manière dont votre paquet FFT stocke les échantillons. S'il s'agit d'une FFT complexe (qui est beaucoup plus facile à analyser et qui a généralement de meilleures propriétés), les fréquences vont soit de -22 à 22, soit de 0 à 44. Dans le premier cas, vous voulez le 1/4 moyen. Dans ce dernier cas, le 1/4 le plus externe.

Vous pouvez faire un travail adéquat en faisant la moyenne des valeurs d'échantillon ensemble. La façon naïve de prélever des échantillons quatre par quatre et de faire une moyenne pondérée égale fonctionne, mais ce n’est pas trop génial. Au lieu de cela, vous souhaiterez utiliser un " noyau " fonction qui les regroupe de manière non intuitive.

Mathématiquement, tout ce qui est en dehors de la bande des basses fréquences est éliminé par une fonction de boîte dans l’espace des fréquences. La transformée de Fourier (inverse) transforme la multiplication ponctuelle en une convolution des transformations de Fourier (inverse) des fonctions, et inversement. Donc, si nous voulons travailler dans le domaine temporel, nous devons effectuer une convolution avec la fonction de transformation de Fourier (inverse) de la boîte. Cela se révèle être proportionnel à la valeur "sinc". function (sin at) / at, où a est la largeur de la boîte dans l'espace des fréquences. Ainsi, à chaque 4ème emplacement (puisque vous sous-échantillonnez d'un facteur 4), vous pouvez additionner les points proches de celui-ci, multiplié par sin (a dt) / a dt, où dt est la distance dans le temps jusqu'à cet emplacement. Comment à proximité? Eh bien, cela dépend de la qualité de votre sonorité. Par exemple, il est courant d'ignorer tout ce qui se trouve en dehors du premier zéro ou de simplement prendre le nombre de points comme le rapport selon lequel vous sous-échantillonnez.

Enfin, il existe un moyen peu efficace (mais rapide) de se débarrasser de la majorité des échantillons et de ne conserver que le zéro, le quatrième, etc. "

Honnêtement, si cela tient dans la mémoire, je vous conseillerais simplement de choisir la route DFT. S'il n'utilise pas l'un des packages de filtres logiciels recommandés par d'autres utilisateurs pour construire le filtre,

.

Je suis récemment tombé sur BruteFIR , qui peut déjà avoir un effet ça vous intéresse?

Vous devez appliquer un filtre passe-bas (en supprimant les fréquences supérieures à 5 500 Hz), puis appliquer une décimation (laissez chaque Nème échantillon, tous les 4 dans votre cas).

Pour la décimation, les filtres FIR et non IIR sont généralement utilisés, car ils ne dépendent pas des sorties précédentes et vous ne devez donc rien calculer pour les échantillons rejetés. Les RII, en général, dépendent à la fois des entrées et des sorties. Par conséquent, à moins qu’un type particulier de RII soit utilisé, vous devez calculer chaque échantillon de sortie avant d’en éliminer 3/4.

Vous venez de chercher un article au niveau intro sur le sujet: https: // www. dspguru.com/dsp/faqs/multirate/decimation

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top