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 registradores de deslocamento. O registrador de deslocamento superior é inicializado com um elemento e depois adiciona continuamente o valor anterior com o novo valor. 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 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 ele 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 Share. Média não média de uma janela de dados em uma Time. Problem Estou tentando a média subconjuntos de 100 pontos de cada vez de um sinal de entrada contínua The O problema é que a média será a média dos primeiros 100 pontos 0 99 e, em seguida, os 100 pontos subsequentes 1 100 reutilizando 99 dos mesmos valores Ao invés de uma janela média móvel, eu gostaria de implementar a média de bloco dos dados, ou seja, eu Como dividir os dados em pedaços e registrar a média de cada pedaço de dados. Solução A funcionalidade padrão da média não dá a média de cada pedaço de dados Em vez disso, conforme descrito na declaração do problema, para um determinado tamanho de janela n , A média de médias pontos 0 a n-1, em seguida, pontos 1 a n, em seguida, pontos 2 a n 1, assim ee assim por diante Para realizar a média de bloco, você deve escrever algum código de solução Você deve executar um cálculo de módulo na iteração Contagem do laço para determinar quando a média e quando passar os dados sem média Calculando a contagem de iteração i mod n, Quando i 0, o final da janela foi atingido ea média média é correta Então, armazenar esse valor em Um array ou indicador No próximo ite Ração o valor da modificação será igual a 1, o que irá redefinir a média e prepará-lo para o próximo subconjunto de n pontos O truque é perceber que as médias obtidas pela média do bloco são um subconjunto da média da janela móvel realizada por Mean. In alguns Casos que você pode querer todos os dados para atualizar no painel frontal enquanto registrando as médias como descrito na instrução de problema acima Você pode executar esta função de forma semelhante, ou seja, executando uma operação de módulo na contagem de iteração e escolhendo um caso Em uma estrutura de caso com base nisto Consulte o exemplo de comunidade em Links relacionados para obter mais informações sobre como fazer isso e código de exemplo que analisa e converte dados dinâmicos e executa as funções acima mencionadas. Seu código ainda não faz sentido SInce que você está chamando o SubVI um escalar de cada vez, você não está recebendo o que você quer porque o registro de deslocamento só rememebers os últimos scalars N, não importa o canal é de seu código ainda é muito ineffi Cient e convoluted por exemplo, por que você ainda está usando inserir em matriz para acrescentar tanto no mani nad no sub Você poderia usar um subVI reenetrant e um paralelo loop FOR mais interno, mas que parece muito complicado too. If você quer fazer uma média de execução Em cada canal, o subVI precisa manter uma matriz 2D no subVI Tudo isso foi feito before. I pode compreender a sua frustração - mais ainda quando o contexto de codificação LV é diferente em ambas as nossas vidas Para mim como um engenheiro mecânico é um Adicionar e que começou como um passe de tempo Portanto, o código pode não ser o mais eficiente ou que extrai a última gota de suco da CPU Na verdade, em aplicações de controle de máquina toda a CPU faz nada mais vezes do que executar o Código de controle E com processadores como i5 ou i7, torna ainda mais fácil Eu não estou dizendo código eficiente é um desperdício de tempo - estou apenas dizendo que o contexto é diferente. Apenas antes de eu vento aqui é outro rápido e sujo um Que faz o trabalho desde que o fi Rst poucos valores são ignorados - não é um grande negócio em um aplicativo de registro de dados que é executado por horas no final. Raghunathan LV2012 para automatizar testes hidráulicos rigs. I lamento que você tem uma baixa consideração pela elegância e correção, e que você sente que o bem O suficiente é bom o suficiente Talvez, no futuro, você vai consultar alguém que conhece e compreende LabVIEW e simplesmente dizer-lhe o que você quer fazer e deixá-los fazer isso por você. No entanto, se o seu objetivo é coletar dados de N Canais a freqüência F em Hz, mas para exibir a média de pontos M para que para cada M pontos que você gerar você plotar 1 ponto, a média dos pontos M, aqui é uma boa maneira de fazê-lo. Criar um Produtor Loop que gera os dados Configurando seu Dispositivo de Amostragem para lhe dar M Pontos de N Canais, amostrados com freqüência F Isso deve ser um array 2D M linhas de N colunas Coloque isso em uma Fila e repita, repetidamente, até que o botão Parar seja empurrado. O Producer Loop, envie um mais vazio 2D array você verá porquê em Um momento. Criar um loop de consumo paralelo e alimentá-lo a fila usada pelo Loop Produtor Dequeue a matriz de dados - se estiver vazio, estamos prontos, então liberar a fila e parar o Consumer Loop. Otherwise, precisamos consumir média E plotar os dados Nós precisamos transpor a matriz M pontos por N canais para um canal N por M pontos matriz Alimente esta matriz para um loop For que irá loop sobre os canais, calcular a Média o M pontos, e saída esta Média Nós Quer plotar este único ponto de todos os canais N, então passe-o através de Build Array para fazer um 1 por N Array, e plot this. Here é um trecho em LabVIEW 2012 que permite simular tudo isso gera pontos no Freqüência que você especificar, 1KHz máximo Eu também escala o gráfico para que o tempo é em segundos Isso didn t traduzir bem para o Snippet - Eu realmente usei um nó de propriedade de dados Averaged there. This, eu acho, faz o que eu entendo que você realmente queria, Nomeadamente para ter um ecrã que mostra a média a uma taxa de trama mais lenta do que t Você notará que cada canal tem um deslocamento diferente, então quando você olha para o enredo, você deve ver 16 linhas, olhando mais e mais suave como você aumentar o tamanho da amostra Você precisa especificar os parâmetros antes de executar o código, Uma vez que os princípios de Fluxo de Dados em que LabVIEW é baseado irá ignorar as alterações que você faz para os controles uma vez que o programa está sendo executado. Primeiro deixe-me agradecer a resposta detalhada eo snippet de código eu apprecaite sua intenção de help. My resposta anterior possivelmente soou Um pouco bruto, mas eu vou ser a última pessoa a palm off algo que é meio cozido ou instável Deixe-me explicar. Minha linha de óleo hidráulico de atividade e tenho minha própria empresa estabelecida em 1995 e como uma proposta de adição de valor i fornecer sistemas integrados com Instrumenation e software Nós operamos em dois principais vertcials - WInd Turbinas e Sistemas de Teste E até à data temos fornecido muitos sistemas completos que são amplamente utilizados na indústria automotiva aqui na Índia, bem como em E Urope. Mas a minha empresa não é uma organização enorme e é um tamanho médio e aqui há uma captura - é quase impossível encontrar programadores LabVIEW especialista Índia tem uma enorme piscina de engenheiros de software, mas todos estão em computação de desktop eo De engenheiros em Computação Física é quase nulo ou negligenciável SO quando os clientes vêm a mim com novos requisitos confiar em mim - todos são diferentes eu assumir o desafio pessoalmente, mas para entregar i depender inteiramente de apoio da comunidade on-line Todate eu tenho desenvolvido com sucesso LV Código para obter dados via CanOpen, Modbus RTU, Profinet e EtherCAT Com tal variedade e curto prazo para o mercado exige que eu simplesmente não têm os recursos para implantar uma equipe enorme para entregar Então, se resume a desenvolver código básico ou óbvio que faz o que é Deveria e se o cliente está OK com ele - deixá-lo lá É uma diferença entre código funcional e código inteligente e eu estava insinuando o anterior e não desenvolver criptografia codificação para o seu código de exemplo - t Seu modelo de consumidor de produtor é um regular que eu uso para todos os meus projetos onde eu tenho Main como o produtor eo Sub VIs como o consumidor Com o fluxo de dados através da fila vai estudá-lo mais em detail. Raghunathan LV2012 para automatizar plataformas de teste hidráulico.
Comments
Post a Comment