Sox: lee wav y obtiene el pulso como 1 y el silencio como 0 y su duración en microsegundos

Sox: lee wav y obtiene el pulso como 1 y el silencio como 0 y su duración en microsegundos

El título de esta pregunta ya es muy claro, pregunto. Quiero leer un archivo wav y obtener pulsos como 1 y silencio como 0 y su duración en microsegundos.

La razón es esta: registré una señal demolida de 433 MHz de un sistema de navegación para automóvil (usando un protocolo desconocido). La onda se amplifica (recorta) para enderezar las líneas y se agrega un desplazamiento de CC para convertirla en una onda cuadrada PWM perfecta (en Audacity):

ingrese la descripción de la imagen aquí

He descargado la aplicación cli, soxpero estoy abrumado por la cantidad de opciones, realmente no sé por dónde empezar. Por supuesto, busco una solución en línea sobre cómo hacer esto, pero no puedo encontrar nada.

Tres preguntas:

  • ¿Es posible lo que quiero hacer?
  • ¿Qué opciones de línea de comandos necesito usar?
  • ¿Puede sox hacer lo que hice con Audicity (poder automatizar el proceso en un archivo por lotes)?

Ejemplo de salida (bit, duración):

0,255
1,100
0,50
1,200
etc.

Estas 'tablas' se pueden usar fácilmente para crear matrices en C/C++, para usarlas con un microcontrolador y finalmente imitar el control remoto.

¿Alguna sugerencia?

Respuesta1

Supongo que sus datos están en algún tipo de archivo de texto como CSV... Leer un archivo WAV es un poco más difícil. Es posible que encuentres una herramienta de WAV a CSV o WAV a TXT en algún lugar para ese paso.

Se trata de algo de programación pequeña, fácil de hacer para cualquiera que haya realizado algunos meses de un curso de programación (es decir, un niño) :)

Debe tomar los datos en fragmentos de microsegundos y hacer un MAX() y un MIN() de esas muestras. No es demasiado difícil de hacer en VBA, C o Python o algo así. Hay formas más sofisticadas de hacer esto con mucha más precisión, pero nada que pueda escribir en 60 segundos. MAX()-MIN() por debajo de un umbral debería funcionar

Si le importan los 3 puntos anteriores, preferiblemente serían de alrededor de un microsegundo para que se puedan filtrar fácilmente en el siguiente paso.

Cuente valores pequeños consecutivos (por debajo del umbral) del anterior y eso le dará el resultado que desea. Dado que ya limpió algunos de los datos, este umbral probablemente debería ser la mitad de la escala total. Imprima los valores MAX y MIN varias veces para conocer sus valores aproximados.

También existen rutinas simples de detección de bordes que pueden indicarle la frecuencia exacta (en realidad, solo el período) de cada onda en la señal. Solo más codificación.

Respuesta2

Aquí está la pregunta que conduce a una solución: https://stackoverflow.com/questions/42541588/any-way-i-can-get-sox-to-just-print-the-amplitude-values-from-a-wav-file

La sintaxis es:

sox file.wav -t dat file.txt

Supongo que esto no es muy difícil de decir para alguien que usa medias con frecuencia. De todos modos, esto produce un archivo con contenido como este (posición de tiempo => amplitud):

; Sample Rate 44100
; Channels 1
               0    0.99996948242 
  2.2675737e-005    0.99987792969 
  4.5351474e-005    0.99996948242 
  6.8027211e-005    0.99981689453 
  9.0702948e-005    0.99996948242 
   0.00011337868    0.99993896484 
   0.00013605442    0.99996948242 
   0.00015873016    0.99996948242 
    0.0001814059    0.99996948242 
   0.00020408163    0.99996948242 
   0.00022675737    0.99996948242 
   0.00024943311    0.99996948242 
   0.00027210884    0.99990844727 
   0.00029478458    0.99996948242 
   0.00031746032    0.99981689453 
   0.00034013605    0.99996948242 
   0.00036281179    0.99984741211 
   0.00038548753    0.99996948242 
   0.00040816327    0.99993896484 
......
......
   1.0236961  -0.0077819824219 
   1.0237188  -0.0081176757813 
   1.0237415  -0.0078735351563 
   1.0237642  -0.0079650878906 

Aún así, la salida necesita algo de trabajo, hay algunos valores exponenciales extraños al principio y es necesario calcular la salida para que sea utilizable. Ya hice algo en PHP para analizar esto.

Es muy extraño que sea tan difícil conseguir información sobre las olas, la mayoría en la web es limitada. incompleto, desactualizado o que no funciona.

información relacionada