
Ich denke, der Titel dieser Frage ist schon sehr klar. Ich möchte eine WAV-Datei lesen und Impulse als 1 und Stille als 0 sowie deren Dauer in Mikrosekunden erhalten.
Der Grund ist folgender: Ich habe ein demultiplextes 433-MHz-Signal von einem Autonavigationssystem aufgenommen (mit einem unbekannten Protokoll). Die WAV-Datei wird verstärkt (Clipping), um die Linien zu begradigen, und ein DC-Offset wird hinzugefügt, um eine perfekte PWM-Rechteckwelle daraus zu machen (in Audacity):
Habe die CLI-Anwendung heruntergeladen, sox
bin jedoch von der Menge der Optionen überwältigt und weiß wirklich nicht, wo ich anfangen soll. Suche natürlich online nach einer Lösung, wie das geht, kann jedoch nichts finden.
Drei Fragen:
- Ist das, was ich tun möchte, möglich?
- Welche Befehlszeilenoptionen muss ich verwenden?
- Kann Sox das, was ich mit Audicity gemacht habe (den Prozess in einer Batchdatei automatisieren können)?
Ausgabebeispiel (Bit, Dauer):
0,255
1,100
0,50
1,200
etc.
Mit diesen „Tabellen“ lassen sich problemlos Arrays in C/C++ erstellen und mit einem Mikrocontroller verwenden, um schließlich die Fernbedienung zu simulieren.
Irgendwelche Vorschläge?
Antwort1
Ich gehe davon aus, dass Ihre Daten in einer Textdatei wie CSV vorliegen. Das Lesen einer WAV-Datei ist deutlich schwieriger. Möglicherweise finden Sie für diesen Schritt irgendwo ein Tool zum Konvertieren von WAV in CSV oder WAV in TXT.
Es sind einige kleine Programmierschritte erforderlich, die aber von jedem, der einen mehrmonatigen Programmierkurs absolviert hat (also einem Kind), problemlos durchgeführt werden können :)
Sie müssen die Daten in Mikrosekundenblöcken erfassen und eine MAX()- und eine MIN()-Operation für diese Samples durchführen. Das ist in VBA, C, Python oder so nicht allzu schwer. Es gibt ausgefeiltere Methoden, um dies viel genauer zu machen, aber nichts, was ich in 60 Sekunden aufschreiben könnte. MAX()-MIN() unterhalb eines Schwellenwerts sollte funktionieren
Wenn Sie sich für die 3 Blips davor interessieren, sollten diese vorzugsweise etwa eine Mikrosekunde betragen, um im nächsten Schritt leicht gefiltert werden zu können
Zählen Sie aufeinanderfolgende kleine Werte (unter dem Schwellenwert) vom vorherigen, und Sie erhalten die gewünschte Ausgabe. Da Sie bereits einige der Daten bereinigt haben, sollte dieser Schwellenwert wahrscheinlich 1/2 des vollen Maßstabs betragen. Drucken Sie die MAX- und MIN-Werte ein paar Mal aus, damit Sie ihre ungefähren Werte kennen
Es gibt auch einfache Kantenerkennungsroutinen, die Ihnen ziemlich genau die genaue Frequenz (eigentlich nur die Periode) für jede Welle im Signal nennen können. Nur mehr Codierung.
Antwort2
Hier ist die Frage, die zu einer Lösung führte: https://stackoverflow.com/questions/42541588/wie-kann-ich-sox-dazu-bringen,-einfach-die-amplitudenwerte-aus-einer-wav-datei-ausdrucken
Die Syntax lautet:
sox file.wav -t dat file.txt
Ich nehme an, dass das für jemanden, der Sox häufig verwendet, nicht sehr schwer zu erkennen ist. Jedenfalls erzeugt dies eine Datei mit folgendem Inhalt (Zeitposition => 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
Die Ausgabe muss noch etwas bearbeitet werden, es gibt am Anfang einige seltsame Exponentialwerte und die Ausgabe muss berechnet werden, damit sie nutzbar ist. Ich habe bereits etwas in PHP erstellt, um dies zu analysieren.
Es ist sehr merkwürdig, dass es so schwierig ist, an Welleninformationen zu kommen. Die meisten Informationen im Web sind begrenzt, unvollständig, veraltet oder funktionieren nicht.