¿Cómo muestrear audio a la frecuencia de Nyquist con MSP430F5438?

3

Quiero:

  1. Ingrese una pista de audio analógica

  2. Usando el microcontrolador ADC, conviértalo a una salida digital

  3. Luego haga que los microcontroladores / tableros muestren los datos a intervalos seleccionados

  4. Vuelva a muestrear la "Pista de audio muestreada" al doble del contenido de frecuencia más alta

  5. Vuelva a convertirlo en analógico como una reconstrucción perfecta de la pista de audio inicial

Utilizando el análisis de Fourier, determinaré la frecuencia más alta a la que muestrearé la pista.

Suena bastante fácil y directo, pero lo que necesito es programar esto en C y utilizar mi tablero de experimentación / chip MSP430 para probar la pista. Voy a usar Texas Instruments CCS y Octave para mi programación y depuración. Estoy utilizando la MSP430F5438 Experimenter Board .

¿Es C el lenguaje correcto para esto? ¿Puedo obtener ejemplos de cómo muestrear la pista en la frecuencia de Nyquist usando C? ¿Qué código en C le dirá a la junta que utilice el componente ADC? Y cualquier información recomendada que sea similar o que me ayude en este proyecto.

    
pregunta Martin

5 respuestas

4

Puedes hacer todo tu proyecto en una PC de escritorio. De hecho, si tuviera que hacerlo, comenzaría con el escritorio:

  1. un archivo .wav ya se muestra en una frecuencia alta, a menudo 44100 o 48000 Hz.
  2. la determinación de la frecuencia más alta se puede hacer con un FFT. Para la creación de prototipos, enlazaría FFTW .
  3. la reducción de muestras a una frecuencia arbitraria es un poco difícil, ya que la reducción de muestras implica el filtrado de paso bajo. Es necesario configurar un filtro para cada frecuencia. Mire libsamplerate y vea cómo configura una función SINC para que se convierta en contra.
  4. La conversión de nuevo a la frecuencia de muestreo original implicará otro filtro de paso bajo. Ver de nuevo libsamplerate.

Creo que lo implementaría en varios pasos, para facilitar la depuración:

  1. Haz que todo funcione en Matlab o Octave primero. Octave tiene bibliotecas para realizar todo el filtrado y el análisis de Fourier.
  2. Haga que todo funcione en C en la PC, vinculando FFTW y libsamplerate para la reducción de resolución / upampling.
  3. Reescriba el código C con tipos de variable de ancho explícito (por ejemplo, int16_t en lugar de "short") y reemplace FFTW y libsamplerate con código propio para que compile de forma independiente.
  4. En C para el MSP430 o cualquier DSP que tengas, escribe rutinas de interrupción para muestrear datos en el ADC y emitirlos en el DAC. Prueba que esto funciona, solo va de entrada a salida.
  5. Toma el código de trabajo del paso 3 y compílalo para el MSP430 o lo que sea. Luego colóquelo en el código de trabajo del paso 4 para operar con los datos muestreados entre ADC y DAC.

Esto puede parecer muchos pasos, pero es mucho más probable que tenga un resultado funcional que codificándolo heroicamente en una gran aplicación MSP430, y luego tratar de depurarlo en la placa de desarrollo.

    
respondido por el markrages
2

Tendrá que usar la guía familiar y la hoja de datos - encontrado aquí Le indicará cómo configurar el ADC y le dará algunos ejemplos básicos. También TI tiene un código de muestra para la línea de chips MSP430 que incluye los ejemplos de ADC10 y ADC12.

    
respondido por el jsolarski
2

Encontrará las cosas mucho más fáciles si usa un DSP adecuado, yo usaría un dsPIC. Microchip tiene bibliotecas FFT.

    
respondido por el Leon Heller
1

Es posible que desee consultar DSC Starter Kit . Le proporciona todo el software y hardware necesarios para comenzar con la grabación de audio en un microcontrolador. También tiene algunos programas de ejemplo.

DFT es un poco más difícil, pero hay bibliotecas creadas previamente para ello. El problema es encontrar uno gratis y asegurarte de tener suficiente ram para hacer todos los cálculos necesarios.

    
respondido por el Kellenjb
0

Un programa solo puede identificar frecuencias a la mitad de su frecuencia de muestreo. Hay dos formas de lidiar con esto:

  1. sobremuestreo : muestree más del doble de la frecuencia máxima posible (p. ej., 48 kHz > 2x20 kHz), luego comprima los datos pasándolos a baja frecuencia (diezmado) a la frecuencia calculada más alta .

  2. submuestreo : muestree a una frecuencia mínima, luego decida muestrear a una frecuencia más alta en función del nivel de potencia en su bandeja de frecuencia calculada más alta (término FFT). Si está por encima de un cierto umbral, aumente la frecuencia de muestreo del ADC.

La única manera de tener éxito en tiempo real es sobreexplorar , ya que submuestreo tendrá que omitir el remuestreo de las partes que ya tiene muestreado a una frecuencia demasiado baja o solicite que se vuelva a reproducir.

La placa de desarrollo vinculada parece costosa para esta aplicación. ¿Hay más en tu proyecto? Tiene ejemplos de código de muestreo y procesamiento de audio: SLAC227 (busque en FFT.c).

    
respondido por el tyblu

Lea otras preguntas en las etiquetas