
この質問のタイトルはすでに非常に明確だと思います。WAV ファイルを読み取り、パルスを 1、無音を 0 として取得し、その持続時間をマイクロ秒単位で取得したいと考えています。
理由は、カーナビゲーション システムからデモレータ処理された 433Mhz 信号を録音したからです (未知のプロトコルを使用)。WAV は直線にするために増幅 (クリッピング) され、DC オフセットが追加されて完全な PWM 矩形波になります (Audacity で):
CLI アプリケーションをダウンロードしましたが、sox
オプションの多さに圧倒され、どこから始めればよいのかまったくわかりません。もちろん、これを行う方法をオンラインで検索しましたが、何も見つかりません。
3つの質問:
- 私がやりたいことは可能でしょうか?
- どのようなコマンドラインオプションを使用する必要がありますか?
- sox は、Audicity で行ったこと (バッチ ファイルでプロセスを自動化する) を実行できますか?
出力例 (ビット、期間):
0,255
1,100
0,50
1,200
etc.
これらの「テーブル」を使用すると、C/C++ で配列を簡単に作成し、マイクロコントローラと組み合わせて使用して、最終的にリモート コントロールを模倣することができます。
助言がありますか?
答え1
データは CSV のようなテキスト ファイルにあると想定しています。WAV ファイルの読み取りはかなり困難です。その手順を実行するには、WAV から CSV または WAV から TXT へのツールがどこかに見つかるかもしれません。
ちょっとしたプログラミングが含まれますが、数か月のプログラミング コースを受講した人 (つまり子供) なら誰でも簡単にできます :)
データをマイクロ秒単位で取得し、それらのサンプルの MAX() と MIN() を実行する必要があります。VBA や C、Python などで実行するのはそれほど難しくありません。これをより正確に実行するより洗練された方法もありますが、60 秒で書き上げられるものではありません。しきい値以下の MAX()-MIN() は機能するはずです。
前の3つのブリップを気にするなら、次のステップで簡単にフィルタリングできるように、1マイクロ秒程度にするのが望ましい。
前のデータから連続する小さな値(しきい値以下)を数えると、必要な出力が得られます。すでに一部のデータをクリーンアップしているので、このしきい値はおそらくフルスケールの1/2になります。最大値と最小値を数回印刷して、おおよその値を把握します。
また、信号内の各波の正確な周波数 (実際には周期のみ) をほぼ正確に知らせてくれる、シンプルなエッジ検出ルーチンもあります。コーディングが増えるだけです。
答え2
解決につながる質問は次のとおりです。 https://stackoverflow.com/questions/42541588/any-way-i-can-get-sox-to-just-print-the-amplitude-values-from-a-wav-file
構文は次のとおりです。
sox file.wav -t dat file.txt
これは、sox を頻繁に使用する人にとっては、それほど難しいことではないと思います。とにかく、これにより、次のような内容のファイルが生成されます (時間位置 => 振幅)。
; 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
まだ出力に少し手を加える必要があります。先頭に奇妙な指数値がいくつかあり、出力を使用できるようにするには計算する必要があります。私はすでにこれを解析するために PHP で何かを作成しました。
波の情報を入手するのが非常に難しいのは非常に奇妙です。Web 上の波の情報のほとんどは限られており、不完全、古い、または機能していません。