Est-il possible de mettre en œuvre une moyenne mobile en C sans la nécessité d'une fenêtre d'échantillons Ive trouvé que je peux optimiser un peu, en choisissant une taille de fenêtre thats une puissance de deux pour permettre le décalage de bits au lieu de diviser, mais pas besoin Un tampon serait bien. Existe-t-il un moyen d'exprimer un nouveau résultat de la moyenne mobile uniquement en fonction de l'ancien résultat et du nouvel échantillon Définir un exemple de moyenne mobile, à travers une fenêtre de 4 échantillons pour être: Ajouter un nouvel échantillon e: Une moyenne mobile peut être implémentée récursivement , Mais pour un calcul exact de la moyenne mobile, vous devez vous souvenir de l'échantillon d'entrée le plus ancien dans la somme (c'est-à-dire l'a dans votre exemple). Pour une longueur N moyenne mobile que vous calculez: où yn est le signal de sortie et xn est le signal d'entrée. Eq. (1) peut être écrit récursivement comme So Il faut toujours se souvenir de l'échantillon xn-N pour calculer (2). Comme l'a souligné Conrad Turner, vous pouvez utiliser une fenêtre exponentielle (infiniment longue) qui permet de calculer la sortie uniquement à partir de la sortie passée et de l'entrée courante: mais ce n'est pas une moyenne mobile standard (non pondérée), mais une valeur exponentielle (Au moins en théorie) vous n'oubliez jamais rien (les poids sont de plus en plus petits pour les échantillons loin dans le passé). J'ai mis en œuvre une moyenne mobile sans mémoire élément individuel pour un programme de suivi GPS que j'ai écrit. Je commence par 1 échantillon et diviser par 1 pour obtenir le courant avg. J'ajoute ensuite un autre échantillon et divise par 2 la valeur actuelle. Cela continue jusqu'à ce que j'arrive à la longueur de la moyenne. Chaque fois par la suite, j'ajoute dans le nouvel échantillon, obtenez la moyenne et retirez cette moyenne du total. Je ne suis pas un mathématicien, mais cela semblait être une bonne façon de le faire. J'ai pensé que cela transformerait l'estomac d'un vrai mec de maths, mais il s'avère que c'est l'un des moyens acceptés de le faire. Et ça marche bien. Rappelez-vous juste que plus votre longueur est plus lente, il suit ce que vous voulez suivre. Cela peut ne pas importe la plupart du temps, mais en suivant les satellites, si vous êtes lent, le sentier pourrait être loin de la position réelle et il sera mauvais. Vous pourriez avoir un écart entre le sat et les points de fuite. J'ai choisi une longueur de 15 mise à jour 6 fois par minute pour obtenir un lissage adéquat et ne pas trop loin de la position réelle sat avec les points de sentier lissée. Réponse Nov 16 at 23h03 initialiser total 0, count0 (chaque fois que vous voyez une nouvelle valeur Puis une entrée (scanf), un ajouter totalnewValue, un incrément (count), une division moyenne (count total) Toutes les entrées Pour calculer la moyenne sur les seules 4 dernières entrées, il faudrait 4 variables d'entrée, peut-être copier chaque entrée à une variable d'entrée plus ancienne, puis calculer la nouvelle moyenne mobile comme somme des 4 variables d'entrée, divisée par 4 Bon si toutes les entrées étaient positives pour rendre le calcul moyen répondu Feb 3 15 à 4:06 Cela va effectivement calculer la moyenne totale et PAS la moyenne mobile. 3 15 at 13:53 Votre réponse 2016 Stack Exchange, IncMean filter, ou moyenne de la catégorie de filtrage. Le traitement de signal numérique et traitement d'image (DSP et DIP) de développement de logiciels. la mise en oeuvre. L'article contient la théorie, le code source de C, les instructions de programmation et l'application d'échantillon. 1. Introduction au filtre moyen, ou filtre moyen Filtre moyen. Ou filtre moyen est un filtre de fenêtre de classe linéaire, qui lisse le signal (image). Le filtre fonctionne comme passe bas. L'idée de base derrière le filtre est pour tout élément du signal (image) prendre une moyenne dans son voisinage. Pour comprendre comment cela est fait dans la pratique, commençons par l'idée de fenêtre. 2. Fenêtre de filtre ou masque Imaginons, vous devriez lire une lettre et ce que vous voyez dans le texte restreint par trou dans le pochoir spécial comme ceci. Donc, le résultat de la lecture est sonore t. Ok, lisons la lettre encore, mais avec l'aide d'un autre stencil: Maintenant, le résultat de la lecture t est le son 240. Faisons le troisième essai: Maintenant, vous lisez la lettre t comme le son 952. Qu'est-ce qui se passe ici Pour dire que En langage mathématique, vous faites une opération (lecture) sur élément (lettre t). Et le résultat (son) dépend du voisinage de l'élément (lettres à côté de t). Et ce stencil, qui aide à ramasser quartier élément, est fenêtre Oui, la fenêtre est juste un stencil ou un modèle, au moyen de laquelle vous sélectionnez l'élément de voisinage 0151 un ensemble d'éléments autour de la donnée 0151 pour vous aider à prendre une décision. Un autre nom pour la fenêtre de filtre est masque 0151 masque est un stencil, qui cache les éléments que nous ne prêtons pas attention. Dans notre exemple, l'élément sur lequel nous travaillons est positionné à gauche de la fenêtre, dans la pratique cependant sa position habituelle est le centre de la fenêtre. Voyons quelques exemples de fenêtres. Dans une dimension. Figue. 4. Fenêtre ou masque de taille 5 en 1D. En deux dimensions. Figue. 5. Fenêtre ou masque de taille 3x3 en 2D. En trois dimensions. Pensez à la construction. Et maintenant mdash sur la pièce dans ce bâtiment. La salle est comme la fenêtre 3D, qui coupe un certain sous-espace de l'espace entier du bâtiment. Vous pouvez trouver la fenêtre 3D dans le traitement d'image de volume (voxel). 3. Comprendre le filtre moyen Maintenant, voyons, comment ldquotake une moyenne à travers les éléments de voisinage. La formule est simple 0151 résumer les éléments et diviser la somme par le nombre d'éléments. Par exemple, calculons une moyenne pour le cas, représentée dans la fig. 7 . Figue. 7. Prendre une moyenne. Et c'est tout. Oui, nous avons juste filtré le signal 1D par le filtre moyen Faisons le résumé et écrivons des instructions étape par étape pour le traitement par le filtre moyen. Filtre moyen, ou algorithme de filtrage moyen: Placez une fenêtre sur l'élément Prenez une moyenne 0151 somme des éléments et divisez la somme par le nombre d'éléments. Maintenant, quand nous avons l'algorithme, il est temps d'écrire quelques mdash code nous laisser descendre à la programmation. 4. Programmation moyenne du filtre 1D Dans cette section, nous développons un filtre moyen 1D avec fenêtre de taille 5. Nous avons un signal 1D de longueur N comme entrée. La première étape est la fenêtre de placement 0151, nous le faisons en changeant l'index de l'élément de tête: Faites attention, que nous commençons avec le troisième élément et la finition avec le dernier mais deux. Le problème est que nous ne pouvons pas commencer avec le premier élément, car dans ce cas, la partie gauche de la fenêtre de filtre est vide. Nous allons discuter ci-dessous, comment résoudre ce problème. La deuxième étape est de prendre la moyenne, ok: Maintenant, écrivons l'algorithme en tant que fonction: Type élément pourrait être défini comme: 5. Traiter les bords Pour tous les filtres de fenêtre il ya un problème. C'est le traitement des bords. Si vous placez la fenêtre sur le premier (dernier) élément, la partie gauche (droite) de la fenêtre sera vide. Pour combler le vide, le signal doit être prolongé. Pour le filtre moyen, il est bon d'étendre le signal ou l'image symétriquement, comme ceci: Ainsi, avant de passer le signal à notre fonction moyenne de filtre, le signal doit être étendu. Écrivons l'enveloppe, qui fait toutes les préparations. Comme vous pouvez le voir, notre code prend en compte certaines questions pratiques. Tout d'abord nous vérifions que nos paramètres d'entrée 0151 signal ne devrait pas être NULL, et la longueur du signal devrait être positif: Deuxième étape 0151 nous vérifions le cas N1. Ce cas est spécial, car pour construire l'extension nous avons besoin d'au moins deux éléments. Pour le signal de 1 longueur d'élément, le résultat est le signal lui-même. Ainsi, attention, notre filtre moyen fonctionne en place, si le résultat du paramètre de sortie est NULL. Allouons maintenant la mémoire pour l'extension de signal. Et vérifier l'allocation de mémoire.
No comments:
Post a Comment