Sunday 29 January 2017

Embedded C Mobile Moyenne

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épondu 16 nov 16 à 23:03 initialiser total 0, count0 (chaque fois que vous voyez une nouvelle valeur Puis une entrée (scanf), un add totalValeur, un incrément (comptage), une moyenne de division (totalcount) Ce serait une moyenne mobile 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 la moyenne de calcul répondu Feb 3 15 à 4:06 Cela va effectivement calculer la moyenne totale et PAS la moyenne mobile. La moyenne mobile exponentielle (EMA) est un type de filtre à réponse impulsionnelle infinie (IIR) qui peut être utilisé dans de nombreuses applications DSP intégrées. Seulement une petite quantité de RAM et de la puissance de calcul. Qu'est-ce qu'un filtre Les filtres sont disponibles sous forme analogique et numérique et existent pour supprimer des fréquences spécifiques d'un signal. Un filtre analogique commun est le filtre passe-bas RC montré ci-dessous. Les filtres analogiques sont caractérisés par leur réponse en fréquence qui est la mesure dans laquelle les fréquences sont atténuées (réponse de magnitude) et décalées (réponse de phase). La réponse en fréquence peut être analysée en utilisant une transformée de Laplace qui définit une fonction de transfert dans le domaine S. Pour le circuit ci-dessus, la fonction de transfert est donnée par: Pour R égal à un kilo-ohm et C égal à un microfarad, la réponse de magnitude est montrée ci-dessous. Notez que l'axe des x est logarithmique (chaque marque est 10 fois plus grande que la dernière). L'axe y est en décibels (qui est une fonction logarithmique de la sortie). La fréquence de coupure pour ce filtre est de 1000 rads ou 160 Hz. C'est le point où moins de la moitié de la puissance à une fréquence donnée est transférée de l'entrée à la sortie du filtre. Les filtres analogiques doivent être utilisés dans les conceptions intégrées lors de l'échantillonnage d'un signal à l'aide d'un convertisseur analogique-numérique (ADC). L'ADC ne capture que des fréquences jusqu'à la moitié de la fréquence d'échantillonnage. Par exemple, si l'ADC acquiert 320 échantillons par seconde, le filtre ci-dessus (avec une fréquence de coupure de 160Hz) est placé entre le signal et l'entrée ADC pour empêcher l'aliasing (qui est un phénomène où des fréquences plus élevées apparaissent dans le signal échantillonné comme Fréquences basses). Filtres numériques Les filtres numériques atténuent les fréquences du logiciel plutôt que les composants analogiques. Leur implémentation comprend l'échantillonnage des signaux analogiques avec un ADC puis l'application d'un algorithme logiciel. Deux approches de conception communes pour le filtrage numérique sont les filtres FIR et les filtres IIR. Filtres FIR Les filtres à réponse impulsionnelle finie (FIR) utilisent un nombre fini d'échantillons pour générer la sortie. Une moyenne mobile simple est un exemple d'un filtre FIR passe-bas. Les fréquences plus élevées sont atténuées parce que la moyenne lisse le signal. Le filtre est fini car la sortie du filtre est déterminée par un nombre fini d'échantillons d'entrée. A titre d'exemple, un filtre de moyenne mobile à 12 points additionne les 12 échantillons les plus récents puis les divise par 12. La sortie des filtres IIR est déterminée par (jusqu'à) un nombre infini d'échantillons d'entrée. Filtres IIR Les filtres à réponse impulsionnelle infinie (IIR) sont un type de filtre numérique où la sortie est inifinetelyin théorie influencée par une entrée. La moyenne mobile exponentielle est un exemple de filtre passe-bas IIR. Moyenne mobile exponentielle Une moyenne mobile exponentielle (EMA) applique des pondérations exponentielles à chaque échantillon afin de calculer une moyenne. Bien que cela semble compliqué, l'équation connue dans le langage de filtrage numérique comme équation de différence pour calculer la sortie est simple. Dans l'équation ci-dessous, y est la sortie x est l'entrée et alpha est une constante qui définit la fréquence de coupure. Pour analyser comment ce filtre influe sur la fréquence de la sortie, la fonction de transfert de domaine Z est utilisée. La réponse en magnitude est indiquée ci-dessous pour alpha égal à 0,5. L'axe y est à nouveau représenté en décibels. L'axe des x est logarithmique de 0,001 à pi. La fréquence du monde réel correspond à l'axe x, zéro étant la tension continue et pi égal à la moitié de la fréquence d'échantillonnage. Toutes les fréquences qui sont supérieures à la moitié de la fréquence d'échantillonnage seront aliasées. Comme mentionné précédemment, un filtre analogique peut garantir que pratiquement toutes les fréquences du signal numérique sont inférieures à la moitié de la fréquence d'échantillonnage. Le filtre EMA est bénéfique dans les conceptions intégrées pour deux raisons. Tout d'abord, il est facile d'ajuster la fréquence de coupure. La diminution de la valeur de alpha réduira la fréquence de coupure du filtre comme illustré en comparant la courbe alpha 0,5 ci-dessus à la courbe ci-dessous où alpha 0,1. Deuxièmement, l'EMA est facile à coder et ne nécessite qu'une petite quantité de puissance de calcul et de mémoire. L'implémentation de code du filtre utilise l'équation de différence. Il existe deux opérations de multiplication et une opération d'addition pour chaque sortie, ce qui ignore les opérations nécessaires pour arrondir les calculs de points fixes. Seul l'échantillon le plus récent doit être stocké dans la RAM. Ceci est sensiblement inférieur à l'utilisation d'un filtre de moyenne mobile simple avec N points qui nécessite N opérations de multiplication et d'addition ainsi que N échantillons à stocker dans la RAM. Le code suivant implémente le filtre EMA à l'aide de mathématiques à points fixes 32 bits. Le code ci-dessous est un exemple d'utilisation de la fonction ci-dessus. Conclusion Les filtres, analogiques et numériques, sont un élément essentiel des conceptions intégrées. Ils permettent aux développeurs de se débarrasser des fréquences indésirables lors de l'analyse de l'entrée du capteur. Pour que les filtres numériques soient utiles, les filtres analogiques doivent supprimer toutes les fréquences supérieures à la moitié de la fréquence d'échantillonnage. Les filtres numériques IIR peuvent être des outils puissants dans le design intégré où les ressources sont limitées. La moyenne mobile exponentielle (EMA) est un exemple d'un tel filtre qui fonctionne bien dans les conceptions intégrées en raison de la faible consommation de mémoire et de puissance de calcul.


No comments:

Post a Comment