Thursday 19 January 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 de la sortie: points de l'entrée et 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 un point flottant avec cet algorithme, le programme du Tableau 15-2 montre comment utiliser un accumulateur de double précision pour éliminer cette dérive. Dans les statistiques, une moyenne mobile simple est un algorithme qui calcule la moyenne non pondérée des n derniers échantillons. Le paramètre n est souvent appelé la taille de fenêtre, parce que l'algorithme peut être considéré comme une fenêtre qui glisse sur les points de données. En utilisant une formulation récursive de l'algorithme, le nombre d'opérations requises par échantillon est réduit à une addition, une soustraction et une division. Puisque la formulation est indépendante de la taille de fenêtre n. La complexité d'exécution est O (1). C'est-à-dire constante. La formule récursive de la moyenne mobile non pondérée est, où avg est la moyenne mobile et x représente un point de données. Ainsi, chaque fois que la fenêtre glisse vers la droite, un point de données, la queue, se détache et un point de données, la tête, se déplace. Mise en œuvre Une implémentation de la moyenne mobile simple doit prendre en compte l'initialisation Algorithm La fenêtre n'est pas entièrement remplie de valeurs, la formule récursive échoue. Stockage L'accès à l'élément de queue est nécessaire, qui en fonction de la mise en œuvre nécessite un stockage de n éléments. Mon implémentation utilise la formule présentée lorsque la fenêtre est totalement remplie de valeurs et passe à la formule, qui met à jour la moyenne en recalculant la somme des éléments précédents. Notez que cela peut conduire à des instabilités numériques en raison de l'arithmétique à virgule flottante. En ce qui concerne la consommation de mémoire, la mise en œuvre utilise des itérateurs pour suivre les éléments tête et queue. Cela conduit à une implémentation avec des besoins de mémoire constante indépendamment de la taille de la fenêtre. Voici la procédure de mise à jour qui glisse la fenêtre vers la droite. Dans. NET, la plupart des collections invalident leurs énumérateurs lorsque la collection sous-jacente est modifiée. La mise en œuvre, cependant, repose sur des recenseurs valides. En particulier dans les applications basées sur le streaming, les besoins de collection sous-jacents sont modifiés lorsqu'un nouvel élément arrive. Une façon de faire face à cela est de créer une simple collection de taille fixe circulaire de taille n1 qui n'invalide jamais ses itérateurs et ajoute alternativement un élément et appelle Shift. Je voudrais pouvoir comprendre comment mettre en œuvre réellement, car la fonction Test est très déroutant pour me8230 Dois-je besoin de convertir les données à la matrice, puis exécuter SMA SMA nouvelle SMA (20, tableau) pour une période de 20 SMA Comment puis-je gérer Shift () Est-il nécessaire d'implémenter des constructeurs. (Désolé pour la confusion). Non vous don8217t besoin de convertir vos données dans un tableau tant que vos données implémente IEnumerable1 et le type énuméré est double. En ce qui concerne votre messagerie privée est concerné vous devez convertir le DataRow à quelque chose qui est énumérable de valeurs doubles. Votre approche fonctionne. Maj, glisse la fenêtre une position vers la gauche. Pour un ensemble de données de 40 valeurs et une SMA de 20 périodes, vous avez 21 positions dans lesquelles la fenêtre s'insère (40 8211 20 1). Chaque fois que vous appelez Shift () la fenêtre est déplacée vers la gauche par une position et Moyenne () renvoie la SMA pour la position de la fenêtre courante. C'est-à-dire, la moyenne non pondérée de toutes les valeurs à l'intérieur de la fenêtre. De plus, ma mise en œuvre permet de calculer le SMA même si la fenêtre n'est pas pleinement remplie au début. Donc, en essence, l'espoir cela aide. Toute autre question AVIS DE DROIT DE REPRODUCTION Christoph Heindl et cheind. wordpress, 2009-2012. L'utilisation non autorisée et / ou la duplication de ce matériel sans l'autorisation expresse et écrite de cet auteur de blogs et / ou propriétaire est strictement interdite. Des extraits et des liens peuvent être utilisés, à condition qu'un crédit complet et clair soit donné à Christoph Heindl et cheind. wordpress avec une orientation appropriée et spécifique au contenu original. Messages récents


No comments:

Post a Comment