G'day todos!
Tengo un Arduino Duemilanove dando vueltas por el momento y pensé que podría intentar algunos proyectos de interfaz de audio. Me pregunto qué tipo de frecuencia de muestreo puedo lograr usando una sola entrada analógica y aplicando algunos algoritmos simples en el chip, luego informando usando unas pocas salidas digitales conectadas a los LED.
Me gustaría probar a ~ 44.1 kHz si es posible.
Como referencia, lo primero que quiero probar es un simple sintonizador de guitarra.
Respuestas:
No creo que puedas probar tan rápido a resolución completa. El ATMega168 solo puede muestrear a 15 ksps en su resolución completa.
Dicho esto, debe poder obtener una frecuencia de muestreo adecuada para obtener un afinador de guitarra que funcione. Lo más probable es que 44,1 kHz sea un poco más rápido de lo que necesitarás, dado que el fundamental de la cuerda E alta de una guitarra es de alrededor de 330 Hz.
fuente
http://arduino.cc/en/Reference/AnalogRead
Robar.
fuente
Google para el "sintonizador de guitarra AVR", hay un par de proyectos que ya lo hacen, y parecen ser capaces de hacerlo sin demasiados problemas con la velocidad del AVR.
fuente
Si utiliza un comparador analógico (ya sea interno en el AVR o externo) que convierte la entrada analógica en una onda cuadrada, puede muestrear oscilaciones a velocidades mucho más altas. Si bien esto no es un verdadero muestreo de audio, para construir un afinador de guitarra a menudo es todo lo que necesita, ya que todo lo que haría su código sería contar cero cruces por unidad de tiempo.
fuente
Hay varios ADC disponibles que son seriales, I2S es el estándar de NXP basado en I2C. Le permiten extraer analógicamente con bastante facilidad incluso a velocidades mucho más altas. Este enlace debería llevarlo a una parte de NXP diseñada para audio: UDA1361TS
Las muestras gratis son tu amigo :)
fuente
Primero, para su aplicación particular, realmente solo necesita una frecuencia de muestreo de aproximadamente 1 kHz, suponiendo que esté sintonizando la frecuencia fundamental y no uno de los parciales inarmónicos ...
De todos modos, en cuanto a la tasa de muestreo máxima posible, el manual de Arduino dice:
Esto implicaría que la frecuencia de muestreo de 10 kHz es la máxima. Sin embargo. Puede obtener tasas de muestreo más altas accediendo directamente a los registros de ADC . La página Arduino Realtime Audio Processing utiliza dos canales a 15 kHz, por ejemplo. Entonces, el máximo de 10 kHz es solo mientras se usa la función incorporada AnalogRead (), porque tiene mucha sobrecarga.
El ADC está optimizado para un mejor funcionamiento con una velocidad de reloj de entre 50 kHz y 200 kHz:
Dado que una conversión ADC toma 13 ciclos de reloj, esta sería una frecuencia de muestreo de 4 kHz a 15 kHz. De acuerdo con AVR120: Caracterización y calibración del ADC en un AVR :
Frecuencia de reloj de 1 MHz = frecuencia de muestreo de 77 kHz, así que ese es el máximo realista.
El hilo del foro ¿Lectura analógica más rápida? tiene más información sobre esto
fuente
El convertidor en chip funcionará para esta aplicación como otros han señalado, pero realmente debería considerar el uso de un ADC externo. Esto le ahorrará muchos problemas y liberará a su micro para muestrear a través de SPI o I2C a velocidades de datos mucho mayores, con menos ruido del reloj del micro y con mayor precisión que con el ADC interno. Si desea más resolución y / o una velocidad de datos más alta, utilice algo como el LTC1867, que le permitirá muestrear hasta 175 kHz (aunque puede cronometrarlo con la rapidez que desee) y luego lea los datos de 24 bits a hasta 20MHz sobre SPI. ¿Ves lo que un verdadero ADC puede hacer? :) Con ese tipo de potencia (y un DSP de 24 o 32 bits), puede comprimir y almacenar su audio, filtrarlo, modularlo, reproducirlo ... las posibilidades son infinitas.
fuente
¿Está interesado en una frecuencia de muestreo de 64K? Echa un vistazo aquí
Ahora elevado a 150 kHz, 10 bits, ¡sin componentes adicionales!
Echa un vistazo allí
fuente