Ir ao conteúdo
  • Cadastre-se

Algoritmos para processamento digital de sinais.


Felipe Electronic

Posts recomendados

Caros Amigos!

Como faço para acessar uma Tabela: com 255 valores via ponteiro em Assembly microcontrolador AVR linha Atemel?

Eu agradeço pela ajuda dos Amigos do Forum!!!

Muito grato:Raimundo

Caros Amigos do Forum!

Eu já tenho esperiencia com microcontrolador PIC em Assembly mas agora eu preciso migrar

para á linha AVR e estou com deficoldade em acessar uma Tabela: com 255 valores em Assembly, como faço isso???

Já vir alguma coisas na net, como por exemplo:

Tabela:

.db 0,2,5,15,25,35,37,47,56,59,61,...................255;

Como Acessar essa tabela no código???

Eu fiz isso com o pic, mas com AVR sou Marinheiro de primeira viágem!!!

Preciso de uma ajuda dos Colegas do Forum!!!

Muito grato:Raimundo

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Boa noite,

Sei muito pouco sobre processamento digital de sinais devido a matemática por trás dos filtros que ainda é muito avançada para mim. Conheço bastante da parte conceitual dos filtros e etc e estou bastante contente com esse tópico e curioso para aprender mais.

Vou começar com uma pergunta que deve ser bastante simples, mas faz algum tempo que venho pensando nela. Sé é possível (através das transformadas) trazer um determinado sinal do domineo do tempo para o domineo da frequência, pode-se então fazer um filtro ideal zerando completamente a amplitude das frequências indesejadas?

Parabéns pelo tópico e vamo que vamo.

Link para o comentário
Compartilhar em outros sites

Vou começar com uma pergunta que deve ser bastante simples, mas faz algum tempo que venho pensando nela. Sé é possível (através das transformadas) trazer um determinado sinal do domineo do tempo para o domineo da frequência, pode-se então fazer um filtro ideal zerando completamente a amplitude das frequências indesejadas?

Hummm não, pelo menos não por enquanto, pois a FFT(unica possivel computacionalmente) é aplicada apenas a uma parcela do sinal (amostras) para poder ser finita e portanto calculavel essa técnica é chamada de "windowing" que consiste em uma determinada porção do sinal "cortar" ele de forma conveniente durante um intervalo e gerar os coeficientes para aplicar a transformada.

Para fazer o que você disse, edu, seria necessário calcular não uma FFT mas a transformada de Fourier no dominio do tempo e de forma continua (usando as integrais de menos e a mais infinito) para aplicar a cada amostra nova e por consequencia no sinal inteiro, o grande problema é que isso ainda não é possível com os MCU e DSP medios que temos por ai...nem mesmo a DFT é calculavel para sinais acima de 60Hz se não me engano.

Para contornar esse problema ja existem os filtros digitais que "emulam" as equações que envolem os filtros de "n" ordem.

Ainda estou meio ausente do CdH o negocio aqui ta tenso, mas vou (ao meno tentar) voltar aos poucos e expandir isso.

E sobre o analisador...ainda não transferi o código do Matlab para o MCU...preciso achar um tempinho...ou alguem que manje de matlab para portar...alguem disponivel?

Abs.

Link para o comentário
Compartilhar em outros sites

E sobre o analisador...ainda não transferi o código do Matlab para o MCU...preciso achar um tempinho...ou alguem que manje de matlab para portar...alguem disponivel?

Abs.

Opa, Matlab na facul foi mato.... nem dá pra fazer nada sem ele.

O negócio é fazer um MCU calcular o seu código do Matlab....

Mas manda ele que dou uma olhada e vejo se consigo mandar ele para algum PIC e postar de novo para o pessoal.

Falou

Link para o comentário
Compartilhar em outros sites

  • 10 meses depois...

Vamos sim,

Estou voltando da minha looonga hibernação em terras distantes, e trago várias novidades...inclusive passei pro papel de pão diversas formas de fazer o analisador...

Estou pensando da mesma forma do Matheus em usar o Matlab para explicar o funcionamento de uma FFT...

E outra...pretendo aos poucos inserir mais o mundo dos 32 bits no forum...uma vez que estão mais baratos e faceis de achar do que soluções 8 bits

Abs a todos os amigos!

Link para o comentário
Compartilhar em outros sites

Hahahahahaha!

Ainda não. Eu acho pelo menos, vou ver o resultado mais tarde.

Enfim, sobre o belíssimo analisador de áudio, julguei necessário não entrar em detalhes chatos sobre a computação de uma FFT... Mas sim a forma de operar corretamente uma API que faz esses cáculos de forma conveniente...

No fim desenvolver uma FFT da muito trabalho e não vale a pena, uma vez que ja existem algoritmos estáveis, e de melhor desempenho e abertos.

Vou começar com exemplos simples usando o Matlab para explicar os fundamentos.

Abs!

Link para o comentário
Compartilhar em outros sites

Opa!!! Seja bem vindo de volta Felipe.

Agora sou eu que estou hibernando! auhauhauhauh

Comecei a trabalhar na Gerdau e não estou tendo tempo pra nada!

Aguardando novidades aqui...

EDIT:

Também acho que devemos nos aventurar no mundo e 32bits. Eu já estou me cansando de brincar com PICs (uso somente para hobby). Tem tantos kits no mercado que me pergunto até que ponto vale a pena ficar montando circuitos para desenvolvimento.

Claro que o aprendizado é bem maior quando se monta, mas querendo variar aqui....

Falou

Link para o comentário
Compartilhar em outros sites

Matheus e Aphawk

Preciso da ajuda de vocês, vamos dar um kickstart nesse projeto do analisador?

Preciso que vocês citem caracteristicas desejaveis do analisador, para que eu possa avaliar os recursos e processador...

Além disso irei começar a explicar os fundamentos de análise de sinais no domínio da frequencia...agora que o mestrado acabou ta mais fácil.

Abs!

Link para o comentário
Compartilhar em outros sites

Opa, vamos lá, Mestre ( agora com todo o direito !!! ) :

Para uso em áudio, tal aparelho deve mostrar as amplitudes relativas das seguintes frequências :

31,25 62,5 125 250 500 1k 2k 4k 8k 16k

Sao 10 frequências no total, e seguem a relação de dobro.

O ideal seria mostrar valores calibrados em decibel, tipo uma variação de 3dB a ser mostrado em displays tipo bargraph, ou como eu fiz usando dois MSGEQ7 com um total de 14 frequências e mostrando em 4 matrizes tipo 8x8 montadas como um quadrado, e com uma área útil de visualização final de 14 colunas por 12 linhas, assim pude usar 12 leds para mostrar os níveis diferentes, ficou bem legal.

Podemos usar como visualização 4 MAX7219 com 4 matrizes 8x8 como fiz acima, e a separação das frequencias bem como o calculo das amplitudes relativas pode ser feito por um Atmega328 a 20 MHz. Se atualizarmos os Max7219 30 vezes por segundo fica muito bom.

Uma outra coisa que podemos fazer é calcular a amplitude do sinal, tipo um VU , creio que isso pode ser feito de maneira indireta através das amostragens do ADC, afinal ela já é o nível instantâneo do sinal de áudio. Como temos duas colunas sobrando da matrix, poderemos usar a última coluna para fazer a indicação da amplitude nela.

Na minha opinião, poderemos fazer o ADC trabalhar a 1,25 MHz e baixar a resolução para 7 bits, ajudaria bastante no sampling rate e sobraria mais tempo para a parte matemática ..

O que que vocês acham ?

Paulo

Link para o comentário
Compartilhar em outros sites

Paulo, seria exagero ao invés de 10 bandas, tivermos algo como 32?

Digo isso pois tenho um projeto aqui todo analógico baseado em filtros passa banda e 1 lm3915. Esse aqui tem 10 bandas também. Mas eu estive pensando em montar um big analisador de áudio para fazer tipo um quadro mesmo. Saca?

Será que o processamento fica comprometido com tantos canais extras como sugeri?

Falou

Link para o comentário
Compartilhar em outros sites

Prezados, então, em vez de usar Leds estava pensando em display Gráfico, visto que estão baratos a comunicaçãoi é SPI (sem shift regs? uhuull!) ou I2C, além de ja possuirem stacks próprias fornecida pelo próprio fabricante.

Paulo, seria exagero ao invés de 10 bandas, tivermos algo como 32?

COncordo com o Matheus, independente se o micro for 8 ou 32bits, usar 32bandas não írá mudar muito em termos de processamento, visto que 32 bandas (o que da uma FFT de 32pontos) pode ser computada facilmente com uma taxa de amostragem de 100KHz tranquilamente esse sampling é oferecido por qualquer ADC genérico.

Uma outra coisa que podemos fazer é calcular a amplitude do sinal, tipo um VU , creio que isso pode ser feito de maneira indireta através das amostragens do ADC, afinal ela já é o nível instantâneo do sinal de áudio. Como temos duas colunas sobrando da matrix, poderemos usar a última coluna para fazer a indicação da amplitude nela.

Fácil, basta tomar a derivada de cada amostra do ADC, tomando uma diferença da amostra corrente da anterior.

Na minha opinião, poderemos fazer o ADC trabalhar a 1,25 MHz e baixar a resolução para 7 bits, ajudaria bastante no sampling rate e sobraria mais tempo para a parte matemática ..

Acho que 1.25MHz é muita coisa, vai dar starvation no software, amenos que o micro tenha um recurso de DMA e o block de memoria vai ter que ser enoooooorme para deixar o processador livre para computar a FFT. Como ja idsse antes, acho que 100 a 300KHz é um bom valor para encher o buffer e em seguida fazer a computação da FFT e depois atualizar a UI (o display / Leds);

O ideal seria mostrar valores calibrados em decibel, tipo uma variação de 3dB a ser mostrado em displays tipo bargraph, ou como eu fiz usando dois MSGEQ7 com um total de 14 frequências e mostrando em 4 matrizes tipo 8x8 montadas como um quadrado, e com uma área útil de visualização final de 14 colunas por 12 linhas, assim pude usar 12 leds para mostrar os níveis diferentes, ficou bem legal.

Sobre o dB eu acho uma ótima ideia, conheço um bom algoritmo para aproximar um valor absoluto para logaritmo, e o resultado fica excelente.

Bem aguardo seus comentários e ja irei preprar uma simulação, agora estou mais livre pois o Mestado meu deixou em paz, abs!

Link para o comentário
Compartilhar em outros sites

Matheus e Felipe,

Excelentes idéias. O meu medo era justamente se mais bandas iria comprometer o processamento, mas o Felipe já disse que muda pouco, então deixo uma sugestão : 32 bandas mono ou 20 bandas stereo. Mas acho que processar duas vezes as 10 bandas, uma para cada canal, consome muito mais processamento do que as 32 bandas mono, pois seriam dois canais ADC a pegar dados e o dobro do processamento. Mesmo com 32 bandas mono, creio que vai comprometer bastante memória Ram naqueles maldito cálculos tipo Butterfly com os buffers.... O que voce acha, Felipe ?

Quanto ao display gráfico, se utilizarmos um com cores bem vivas e uma boa potência luminosa ficaria muito bonito. Mas não sei se isso existe , pelo menos a um custo razoável. E, Felipe, se usarmos os MAX7219 não precisamos de shifts para ficar toda hora refreshando , além de serem muiiito baratos. Dá uma olhadinha no datasheet dele, ele tem memória, tem controle de luminosidade por pwm, e podemos conversar com ele a 10 Mhz serial sem problema, ele se vira com os 64 Leds de cada matriz !

Cálculo da amplitude, ok !

Mostrar em dB, ok !

Sobre a taxa do ADC, se não comprometer a temporização, podem ser essas normais mesmo, creio que o Felipe está pensando em algo interrupt driven na captura. Mas se complicar, cansei de ver gente usando o ADC em torno dos 500 Khz mesmo, e todos disseram que não perceberam problemas de conversão, pois de qualquer maneira usam apenas 9 bits por causa dos ruídos ....

Voltando ao assunto das 10 bandas versus 32 bandas.....

Quanto a memória Ram para os buffers, pode implicar em usar processadores menos comuns, eu pensava em usar um simples Atmega328P a 20 Mhz, mas acho que com 32 canais fica muito difícil, pois ele só tem 2K de Ram . Sei que existe um algoritmo que utiliza apenas a parte Real das amostragens, e isso ajudaria muito em diminuir a memória necessária, mas parece que ele não dá muita precisão.

Felipe, dá uma ideia da RAM que vamos precisar , pois isso define o processador, ok ?

Oba, acho que agora sai mesmo !

Paulo

Link para o comentário
Compartilhar em outros sites

Matheus,

Boa ideia. Pode ser mono mesmo, com 32 bandas, se tiver um hardware bem simples para ser duplicado sem grandes custos. Mas isto seria perfeito usando matrix de Leds com os Max7219, pois tudo fica bem barato. Mesmo usando uma matrix 8x8 bicolor, para termos as linhas superiores em vermelho e as restantes em verde, aumenta pouco o custo.

Também acho que se for usar um display gráfico colorido, teria de ser estéreo, mas imagino que compromete muito o processamento com dois canais sendo sampleados e tratados com 32 frequências cada um, exige muita memória e poder de processamento para termos um bom refresh rate no display.

Vamos ver o que o Felipe acha disto tudo.

Paulo

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...

Grande Mestre Felipe ,

Estou vendendo tempo !!!!!

Faço um preço baratinho prá você !

Essa rotina fft para o analisador de espectro sai antes dos Avrs ficarem tão velhos quanto um Intel 8008 ?????? :D

Um abraço, meu amigo, vê se não some de novo !!!

E ve se pára de ficar arrumando mais Mestrados.... Sugiro voce jogar o diploma fora, enburrecer até ficar analfabeto, e entrar na política, pegar um cargozinho qualquer onde não precisa de nenhuma capacidade acadêmica, tipo deputado, vereador, quem sabe um senador seria melhor ainda, e é só ficar esperando que o dinheiro entra na sua conta..... Assim você vai ter tempo para ficar aqui no Fórum !!! E o melhor de tudo : nem o STF consegue te expulsar da mamat...., digo , do emprego !

Paulo

Link para o comentário
Compartilhar em outros sites

  • 3 meses depois...

Aí povo.... acho que esse tópico anda meio parado......

Resolvi tentar estudar sobre o assunto. Vamos ver se sai alguma coisa produtiva.

Vou tentar fazer uma abordagem diferente sobre o assunto. Vou ver no que vai dar.

Escuto música basicamente pelo computador. Minha intenção seria deixar o PC computar a FFT e enviar o resultado via serial ou USB para algum micro realizar apenas a visualização.

Tá difícil.....

QeJzM2H.png

Link para o comentário
Compartilhar em outros sites

Pois é, Matheus.....

Acho que o Felipe tá estudando de novo.... Vai ser CDF assim lá na Europa !

Eu ví um projeto com AVR que fazia exatamente isso que voce quer, recebia via serial a 115k num PC , fazia a FFT, e devolvia pro AVR fazer o espectro..

Se achar eu posto aqui ok ?

Paulo

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...
  • mês depois...

Ola pessoal!

 

Vi o tópico ,achei muito interessante ,Encontrei  esse integrado por aqui em minha sucata  puxei data sheet me parece ser um analisador de Spectrum para sinais de audio então achei que poderia ser útil projeto .

 

Desculpe a minha intrusão no tópico ainda sou novato em microcontroladores !

 

Veja o data sheet 

 

Abraços a todos e boa sorte !

 

ba3834 (1).pdf

Link para o comentário
Compartilhar em outros sites

@Mrtchnology,

Isso é uma solução igual ao MSGEQ7 , mas que usa bem mais componentes. Este tópico é para soluções por software, utilizando algoritmos tipo DFT , FFT e por aí vai.

Eu fiz um analizador com todas as frequências padrão, de 32 até 16 Khz, usando 4 MSGEQ7 e umas matrizes de Led. Se quiser ver todo o projeto está aqui :

http://forum.clubedohardware.com.br/forums/topic/937085-tutorial-de-projetos-com-avr-design-programa%C3%A7%C3%A3o-em-basic-e-simula%C3%A7%C3%A3o-no-proteus/page-2#entry5672339

O que buscamos é uma solução por software, puramente, sem usar nada alem de um microcontrolador e no máximo um filtro anti-alias.

Paulo

Link para o comentário
Compartilhar em outros sites

@Mrtchnology,

 

Sim, é bem mais simples do que parece ! Mas eu não sei programar em C, só em Basic hehehe, o truque é voce criar caracteres especiais , os LCDS comuns tipo caracter tem uma memória para 8 caracteres definidos por voce, assim você mostra no mesmo caracter uma barra horizontal, ou duas, ou tres ..... até 7 que é o caracter totalmente cheio. 

O complicado é voce achar uma taxa de refresh que permita voce visualizar sem ficar piscando muito o display, e tem de tomar cuidado com a maneira que voce preenche as linhas do display. Eu fiz uma vez e demorei 2 dias mudando código para ficar "apresentável" ....Mas isso voce só vai entender quando olhar o resultado no Lcd....

 

Paulo

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!