четверг, 21 июня 2018 г.

Média labview para mover média


Calculando a média móvel Este VI calcula e exibe a média móvel, usando um número pré-selecionado. Primeiro, o VI inicializa dois registros de deslocamento. O registro de deslocamento superior é inicializado com um elemento e, continuamente, adiciona o valor anterior com o novo valor. Este registro de deslocamento mantém o total das últimas medições x. Depois de dividir os resultados da função de adicionar com o valor pré-selecionado, o VI calcula o valor médio móvel. O registro de deslocamento de baixo contém uma matriz com a dimensão Média. Este registro de deslocamento mantém todos os valores da medição. A função de substituição substitui o novo valor após cada loop. Este VI é muito eficiente e rápido porque usa a função de elemento de substituição dentro do loop while e ele inicializa a matriz antes de entrar no loop. Este VI foi criado no LabVIEW 6.1. Bookmark amp ShareSimple Media em Movimento VI Normalmente, quando as pessoas falam sobre uma Média em Movimento, eles significam Replace Point N com a média de M pontos em torno do Ponto N. Suponha que eu tenho 100 pontos cujos valores são 1, 2, 3. 100 e eu quero Faça uma média móvel de 5 pontos. A primeira coisa a notar é que existe uma média móvel do terceiro ponto é a média de 1, 2, 3, 4, 5 3. A média do quarto ponto é a média de 2, 3, 4, 5, 6 4. No entanto, este é talvez um exemplo muito simples. Como sobre a média de uma função Step, 0 de 1 a 10, então 20 depois. Novamente, jogue fora os pontos 1 e 2. A média dos pontos 1-5 (para entrar no ponto 3) 0 (uma vez que todos os pontos são 0). Da mesma forma com o ponto 4, 5, 6,7 e 8. No entanto, o ponto 9 é a média de 0, 0, 0, 0, 20 4. Como sobre o ponto 10 Bem, deve ser a média de 0, 0, 0 , 20, 20 8, mas você se lembrou de não substituir Point 9 Hmm, parece que precisamos manter duas cópias da matriz (o que, em geral, é caro). Há várias maneiras de evitar isso. Você entende onde o problema surge no parágrafo anterior Se não, tente fazer isso com lápis e papel (ou tente codificá-lo no LabVIEW). Eu vou dar-lhe a resposta para que você possa verificar - a média móvel da função Step é -, -, 0, 0, 0, 0, 0, 0, 0, 4, 8, 12, 16, 20, 20 , 20. -, - (onde - são os valores vazios nas extremidades da matriz, os pontos que você não tem vizinhos suficientes). P. S. - não me surpreenderia se houvesse uma função LabVIEW que faça isso por você. Mas se você está aprendendo o LabVIEW e quer ter uma melhor compreensão de como os algoritmos que você está conectando no trabalho, nunca dói jogar e experimentá-lo sozinho. Você pode até encontrar uma melhoria (vários de nós já fizeram isso). Obrigado por sensibilizar sobre os pontos mais finos do método da Média em Movimento. Esta é uma ferramenta estatística que ajuda a ver o que você quer ver, abstraindo os distractores. Portanto, o método é obrigado a ter algumas falhas em algumas situações ou contexto. Mas acho que é perfeitamente adequado para o meu tipo de registro de dados dof - é uma pressão ou temperatura ou sinal de fluxo - e eu adquiro em algo como 400 amostras de segundo e depois use uma amostra única calculada em média. E o processo é bastante lento, pois meu código principal é executado a uma velocidade não superior a 20 Hz. Então, quando eu faço uma média de 5 amostras, a minha primeira amostra chega 5 x 50 ms depois e, em cada 50 ms, recebo uma amostra válida. Basicamente, estou mais preocupado com as tendências e sem valores pontuais. Nisto há pouca preocupação com amostras perdidas ou valores desonesto. Claro que eu não ousaria usar isso para uma função Step. Isso seria cruel. Raghunathan LV2012 para automatizar plataformas de teste hidráulico. Mensagem 4 de 15 (748 Visualizações) Re: Simple Moving Average VI 03-30-2016 11:58 PM Há ptbypt médio que faz o mesmo. Você pode inspecionar o código se desejar. Uma grande falha em seu código é o fato de que você cresce constantemente e encolhe uma matriz existente. Você deve tentar encontrar uma solução que funcione no local em uma matriz de tamanho fixo. Alguns exemplos foram publicados no fórum ao longo dos anos (veja hee por exemplo). A média não se importa se os elementos estão fora de ordem, então você pode simplesmente substituir o elemento mais antigo, não importa onde ele esteja localizado. Você também está antecipando o novo elemento ao início de uma matriz existente, que é sempre muito mais dispendiosa do que adicionar até o fim. O tamanho da amostra não pode mudar quando o VI estiver sendo executado. Seu registro de deslocamento deve ser inicializado com uma matriz vazia, e não uma matriz que já contém um único elemento que é zero. (Este zero extra dará médias erradas) Seu código deve ser feito em um subVI para que ele possa ser reutilizado (semelhante à versão do ptbypt). Seu VI nunca pode ser interrompido, apenas abortado. Boas dicas de otimização. O ponto de inicialização com o Zero me perdeu. E sim, o usuário não deve alterar o tamanho da amostra uma vez que ele começa a ser executado. Finalmente, vou fazer um SubVI e lidar com coisas como parar, etc. Quanto ao ponto de prepender do que adicionar o novo valor à matriz, talvez haja uma penalidade de desempenho, mas dado o tamanho da minha matriz, estou certo de que a CPU não se preocupa com a velocidade . Mas para mim tem que ser assim como eu uso os dados finais para traçar uma tendência de um parâmetro físico. Obrigado pelo seu tempo. Raghunathan LV2012 para automatizar plataformas de teste hidráulico. Obrigado por sensibilizar sobre os pontos mais finos do método da Média em Movimento. Esta é uma ferramenta estatística que ajuda a ver o que você quer ver, abstraindo os distractores. Portanto, o método é obrigado a ter algumas falhas em algumas situações ou contexto. Mas acho que é perfeitamente adequado para o meu tipo de registro de dados dof - é uma pressão ou temperatura ou sinal de fluxo - e eu adquiro em algo como 400 amostras de segundo e depois use uma amostra única calculada em média. E o processo é bastante lento, pois meu código principal é executado a uma velocidade não superior a 20 Hz. Então, quando eu faço uma média de 5 amostras, a minha primeira amostra chega 5 x 50 ms depois e, em cada 50 ms, recebo uma amostra válida. Aha Então você não quer uma média móvel, mas apenas uma média simples. Isso é muito mais fácil. É a idéia (o que funciona muito melhor com o Produtor de Design do Consumidor) - Digamos que você esteja fazendo amostragem a 400Hz, quer salvar os dados em 400 Hz (ou seja, salvar todos os dados no disco), mas deseja exibir a 20 Hz (porque Você quer ver tendências, uma base de tempo mais longa, etc.). Configure seu sistema AD para coletar 20 amostras a 400Hz (note que você pode coletar N Canais ao mesmo tempo, dando-lhe uma matriz 2D de amostras. À medida que você obtém os dados (a 20 Hz) do AD (tornando este o Produtor) Emqueue-o para o Consumidor. O Consumidor começa escrevendo os dados no disco (não deve demorar muito tempo). Agora você tem uma matriz 2D - em um Loop For, em uma base de canal por canal, média dos 20 pontos. Agora você tem uma matriz 1D, com um ponto invertido para cada canal. Avance e trafique. Observe que este esquema (a) usa todos os dados, (b) manipula dados multicanal com aplomo (e, se você estiver Do Oriente Médio, onde eles crescem, você também pode lidar com seus dados com uma ameixa suculenta), e (c) permite que você colete seus dados do equipamento AD, salve seus dados no disco mantendo todos os pontos e mostre seus dados em A tela usando todos os seus pontos, mas também progride para melhorar a relação sinal / ruído visual, tudo sem perder dados (eu fiz exatamente isso com 24 canais a 1KHz, wi Se os dados estiverem sendo feitos em um sistema remoto e enviados para o PC via TCP IP, então também temos processamento TCP no loop). Bem-vindo ao mundo emocionante de aquisição e processamento de dados com o LabVIEW. Confie em mim, este é um sistema maravilhoso para fazer este tipo de trabalho Com base no feedback que recebi no meu VI original, eu refinei o código da Média Mover para um subVI. Eu então usei para uma média de dados simulados de 10 canais, apenas para manter as coisas simples, certifiquei-me de que todos os canais tinham dados idênticos. Espera-se então obter a mesma média móvel para os 10 canais. Estou surpreso com a pequena variação que notei entre os canais - geralmente eles são próximos, mas não exatos. E apenas para explicar o processo que estou tentando, eu também encerrei um XLS. Então, de onde vem a variação. O registro de desligamento não inicializado dentro do Sub VI. Raghunathan LV2012 para automatizar plataformas de teste hidráulico. Mensagem 9 de 15 (651 Visualizações) Re: Average Moving Simple VI altenbach 04-01-2016 10:25 AM Seu código ainda não faz sentido. Quando você está chamando o subalterno um escalar de cada vez, você não está recebendo o que deseja porque o registro por turnos apenas relembra os últimos N escalares, independentemente de qual canal é. Seu código ainda é muito ineficiente e complicado. (Por exemplo, por que você ainda está usando a inserção na matriz para anexar (tanto no mani nad na sub). (Você poderia usar um subVI reenetrante e um loop FOR mais interno paralelo, mas isso parece excessivamente complicado também). Se você deseja fazer um A média de execução em cada canal, o subVI precisa manter uma matriz 2D no subVI. Tudo isso foi feito antes. Mensagem 10 de 15 (635 Visualizações)

Комментариев нет:

Отправить комментарий