Labview moving average array


Cálculo da 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 registradores de deslocamento. O registro de deslocamento superior é inicializado com um elemento e, em seguida, adiciona continuamente o valor anterior com o novo valor. Esse registrador de deslocamento mantém o total das últimas medidas x. Depois de dividir os resultados da função de adição com o valor pré-selecionado, o VI calcula o valor da média móvel. O registro de deslocamento inferior contém uma matriz com a dimensão Média. Este registo 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 replace element dentro do loop while e inicializa a matriz antes de entrar no loop. Este VI foi criado no LabVIEW 6.1. Bookmark Ampliar ShareSimple Moving Average VI Normalmente, quando as pessoas falam sobre uma média móvel, 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 Fazer uma média móvel de 5 pontos. A 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 de etapa, 0 de 1 a 10, então 20 em seguida. 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 os pontos 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 Ponto 9 Hmm, parece que precisamos manter duas cópias do Array (que é, em geral, caro). Existem várias maneiras que você pode evitar fazer 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 lhe darei a resposta para que você possa verificar - a média móvel da Função de Passo é -, -, 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 não houvesse uma função LabVIEW que faz isso para 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ê pôde mesmo vir acima com uma melhoria (diversos de nós fizeram assim.). Obrigado por sensibilizar sobre os pontos mais finos do método de média móvel. Este afterall é 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 eu acho que é perfeitamente adequado para o meu tipo de registro de dados do dof - é uma pressão ou temperatura ou sinal de fluxo - e eu adquirir em algo como 400 amostras sec e, em seguida, usar uma média de amostra única. E o processo é bastante lento como meu código principal é executado em não mais de 20 Hz. Então, quando eu faço uma média de 5 amostra maving, minha primeira amostra chega 5 x 50ms mais tarde, então para cada 50ms eu obter uma amostra válida. Basicamente, estou mais preocupado com as tendências e não valores spot. Nisso, há pouca preocupação com amostras perdidas ou valores desonestos. Claro que eu não ousaria usar isso para uma função Step. Isso seria cruel. Raghunathan LV2017 para automatizar equipamentos de teste hidráulico. Mensagem 4 de 15 (1,023 Visualizações) Re: Simple Moving Average VI 03-30-2017 11:58 PM Há ptbypt média que faz o mesmo. Você pode inspecionar o código se você quiser. Uma grande falha no seu código é o fato de que você constantemente crescer e encolher uma matriz existente. Você deve tentar encontrar uma solução que funciona no local em uma matriz de tamanho fixo. Maio exemplos foram postados no fórum ao longo dos anos (olha 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 está localizado. Você também está prepending o novo elemento para o início de uma matriz existente, que é sempre muito mais caro do que acrescentando ao final. O tamanho da amostra não pode ser alterado assim que o VI estiver em execução. Seu registro de deslocamento deve ser inicializado com uma matriz vazia, 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 ptbypt). Seu VI nunca pode ser interrompido, apenas abortado. Boas dicas de otimização. O ponto em inicializar com Zero me faltou. E sim o usuário não deve alterar o tamanho da amostra, uma vez que ele começa a correr. Finalmente vou fazer um SubVI e lidar com coisas como parar, etc .. Quanto ao ponto de prepending do que acrescentando o novo valor para matriz, talvez haja uma pena de desempenho, mas dado o tamanho da minha matriz estou certo de que a CPU não se preocupa anwyay . Mas para mim tem que ser desta forma como eu uso os dados finais para traçar uma tendência de um parâmetro físico. Obrigado pelo seu tempo. Raghunathan LV2017 para automatizar equipamentos de teste hidráulico. Obrigado por sensibilizar sobre os pontos mais finos do método de média móvel. Este afterall é 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 eu acho que é perfeitamente adequado para o meu tipo de registro de dados do dof - é uma pressão ou temperatura ou sinal de fluxo - e eu adquirir em algo como 400 amostras sec e, em seguida, usar uma média de amostra única. E o processo é bastante lento como meu código principal é executado em não mais de 20 Hz. Então, quando eu faço uma média de 5 amostra maving, minha primeira amostra chega 5 x 50ms mais tarde, então para cada 50ms eu obter 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. Heres a idéia (que trabalha muito melhor com um ProdutorConsumer Design) - Digamos que você está amostragem em 400Hz, quer salvar os dados em 400 Hz (ou seja, salvar todos os dados para o 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 (observe que você pode coletar N canais ao mesmo tempo, dando-lhe uma matriz 2D de amostras. Como você obter os dados (a 20 Hz) a partir da AD (tornando-se o produtor) , Enqueue-lo para o consumidor. O consumidor começa escrevendo os dados para o disco (não deve demorar muito tempo.) Agora você tem uma matriz 2D - em um Loop, em um canal por canal, a média dos 20 pontos. Note que este esquema (a) usa todos os dados, (b) lida com dados multicanais com aplomo (e, se você estiver Do Oriente Médio onde eles crescem, você também pode manipular 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 a média para melhorar a relação sinal-ruído visual, tudo sem perder nenhum dado (eu fiz exatamente isso com 24 canais em 1KHz, com Os dados sendo tomados em um sistema remoto e enviados para o PC via TCPIP, por isso também temos o 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 tenho refinado o código de média móvel em um subVI. Em seguida, usei-o para a média de uma simulação 10Channel dados - apenas para manter as coisas simples eu me certifiquei todos os canais tinham dados idênticos. Seria então esperar obter a mesma média móvel para todos os 10 canais. Estou surpreso com a pequena variação i aviso entre canais - geralmente eles estão perto, mas não exata. E apenas para explicar o processo que eu estou tentando eu também tenho enclsoed um XLS. Então, de onde vem a variação. O registro de deslocamento unitialized dentro do Sub VI. Raghunathan LV2017 para automatizar equipamentos de teste hidráulico. Mensagem 9 de 15 (926 Visualizações) Re: Simple Moving Average VI altenbach 04-01-2017 10:25 AM Seu código ainda não faz sentido. Desde que você está chamando o subVI um escalar por vez, você não está recebendo o que você quer porque o registro de deslocamento só rememebers os últimos N scalars, não importa de qual canal é. Seu código ainda é muito ineficiente e complicado. (Por exemplo, por que você ainda está usando inserir em matriz para acrescentar (ambos no mani nad no sub). (Você poderia usar um subVI reenetrant e um loop paralelo FOR mais interno, mas que parece demasiado complicado também) Se você quiser 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. A mensagem 10 de 15 (910 Views) média móvel para 10 valores de uma matriz Eu tenho que construir um aplicativo em que eu continuosly Obter um valores armazenados em uma matriz de um tamanho fixo 10. Para cada novo intervalo de tempo, o último valor é excluído e novo valor é adicionado ao array. At um tempo 10 valores são lidos e média é calculada. Uma vez que eu recebo o valor médio. Eu tenho que comparar com o desvio mínimo e máximo da média. Se o valor de cada matriz de um conjunto está dentro do intervalo, então eu tenho que fornecer uma contagem que mostra o número de valores no conjunto de matrizes de 10 mais mostrar a contagem Como um número de valores fora do intervalo Um conjunto é de 10 valores para cada intervalo de tempo t0-t9 - 1 0 valores. T2-t11 - 10 valores .. para todos os conjuntos eu tenho que fornecer indicação se o conjunto é válido ou não. Mensagem 1 de 8 (912 Exibições) Re: média móvel para 10 valores de uma matriz 12-02-2017 16:03 PM Você fez a pesquisa que você deveria fazer antes de fazer sua pergunta Eu digitei em média móvel ea pesquisa Motor encontrou imediatamente 100 tópicos de mensagem, e provavelmente teria encontrado mais se eu tivesse dado tempo. Muitos na primeira página pareciam exatamente o que você está perguntando sobre. Errar é humano, mas para enganar é necessário um computador. O otimista acredita que estamos no melhor de todos os mundos possíveis - o pessimista teme que isso seja verdade. Profanidade é a única linguagem que todos os programadores sabem melhor. Um especialista é alguém que fez todos os erros possíveis. Para aprender algo sobre o LabVIEW sem nenhum custo extra, trabalhe o LabVIEW online tutorial (s): Mensagem 2 de 8 (883 Views) Re: média móvel para 10 valores de uma matriz 12-03-2017 12:53 AM Eu já fiz isso , Mas não parecem obter uma solução adequada. Sinto muito, mas sou novo no labview e trabalho para o projeto acadêmico que eu tenho que enviar dentro de alguns dias a partir de agora. Eu aprecio sua ajuda. E vou tentar encobrir para mim através de muitos outros lugares. Mensagem 3 de 8 (863 vistas) Re: média móvel para 10 valores de uma matriz 12-03-2017 03:50 AM Você quer apenas saber se seu método é válido direito É quando a matriz está cheia (10). Não tinha nada a fazer, então eu mudei seu vi um pouco, removido o for-loop e estrutura de caso. Mensagem 4 de 8 (836 vistas) Re: média móvel para 10 valores de uma matriz 12-03-2017 04:07 AM Obrigado pela sua ajuda. O que eu realmente estou procurando é que, uma vez gt eu recebo os primeiros 10 (no intervalo de tempo t0-t9 e valores como a0-a9) valores na matriz eu deveria começar a processar a média e não até que os 10 arrays foram preenchidos com o Valores. Depois que os primeiros 10 valores estiverem cheios, eu verificarei o desvio para cada valor de matriz de a0-a9, Se no intervalo ele deve indicar sim ou então não. (Isso já tenho). Gt uma vez que este é processado eu deveria tomar o conjunto de dados fom t1-t10, valores como a1-a10. Este será o meu novo conjunto. Novamente eu seguirei o procedimento para o cheque médio .. gt Isto continua continuamente. No vi anterior do meu e no seu posterior, em ambos os casos a média é calculada a partir do primeiro valor em si. Que não é necessário para o meu caso. Ele só deve processar uma vez que todos os 10 valores são inseridos. Mais tarde para todo o jogo deve processar continuamente a média. (Uma vez que para o tempo lateral i sempre terá 10 valores na matriz). Eu tentei procurar por este querry mas não conseguiu encontrar qualquer solução adequada. Eu realmente apreciaria se eu pudesse ser ajudado. Desde já, obrigado. Eu não entendo realmente o seu ponto. Você quer uma média móvel de 10 pontos, isto é o que você já implementou. Mas você não quer média dele até que você tem seus 10 pontos cheios Se isto é o que você quer lá é duas opções. 1. você cria um infront do para-laço dos laços do while que itera 9 vezes seu gerador aleatório, a seguir coneta-o ao registro do deslocamento da disposição. 2. Comece com uma matriz vazia e deixe a média calcular a partir de menos de 10 pontos até que a matriz está cheia, este é anexado. Uncertified LabVIEW Student Erros são para a aprendizagem, thats porque sugestões são sempre bem-vindos

Comments