Saturday 24 June 2017

Moving Average Filter Vhdl Code


Tenho uma questão relacionada à média contínua do valor de ADCs. A abordagem que usei é a média contínua do exemplo 256 amostras. O valor adcaout (mostrado no código abaixo) que recebo na minha GUI aumenta lentamente. Como exemplo, se eu estou esperando o valor 100mA, minha GUI mostra 4mA, 8mA, 15mA. E, finalmente, depois de 2 minutos, consigo um valor de 100mA estável. Eu quero ver o 100mA diretamente na minha GUI de adcaout em vez de valores de incremento e estabilizar depois de algum tempo. Outra questão é que, eu posso de alguma forma tornar este processo rápido, de modo que eu não tenho que esperar por 3 minutos para receber 100 mA estável de adcaout. O clock clk no design digital abaixo é de 20 MHz. O relógio para receber valores ADC na placa FPGA é de 15 KHz. - o arquivo adc. vhd está abaixo: Seu código é modificado da seguinte forma: A saída final que estou exibindo na minha GUI é slvvalue1 e slvvalue2 Como sobre isso: na reinicialização (ou em qualquer outro momento, se desejar), atribua a Valor de data para todos os elementos em sua matriz de estágio. Isso deve definir instantaneamente sua média para o valor atual: o exemplo abaixo mostra o código completo para uma calculadora média móvel. Minha sugestão é que você estuda até você entender. Em seguida, tente usá-lo no seu projeto. Finalmente, e somente depois de ter um circuito básico funcionando, você pode mudá-lo para satisfazer suas restrições de projeto (largura de dados, número de amostras, intervalo de inteiros, uso de assinado versus inteiro, etc.). Finalmente, se você quiser usar O código acima para manter duas médias separadas para dois sinais distintos, simplesmente instanciar a entidade de média duas vezes: Editar: Como eu entendo dos seus comentários, você pode precisar de uma entrada extra para definir a média instantaneamente para o valor de entrada atual. Nesse caso, você pode usar uma entrada de carga como mostrado abaixo: respondido 26 de novembro 13 às 15: 45. Linha: média contínua usando VHDL Tenho uma pergunta relacionada à programação VHDL. Eu quero calcular a média contínua. O meu código de exemplo é: em todas as bordas positivas do relógio, o valor de quotout-valquot muda. Eu quero tomar continuamente a média de quotout-valquot. Eu quero levar a média de 32 valores de forma contínua. Existe uma maneira pela qual eu posso levar média de 32 valores continuamente até o relógio estar funcionando. Por favor, deixe-me saber como posso fazer isso. Você também pode modificar o código acima. Muito obrigado, 19 de novembro de 2013, 07:01 AM 2 Tenho uma pergunta relacionada à programação VHDL. Eu quero calcular a média contínua. O meu código de exemplo é: em todas as bordas positivas do relógio, o valor de quotout-valquot muda. Eu quero tomar continuamente a média de quotout-valquot. Eu quero levar a média de 32 valores de forma contínua. Existe uma maneira pela qual eu posso levar média de 32 valores continuamente até o relógio estar funcionando. Por favor, deixe-me saber como posso fazer isso. Você também pode modificar o código acima. Muito obrigado, primeiro você não pode corrigir sua sintaxe (não usa o tablão de comando, mas o sublinhado) Para a execução do filtro médio, a maneira mais fácil é a entrada de atraso através de 32 estágios. Subtrair o último estágio da entrada e acumular o resultado. 19 de novembro de 2013, 07:03 AM 3 Data de entrada em setembro de 2012 Posts 41 Poder de representação 1 Re: média contínua usando VHDL Na verdade, usei o sublinhado no meu código original. Não sei por que escrevi-1 aqui. Está fora1 Desculpe pela confusão. Você pode descrever com um exemplo como fazer uma média contínua. 19 de novembro de 2013, 07:22 AM 4 Data de entrada outubro de 2008 Localização London Posts 3,402 Rep Power 1 Re: média contínua usando VHDL Na verdade, usei o sublinhado no meu código original. Não sei por que escrevi-1 aqui. Está fora1 Desculpe pela confusão. Você pode descrever com um exemplo como fazer uma média contínua. Entrada gtgtgt. 32 estágios ----------------- gt subtrair o estágio 32 da entrada de corrente colocar o subtractor no tubo de fim de atraso para subtrair o último estágio da entrada atual, em seguida, levar o resultado da subtração para um acumulador (Adendedor de comentários com um registro). Trunca o montante do acumulador como adequado. 19 de novembro de 2013, 08:08 5 Data de entrada em outubro de 2008 Localização London Posts 3,402 Rep Power 1 Re: média contínua usando VHDL, em seguida, tire o resultado da subtração para um acumulador (recipiente de resposta com um registro). Trunca o montante do acumulador como adequado. Descarte 5 LSBs do resultado do acumulador. As primeiras 31 amostras iniciais não estarão corretas, mas o fluxo será correto. Kaz Apenas como exemplo, estou fazendo média contínua para 4 valores. Você pode verificar se minha abordagem está correta. A soma é o valor médio de saída. O código acima funciona se eu tiver números não assinados. Mas eu quero média do vetor stdlogic. O datain é definido como: datain: in stdlogicvector (11 downto 0) Por favor me ajude a resolver esse problema. Modifique o código acima para que eu possa obter valores médios contínuos para a saída vetorial. 20 de novembro de 2013, 12:09 PM 9 Data de entrada outubro de 2008 Localização London Posts 3,402 Rep Power 1 Re: média contínua usando VHDL kaz Apenas como exemplo, estou fazendo média contínua para 4 valores. Você pode verificar se minha abordagem está correta. A soma é o valor médio de saída. O código acima funciona se eu tiver números não assinados. Mas eu quero média do vetor stdlogic. O datain é definido como: datain: in stdlogicvector (11 downto 0) Por favor me ajude a resolver esse problema. Modifique o código acima para que eu possa obter valores médios contínuos para a saída vetorial. Não vejo como sua abordagem funciona. Se sou eu, vou seguir o diagrama que postei anteriormente. Por exemplo Re: média contínua usando VHDL Sua abordagem não funcionou para mim. Verifiquei o resultado no FPGA, mas não funcionou para mim. Basicamente, estou tentando estabilizar os valores de saída do ADC. É por isso que estou em média os dados recebidos ou dados capturados com o ADC. Outval e outval2 são as saídas ADC de 12 bits. Mostraremos como usei sua abordagem abaixo. Por favor, corrija-me se eu estiver errado: eu mando os valores de adc (corrente e tensão) quotadcaout e adcboutquot após usar a abordagem acima e recebo valores incorretos. Por favor, deixe-me saber onde eu estou fazendo errado. Para o meu projeto, eu preciso reduzir o ruído de uma saída de ADC e implementar um filtro de média móvel simples em VHDL. Embora funcione em simulação (veja a imagem): tem algum comportamento estranho se eu a exibir no chipscope quando o sistema está sendo executado no FPGA (veja a imagem): O código VHDL que uso para a média móvel é o seguinte: I Use a ferramenta Xilinx Vivado 2015.2 rodando no Ubuntu 14.04 x64. Você pode me ajudar a identificar o problema, de modo que os resultados em simulação correspondem aos resultados após a síntese

No comments:

Post a Comment