Thursday, February 16, 2017

Déplacement Moyenne Filtre Récursif

Le guide des scientifiques et ingénieurs sur le traitement du signal numérique Par Steven W. Smith, Ph. D. Un avantage énorme du filtre de la moyenne mobile est qu'il peut être implémenté avec un algorithme qui est très rapide. Pour comprendre cet algorithme, imaginez passer un signal d'entrée, x, à travers un filtre de moyenne mobile à sept points pour former un signal de sortie, y. Maintenant, regardez comment sont calculés deux points de sortie adjacents, y 50 et y 51. Ce sont presque les mêmes points de calcul x 48 à x 53 doivent être ajoutés pour y 50 et encore pour y 51. Si y 50 a déjà été calculé , Le moyen le plus efficace de calculer y 51 est: Une fois que y 51 a été trouvé en utilisant y 50, alors y 52 peut être calculé à partir de l'échantillon y 51, et ainsi de suite. Après le premier point est calculé en y, tous les autres points peuvent être trouvés avec seulement une seule addition et soustraction par point. Cela peut être exprimé dans l'équation: Notez que cette équation utilise deux sources de données pour calculer chaque point dans la sortie: points de l'entrée et les points précédemment calculés de la sortie. C'est ce qu'on appelle une équation récursive, ce qui signifie que le résultat d'un calcul est utilisé dans les calculs futurs. (Le terme récursif a aussi d'autres significations, surtout en informatique). Le chapitre 19 traite plus en détail d'une variété de filtres récursifs. Soyez conscient que le filtre récursif à moyenne mobile est très différent des filtres récursifs typiques. En particulier, la plupart des filtres récursifs ont une réponse impulsionnelle infiniment longue (IIR), composée de sinusoïdes et exponentielles. La réponse impulsionnelle de la moyenne mobile est une impulsion rectangulaire (réponse impulsionnelle finie, ou FIR). Cet algorithme est plus rapide que les autres filtres numériques pour plusieurs raisons. Tout d'abord, il n'y a que deux calculs par point, indépendamment de la longueur du noyau du filtre. Deuxièmement, l'addition et la soustraction sont les seules opérations mathématiques nécessaires, alors que la plupart des filtres numériques nécessitent une multiplication longue. Troisièmement, le schéma d'indexation est très simple. Chaque indice de l'équation 15-3 se trouve en ajoutant ou en soustrayant des constantes entières qui peuvent être calculées avant le début du filtrage (c'est-à-dire p et q). Tout l'algorithme peut être réalisé avec une représentation entière. Selon le matériel utilisé, les entiers peuvent être plus d'un ordre de grandeur plus rapide que le point flottant. Étonnamment, la représentation entière fonctionne mieux que le point flottant avec cet algorithme, en plus d'être plus rapide. L'erreur arrondi de l'arithmétique à virgule flottante peut produire des résultats inattendus si vous ne faites pas attention. Par exemple, imaginez un 10 000 échantillons de signal filtrés par cette méthode. Le dernier échantillon dans le signal filtré contient l'erreur accumulée de 10 000 additions et 10 000 soustractions. Cela apparaît dans le signal de sortie comme un décalage de dérive. Les nombres entiers n'ont pas ce problème parce qu'il n'y a pas d'erreur arrondi dans l'arithmétique. Si vous devez utiliser la virgule flottante avec cet algorithme, le programme du Tableau 15-2 montre comment utiliser un accumulateur de double précision pour éliminer cette dérive. Moyenne mobile mobile (0) 0 bull 2 ​​160160160160 Le filtre de moyenne mobile est un filtre FIR De longueur N avec toutes les prises égales à (1N) .160 Sa connue pour la séparation de la fréquence médiocre, mais la réponse au temps excellente - en ce sens, il out-Bessels un filtre Bessel.160 Vous pouvez le mettre en œuvre avec SigmaStudios FIR bloc comme décrit Ici: Plus le filtre est long, plus le lissage est uniforme - mais l'algorithme de filtre FIR standard utilise beaucoup d'instructions pour les filtres énormes, car il doit multiplier les coefficients pour chaque robinet.160 C'est un gaspillage lorsque tous les coefficients sont les mêmes.160 Comme le montre le chapitre 15 du livre de Steven W. Smiths, vous pouvez faire un filtre de moyenne mobile avec une technique récursive qui a un robinet avant et après un retard de taille (N-1). Un tel filtre apparaît ci-dessous dans le cadre d'un test Circuit avec source de signal et un filtre de Bessel à des fins de comparaison: 160160160160 Les coefficients sont extraits vers le bloc de gain unique à l'entrée.160 Le présent échantillon ajoute à la sortie lorsqu'il entre dans le délai, l'échantillon retardé soustrait de la sortie à sa sortie. 160 L'additionneur avec la rétroaction accumule ces additions et soustractions pour former la sortie - cela fait quelque chose qui est trivial dans C mais qui est autrement une douleur dans l'interface utilisateur graphique.160 Bien qu'une technique récursive soit utilisée, le filtre reste un véritable filtre FIR - La longueur de sa réponse impulsionnelle n'est réglée que par votre retard. 160160160160 Mon entrée de test est une onde carrée avec bruit ajouté.160 Les résultats filtrés apparaissent comme la trace supérieure dans les deux photos - Tout d'abord le filtre de moyenne mobile: Le filtre de Bessel: 160160160160 Le filtre de moyenne mobile permet plus de bruit, mais il conserve mieux le La forme des ondes carrées - il ne tourne pas les coins, et les pentes ascendantes et descendantes sont symétriques (sa phase linéaire) .160 L'écoute des deux formes d'onde avec casque montre un résultat similaire - plus de bruit avec le filtre de la moyenne mobile, mais la caractéristique Le son d'une onde carrée vient à travers. Je ne suis pas certain de la solution correcte cependant puisque la somme de la moyenne de chaque échantillon introduirait une bonne quantité d'erreur d'arrondi. Hmm. Je me demande si la séparation de la partie fractionnaire de la partie entière serait utile. Divisez la partie entière de chaque nombre par le comte. Gardez trois sommes courantes: 1) la moyenne des parties entières, 2) le reste de chaque division, et 3) la partie fractionnaire de chaque nombre. Chaque fois que la partie entière d'un nombre est divisée, le résultat de la partie entière est ajouté à la somme courante moyenne et le reste est ajouté à la somme restante. Lorsque le reste de la somme courante obtient une valeur supérieure ou égale au compte, elle est divisée par le compte avec le résultat de la partie entière ajouté à la somme courante moyenne et le reste ajouté à la somme restante. De même, à chaque calcul, la partie fractionnaire est ajoutée à la somme de fonctionnement fractionnaire. Lorsque la moyenne est terminée, la somme restante de fonctionnement est divisée par le compte et le résultat est ajouté à la somme courante moyenne en tant que nombre flottant. Par exemple: Maintenant, que faire avec la somme de course fractionnaire. Le risque de débordement est beaucoup moins probable ici, bien que toujours possible, donc une façon de le gérer serait de diviser la somme de course fractionnaire par le compte à la fin et l'ajouter à notre résultat: Une alternative serait de vérifier le fractionnement de la course Somme à chaque calcul pour voir si elle est supérieure ou égale au comptage. Lorsque cela se produit, il suffit de faire la même chose que nous faisons avec le reste somme courante. Excellent Jomit Vaghela 6-Mar-07 21:00 J'ai aimé ce que vous avez dit petits emplois rapidement se transformer en gros emplois. Penser à l'optimisation tout en codant est une bonne pratique. Grand effort et explication,


No comments:

Post a Comment