Saturday 21 January 2017

Moyenne Mobile Vi

Calcul de la moyenne mobile Ce VI calcule et affiche la moyenne mobile à l'aide d'un nombre présélectionné. Tout d'abord, le VI initialise deux registres à décalage. Le registre à décalage supérieur est initialisé avec un élément, puis ajoute continuellement la valeur précédente avec la nouvelle valeur. Ce registre à décalage conserve le total des dernières mesures x. Après avoir divisé les résultats de la fonction d'ajout avec la valeur présélectionnée, le VI calcule la valeur moyenne mobile. Le registre à décalage inférieur contient un tableau de dimension moyenne. Ce registre à décalage conserve toutes les valeurs de la mesure. La fonction de remplacement remplace la nouvelle valeur après chaque boucle. Ce VI est très efficace et rapide car il utilise la fonction replace element dans la boucle while et il initialise le tableau avant qu'il entre dans la boucle. Ce VI a été créé dans LabVIEW 6.1. Bookmark general ShareSimple Moyenne mobile Généralement, quand on parle de moyenne mobile, on entend Replace Point N par la moyenne de M points entourant le point N. Supposons que j'ai 100 points dont les valeurs sont 1, 2, 3. 100, et je veux Faire une moyenne mobile de 5 points. La moyenne du quatrième point est la moyenne de 2, 3, 4, 5, 6, et la moyenne du quatrième point est la moyenne de 1, 2, 3, 4, 4. Cependant, cet exemple est peut-être trop simple. Que diriez-vous de la moyenne d'une fonction d'étape, 0 de 1 à 10, puis 20 par la suite. Encore une fois, jetez les points 1 et 2. La moyenne des points 1 à 5 (pour entrer dans le point 3) 0 (puisque tous les points sont 0). De même, avec les points 4, 5, 6, 7 et 8. Cependant, le point 9 est la moyenne de 0, 0, 0, 0, 20 4. Que diriez-vous du point 10 Eh bien, il devrait être la moyenne de 0, 0, 0 , 20, 20 8, mais vous souvenez-vous de ne pas écraser le point 9 Hmm, semble que nous avons besoin de conserver deux copies du tableau (qui est, en général, coûteux). Il existe plusieurs façons d'éviter cela. Comprenez-vous où se trouve le problème dans le paragraphe précédent Sinon, essayez de le faire avec du crayon et du papier (ou essayez de le coder dans LabVIEW). Je vous donnerai la réponse pour que vous puissiez vérifier - la moyenne mobile de la fonction Step est -, -, 0, 0, 0, 0, 0, 0, 0, 4, 8, 12, 16, 20, 20 , 20. -, - (où - sont les valeurs vides aux extrémités du tableau, les points dont vous n'avez pas de voisins suffisants). P. S. - il ne me surprendrait pas s'il n'y avait pas une fonction LabVIEW qui fait cela pour vous. Mais si vous apprenez LabVIEW et voulez avoir une meilleure compréhension de la façon dont les algorithmes que vous branchez dans le travail, il ne fait jamais mal de jouer et de l'essayer vous-même. Vous pourriez même arriver à une amélioration (plusieurs d'entre nous l'ont fait.). Merci pour la sensibilisation concernant les points plus fins de la méthode Moyenne mobile. Cet après-coup est un outil statistique qui aide à voir ce que vous voulez voir abstraction des distracteurs. Donc, la méthode est tenue d'avoir quelques lacunes dans certaines situations ou le contexte. Mais je suppose que son parfaitement adapté pour mon type de données dof enregistrement - c'est une pression ou de la température ou un signal de débit - et je acquérir à quelque chose comme 400 échantillons sec et ensuite utiliser un échantillon unique moyennée. Et le processus est assez lent car mon code principal fonctionne à pas plus de 20 Hz. Donc, quand je fais un échantillon de 5 moyenne moyenne, mon premier échantillon arrive 5 x 50ms plus tard, puis pour chaque 50ms i obtenir un échantillon valide. Fondamentalement, je suis plus préoccupé par les tendances et pas les valeurs au comptant. En cela, il ya peu d'inquiétude au sujet des échantillons manqués ou des valeurs déloyales. Bien sûr, je n'oserais pas l'utiliser pour une fonction Step. Ce serait cruel. Raghunathan LV2012 pour automatiser les bancs d'essai hydrauliques. Message 4 sur 15 (811 Vues) Re: Moyenne mobile simple VI 03-30-2016 11:58 PM Il ya ptbypt moyen qui fait la même chose. Vous pouvez inspecter le code si vous le souhaitez. Un grand défaut dans votre code est le fait que vous constamment croître et rétrécir un tableau existant. Vous devriez essayer de trouver une solution qui fonctionne en place sur un tableau de taille fixe. Des exemples de mai ont été affichés sur le forum au fil des ans (regardez hee par exemple). La moyenne ne se soucie pas si les éléments sont hors d'ordre, de sorte que vous pouvez simplement remplacer l'élément le plus ancien, peu importe où il est situé. Vous allez également ajouter le nouvel élément au début d'un tableau existant, ce qui est toujours beaucoup plus coûteux que d'ajouter à la fin. La taille de votre échantillon ne peut pas changer une fois que le VI est en cours d'exécution. Votre registre à décalage doit être initialisé avec un tableau vide, pas un tableau contenant déjà un seul élément qui est zéro. (Ce zéro supplémentaire donnera des moyennes fausses) Votre code doit être transformé en un sous-VI afin qu'il puisse être réutilisé (similaire à la version ptbypt). Votre VI ne peut jamais être arrêté, juste avorté. Bonnes astuces d'optimisation. Le point sur l'initialisation avec Zero me manquait. Et oui l'utilisateur ne doit pas changer la taille de l'échantillon une fois qu'il commence à fonctionner. Enfin, je vais faire un SubVI et de gérer des choses comme arrêter etc .. En ce qui concerne le point de préfixation que d'ajouter la nouvelle valeur au tableau, peut-être il ya une pénalité de performance, mais étant donné la taille de mon tableau, je suis sûr que le CPU ne se soucie pas anwyay . Mais pour moi, il doit être de cette façon que j'utilise les données finales pour tracer une tendance d'un paramètre physique. Merci pour votre temps. Raghunathan LV2012 pour automatiser les bancs d'essai hydrauliques. Merci pour la sensibilisation concernant les points plus fins de la méthode Moyenne mobile. Cet après-coup est un outil statistique qui aide à voir ce que vous voulez voir abstraction des distracteurs. Donc, la méthode est tenue d'avoir quelques lacunes dans certaines situations ou le contexte. Mais je suppose que son parfaitement adapté pour mon type de données dof enregistrement - c'est une pression ou de la température ou un signal de débit - et je acquérir à quelque chose comme 400 échantillons sec et ensuite utiliser un échantillon unique moyennée. Et le processus est assez lent car mon code principal fonctionne à pas plus de 20 Hz. Donc, quand je fais un échantillon de 5 moyenne moyenne, mon premier échantillon arrive 5 x 50ms plus tard, puis pour chaque 50ms i obtenir un échantillon valide. Aha Donc vous ne voulez pas une moyenne mobile, mais juste une moyenne simple. C'est beaucoup plus facile. Heres l'idée (qui fonctionne beaucoup mieux avec un ProducerConsumer Design) - Disons que vous échantillonnage à 400Hz, voulez enregistrer les données à 400 Hz (c'est-à-dire enregistrer toutes les données sur le disque), mais souhaitez afficher à 20 Hz (parce que vous Veulent voir les tendances, une base de temps plus longue, etc.). Configurez votre système AD pour collecter 20 échantillons à 400Hz (notez que vous pouvez collecter des canaux N en même temps, en vous donnant un tableau 2D d'échantillons. Comme vous obtenez les données (à 20 Hz) de l'AD (ce qui rend le producteur) , Enqueue il au consommateur. Le consommateur commence par écrire les données sur le disque (ne devrait pas prendre beaucoup de temps.) Maintenant, vous avez un tableau 2D - dans une Boucle For, sur une base de canal par canal, la moyenne des 20 points. Notez que ce schéma (a) utilise toutes les données, (b) gère les données multicanaux avec aplomb (et, si vous le souhaitez) Du Moyen-Orient où ils poussent, vous pouvez également manipuler vos données avec une prune juteuse), et (c) vous permet de collecter vos données de l'équipement AD, enregistrer vos données sur le disque en gardant tous les points et afficher vos données sur L'écran à l'aide de tous vos points, mais aussi la moyenne pour améliorer le rapport signal / bruit visuel, le tout sans perdre de données (Ive fait exactement cela avec 24 canaux à 1KHz, les données étant prises sur un système distant et envoyé au PC Via TCPIP, donc nous avons aussi le traitement TCP dans la boucle). Bienvenue dans le monde passionnant de l'acquisition et du traitement des données avec LabVIEW. Croyez-moi, c'est un système merveilleux pour faire ce type de travail Basé sur les commentaires que j'ai obtenu sur mon VI d'origine, j'ai affiné le code Moyenne mobile dans un subVI. Je l'ai ensuite utilisé pour la moyenne d'une simulation 10Channel données - juste pour garder les choses simples, j'ai fait tous les canaux 10 avaient des données identiques. On s'attendrait alors à obtenir la même moyenne mobile pour les 10 canaux. Je suis surpris de la petite différence que j'observe entre les canaux - généralement ils sont proches mais pas exacts. Et juste pour expliquer le processus que je tente, j'ai aussi enclsoed un XLS. Alors, d'où vient la variation. Le registre à décalage non initialisé à l'intérieur du sous-VI. Raghunathan LV2012 pour automatiser les bancs d'essai hydrauliques. Message 9 sur 15 (714 Vues) Moyenne mobile simple VI altenbach 04-01-2016 10:25 Votre code n'a toujours pas de sens. Dès que vous appelez le subVI un scalaire à la fois, vous n'obtenez pas ce que vous voulez parce que le registre à décalage ne se rappelle que les N derniers scalaires, peu importe de quel canal il est. Votre code est toujours très inefficace et alambiqué. (Par exemple, pourquoi utilisez-vous encore insert dans le tableau pour ajouter (dans le mani nad dans le sous). (Vous pourriez utiliser un subVI réenetrant et une boucle FOR interne plus parallèle, mais cela semble trop compliqué trop) Si vous voulez faire un Message 10 sur 15 (698 Vues) Comment puis-je créer un n-point en moyenne courante VI J'ai été la programmation en écriture séquentielle Langages comme C depuis de nombreuses années maintenant. J'ai été en utilisant LabVIEW pour les 4 derniers mois et j'ai des problèmes d'écriture d'un n-point en moyenne courante VI. C'est vraiment ennuyeux, car ce serait vraiment banal en C ou autre chose. Mais pour Je ne peux pas concevoir comment je pourrais faire cela dans LabVIEW. J'ai utilisé LabVIEW 5 pendant la majeure partie de ce temps, et nous avons juste mis à jour à LabVIEW 8 la semaine dernière donc Ive l'apprenant. Wow, quelques grandes différences entre les deux mais le J'ai un sous-VI de 5 points en moyenne courante qui utilise une boucle run-once while avec des registres à décalage qui gardent leur valeur entre les appels VI subséquents. Cela fonctionne pour ce que j'ai besoin, mais j'ai 2 problèmes que je voudrais surmonter. 1. Je ne peux pas avoir plusieurs instances de la même subVI dans mon programme VI de niveau supérieur parce que la façon dont les registres à décalage gardent leur valeur entre les appels VI suivants. Je dois faire des doublons du fichier. vi (c'est-à-dire 5pointrunningaverage. vi, 5pointrunningaverage2.vi) afin de garder tous les registres à décalage séparés. 2. Je veux qu'il soit un n-point de moyenne courante. Actuellement, je dois sauter dans le VI et ajouter un autre registre à décalage pour ajouter un autre point. Je change souvent mon taux d'échantillonnage, et donc être en mesure d'avoir une autre fenêtre de moyenne est vraiment pratique. Ainsi, le VI prend 2 entrées: n - (entier) le nombre de points à l'ordinateur de la moyenne au cours. In - (réel) le point de données actuel. Ive a également pensé à la possibilité d'avoir besoin d'une 3ème entrée qui est l'instance qui pourrait aider à garder les variables dans le sous-VI séparés et donc pas besoin de fichiers séparés en double. Dans le cas où vous vous demandez, Im utilisant une moyenne courante pour rendre numérique HUD facile à lire. Les données réelles que Im enregistrement au fichier ne sera pas passer par la fonction de moyenne courante, car comme vous pouvez le voir par la fonction de sortie, il y aura un changement de phase dans la sortie. À des taux d'échantillonnage élevés, les écrans numériques peuvent se déplacer très rapidement et cela les rend difficiles à lire. Autres recommandations sur la façon de rendre les affichages numériques facile à lire pour aider les opérateurs lors de l'exécution des tests Comme pour le lissage de données instantanées, pour ainsi dire. Je fais déjà les affichages très grands s'ils sont critiques. Im très intéressé par ce n-point solution moyenne courante. Ive été gratter ma tête sur elle pendant un certain temps maintenant et je suis assez perplexe sur la façon d'aborder ce dans LabVIEW. L'aide est très appréciée, - nickerbocker Les opérations atomiques (deleteinsert) DOIT faire ce qui suit: Lorsque vous insérez dans le tableau, tous les éléments supérieurs doivent être déplacés vers le haut d'un emplacement, puis l'élément est inséré. Lorsque vous supprimez du tableau, le fichier doit être supprimé et tous les éléments supérieurs déplacés vers le bas d'un emplacement. Les deux opérations impliquent une opération de redimensionnement de tableau et un transfert de données en mémoire. Comment LabVIEW peut-il être sûr que la mémoire peut être réutilisée? Que faire si votre code en supprime un, mais en insère deux à chaque itération? Il se pourrait bien que le compilateur LabVIEW réutilise correctement la mémoire dans votre cas particulier, mais il n'y a pas Garanties. Un tableau à cinq éléments est l'arachide. Donc il serait probablement difficile de remarquer une différence. Vous voudrez peut-être exécuter un benchmark des algorithmes différents en utilisant un tampon énorme. Le premier appel est défini comme suit dans l'aide en ligne: Premier appel renvoie TRUE la première fois que le VI s'exécute après que le premier appelant de niveau supérieur commence à s'exécuter, par exemple lorsque le bouton Exécuter est cliqué ou que la méthode Exécuter VI s'exécute. Si un deuxième appel de haut niveau appelle le VI tandis que le premier appel de niveau supérieur est toujours en cours d'exécution, First Call ne retourne pas TRUE une seconde fois. Elle ne sera vraie qu'une fois exactement pendant toute l'exécution du VI de niveau supérieur, seulement la première fois qu'il est appelé de n'importe où.


No comments:

Post a Comment