Sox: Leia wav e obtenha pulso como 1 e silêncio como 0 e sua duração em microssegundos

Sox: Leia wav e obtenha pulso como 1 e silêncio como 0 e sua duração em microssegundos

O título desta pergunta já está muito claro, eu questiono. Quero ler um arquivo wav e obter pulsos como 1 e silêncio como 0 e sua duração em microssegundos.

A razão é esta: gravei um sinal demolido de 433 MHz de um sistema de navegação automotiva (usando um protocolo desconhecido). O wav é amplificado (recorte) para endireitar as linhas e um deslocamento DC é adicionado para torná-lo uma onda quadrada PWM perfeita (no Audacity):

insira a descrição da imagem aqui

Baixei o aplicativo CLI, soxporém estou sobrecarregado com a quantidade de opções, não sei por onde começar, na verdade. É claro que estou procurando uma solução on-line sobre como fazer isso, mas não consigo encontrar nada.

Três perguntas:

  • É possível o que eu quero fazer?
  • Quais opções de linha de comando preciso usar?
  • O sox pode fazer o que fiz com o Audicity (para poder automatizar o processo em um arquivo em lote)?

Exemplo de saída (bit, duração):

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

Essas 'tabelas' podem ser facilmente usadas para criar arrays em C/C++, para usar com um microcontrolador para finalmente imitar o controle remoto.

Alguma sugestão?

Responder1

Presumo que seus dados estejam em algum tipo de arquivo de texto como um CSV.... Ler um arquivo WAV é um pouco mais difícil. Você pode encontrar uma ferramenta WAV para CSV ou WAV para TXT em algum lugar para essa etapa.

Está envolvida alguma pequena programação, fácil de fazer por qualquer pessoa que tenha feito alguns meses de curso de programação (ou seja, criança) :)

Você precisa capturar os dados em pedaços de microssegundos e fazer um MAX() e um MIN() dessas amostras. Não é muito difícil de fazer em VBA, C ou Python ou algo assim. Existem maneiras mais sofisticadas de fazer isso com muito mais precisão, mas nada que eu possa escrever em 60 segundos. MAX()-MIN() abaixo de um limite deve funcionar

Se você se preocupa com os 3 sinais anteriores, eles seriam preferencialmente em torno de um microssegundo para serem facilmente filtráveis ​​na próxima etapa

Conte pequenos valores consecutivos (abaixo do limite) do anterior e isso fornecerá a saída desejada. Como você já limpou alguns dados, esse limite provavelmente deve ser 1/2 da escala total. Imprima os valores MAX e MIN algumas vezes para saber seus valores aproximados

Existem também rotinas simples de detecção de bordas que podem informar a frequência exata (na verdade, apenas o período) de cada onda no sinal. Apenas mais codificação.

Responder2

Aqui está a pergunta que leva a uma solução: https://stackoverflow.com/questions/42541588/any-way-i-can-get-sox-to-just-print-the-amplitude-values-from-a-wav-file

A sintaxe é:

sox file.wav -t dat file.txt

Suponho que isso não seja muito difícil de dizer para alguém que usa Sox com frequência. De qualquer forma, isso produz um arquivo com conteúdo como este (posição temporal => amplitude):

; 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 

Ainda assim, a saída precisa de algum trabalho, existem alguns valores exponenciais estranhos no início e a saída precisa ser calculada para ser utilizável. Já fiz algo em PHP para analisar isso.

É muito estranho que seja tão difícil obter informações sobre ondas, pois a maioria na web é limitada. incompleto, desatualizado ou não funcionando.

informação relacionada