Taxa máxima de amostragem do Arduino Duemilanove?

11

Bom dia!

Eu tenho um Arduino Duemilanove disponível no momento e achei que poderia tentar alguns projetos de interface de áudio. Estou apenas imaginando que tipo de frequência de amostragem posso obter usando uma única entrada analógica e aplicando alguns algoritmos simples no chip, depois relatando usando algumas saídas digitais ligadas a LEDs.

Eu gostaria de experimentar a ~ 44,1 kHz, se possível.

Para referência, a primeira coisa que quero tentar é um simples afinador de violão.

Esboçado Fletchy
fonte
Ops - é a versão do ATMega168.
Fletchy esboçado
4
@ Sketchy, você pode editar sua pergunta, se precisar, em vez de adicionar detalhes em um comentário.
Clint Lawrence
1
Para afinadores de violão, há várias perguntas sobre o stackoverflow sobre estimativa de frequência. stackoverflow.com/questions/65268/... Eu respondi um monte deles e publicou um código de exemplo para alguns métodos aqui: gist.github.com/255291
endolith

Respostas:

15

Eu não acho que você pode provar tão rápido em resolução máxima. O ATMega168 pode apenas amostrar a 15 ksps em sua resolução total.

Dito isto, você deve conseguir uma taxa de amostragem adequada para obter um afinador de violão em funcionamento. 44,1 kHz é provavelmente um pouco mais rápido do que você precisará, dado que o fundamental da corda E alta de uma guitarra é de cerca de 330 Hz.

Clint Lawrence
fonte
Brilhante - isso responde minha pergunta com facilidade. Eu não achava que o 168 seria capaz de amostragem completa do espectro de áudio humano, mas se eu conseguir uma taxa de amostragem de pelo menos 660 Hz, conseguiria identificar a corda alta e sem alias. Eu vou aumentar isso um pouco por segurança e sensibilidade. Obrigado!
Sketchy Fletchy
O sistema telefônico é amostrado em 8000 Hz.
21710
8

Demora cerca de 100 us (0,0001 s) para ler uma entrada analógica; portanto, a taxa máxima de leitura é de cerca de 10.000 vezes por segundo.

http://arduino.cc/en/Reference/AnalogRead

Roubar.

robzy
fonte
4

Google para 'afinador de violão AVR', existem alguns projetos por aí que já fazem isso, e eles parecem capazes de fazê-lo sem muitos problemas com a velocidade do AVR.

davr
fonte
3

Se você usar um comparador analógico (o interno no AVR ou o opamp externo) que transforma a entrada analógica em uma onda quadrada, poderá experimentar oscilações em velocidades muito mais altas. Embora isso não seja uma amostragem de áudio real, para a construção de um afinador de violão, muitas vezes é tudo o que você precisa, pois todo o seu código faria de qualquer maneira, seria contar zero cruzamentos por unidade de tempo.

todbot
fonte
1
Penso que minha preocupação é que você realmente precise executar uma FFT para entender o fundamental. As guitarras produzem todos os tipos de frequências quando uma corda é tocada, e contar as passagens com zero apenas fornece informações suficientes para construir uma onda quadrada, tornando uma FFT completamente inútil.
Wackyvorlon 30/11/2009
A saída de guitarra de uma nota (especialmente elétrica) é uma aproximação aproximada de uma onda senoidal, quando você ultrapassa o transiente inicial. Não há harmônicos estranhos perto da amplitude do fundamental. Todos os afinadores de guitarra digitais baratos fazem um tempo de cruzamento zero e não fazem nada no domínio da frequência. Aqui está um exemplo da técnica em um AVR 2323 (parente próximo Arduino) myplace.nu/avr/gtuner/index.htm e aqui está outro usando o Arduino com MIDI out youtube.com/watch?v=oGKE1vmAWCA
todbot
Eu não acho que os afinadores de guitarra contam zero cruzamentos, e esse certamente não é um bom método. Não é nem perto de uma onda senoidal, e não pode haver muitos cruzamentos de zero por ciclo: flic.kr/p/7ns9nu
endolith
Os sintonizadores que eu vi tinham um filtro passa-baixo para transformar o sinal de entrada o máximo possível em uma onda senoidal.
precisa saber é o seguinte
3

Existem vários ADCs disponíveis em série, o I2S é o padrão do NXP baseado no I2C. Eles permitem que você puxe com facilidade o analógico, mesmo em velocidades muito mais altas. Este link leva você a uma parte do NXP projetada para áudio: UDA1361TS

Amostras grátis são seu amigo :)

wackyvorlon
fonte
1
Muito obrigado! Vai ser um pouco mais do que eu preciso para ter um sintonizador simples, mas esse chip parece perfeito para alguns dos meus projetos futuros. Eventualmente, gostaria de obter um simples deck DSP em linha para experimentar o processamento de efeitos. Obrigado!
Sketchy Fletchy
1

Primeiro, para sua aplicação específica, você realmente só precisa de uma taxa de amostragem de aproximadamente 1 kHz, supondo que esteja sintonizando a frequência fundamental e não uma das parciais inarmônicas ...

De qualquer forma, quanto à taxa de amostragem máxima possível, o manual do Arduino diz:

Demora cerca de 100 microssegundos (0,0001 s) para ler uma entrada analógica; portanto, a taxa máxima de leitura é de cerca de 10.000 vezes por segundo.

Isso implicaria que a frequência de amostragem de 10 kHz é o máximo. Contudo. Você pode obter taxas de amostragem mais altas acessando os registros ADC diretamente . A página Processamento de áudio em tempo real do Arduino usa dois canais a 15 kHz, por exemplo. Portanto, o máximo de 10 kHz é apenas ao usar a função AnalogRead () integrada, porque possui muita sobrecarga.

O ADC é otimizado para melhor operação com uma velocidade de clock entre 50 kHz e 200 kHz:

Por padrão, o circuito de aproximação sucessivo requer uma freqüência de relógio de entrada [relógio ADC] entre 50 kHz e 200 kHz para obter a resolução máxima.

Como uma conversão ADC leva 13 ciclos de relógio, isso seria uma taxa de amostragem de 4 kHz a 15 kHz. De acordo com o AVR120: Caracterização e calibração do ADC em um AVR :

Para um desempenho ideal, o relógio ADC não deve exceder 200 kHz. No entanto, frequências de até 1 MHz não reduzem significativamente a resolução ADC.

A operação do ADC com frequências maiores que 1 MHz não é caracterizada.

Frequência de clock de 1 MHz = frequência de amostragem de 77 kHz, então esse é o máximo realista.

O tópico do fórum Leia Analógico Mais Rápido? tem mais sobre isso.

endólito
fonte
0

O conversor no chip funcionará para este aplicativo como outros já indicaram, mas você deve realmente usar um ADC externo. Isso poupará muitos problemas e liberará seu micro para amostragem em SPI ou I2C com taxas de dados muito mais altas, com menos ruído do relógio do micro e com maior precisão do que o uso do ADC interno. Se você quiser mais resolução e / ou uma taxa de dados mais alta, use algo como o LTC1867, que permitirá a amostragem em até 175kHz (embora você possa cronometrar da maneira mais rápida que desejar) e depois leia os dados de 24 bits em até 20 MHz por SPI. Veja o que um ADC real pode fazer? :) Com esse tipo de energia (e um DSP de 24 ou 32 bits), você pode compactar e armazenar seu áudio, filtrar, modular, reproduzir e reproduzir ... as possibilidades são infinitas.

Kevin Vermeer
fonte
0

Você está interessado em uma taxa de amostragem de 64K? Dê uma olhada aqui

Agora aumentado para 150 kHz, 10 bits, sem componentes adicionais!

Dê uma olhada

Comunidade
fonte