Obtenga información de audio del micrófono y reproduzca en MATLAB

0

Estoy tratando de hacer una implementación básica de VoIP y estoy atascado al obtener muestras de sonido del micrófono y reproducir los datos de lectura en una computadora. Intenté probar la voz del micrófono y enviarla al terminal serial con un código mínimo:

void setup() {
    Serial.begin(9600);
}

void loop() {
    int sensorValue = analogRead(A0);
    Serial.println(sensorValue);
    delayMicroseconds(122);
}

El delayMicroseconds(122) hace que la frecuencia de muestreo sea de alrededor de 8192 Hz. También probé con una frecuencia de muestreo de 1000 Hz. El gráfico de datos obtenido se ve bien, sin embargo, cuando intento jugarlo con el comando MATLAB

sound(csvread('samples.csv'), 8192);

Realmente no escucho lo que debería ser (solo escucho ruido aleatorio). Adjunto un gráfico de los datos obtenidos y mi circuito de micrófono. (También intenté restar el promedio de la matriz para que los valores se centren alrededor de cero, pero sin uso).

Datos obtenidos:

Circuitodemicrófono:

    
pregunta U. Muneeb

1 respuesta

1

Input:

Su señal parece que no tiene mucho rango dinámico. Es posible que desee ver cómo amplificarlo antes de que alcance el ADC del arduino.

Los Arduinos basados en AVR tienen un ADC de 10 bits: de 0 a 1024.  A 5 voltios Vref que es

\ $ \ frac {5volts} {1024 cuentas} = 4.9 \ frac {mVolt} {count} \ $

Su señal varía de ~ 150 a ~ 225. Esto es 75 cuentas de rango o 7% de la resolución del ADC. Su señal de entrada varía aproximadamente 366mV pico a pico.

Debe variar en aproximadamente 2.5v pico a pico.

Output:

La documentación de Matlab sobre archivos de audio indica el siguiente:

  

Las funciones de sonido y sonido de MATLAB solo admiten valores de precisión simple o doble entre -1 y 1.

Tu código arduino está imprimiendo valores del 0-1024. Enteros Deberá normalizarlos y eliminar el sesgo de CC: haga que la señal tenga un promedio de 0 y un rango de [-1 1].

input = double(csvread('samples.csv')); input = input - 512; % convert the [0 to 1024] range to [-512 to 512] input = input ./ 512; % convert the [-512 to 512] range to [-1 to 1] sound(input, 8192);

    
respondido por el kd5pev

Lea otras preguntas en las etiquetas