
我想這個問題的標題已經很清楚了。我想讀取一個 wav 檔案並獲取脈衝為 1、靜音為 0 及其持續時間(以微秒為單位)。
原因是這樣的,我記錄了來自汽車導航系統的拆卸的 433Mhz 訊號(使用未知協議)。 wav 放大(削波)以拉直線條,並添加 DC 偏移以使其成為完美的 PWM 方波(在 Audacity 中):
已經下載了 cli 應用程序sox
,但是被大量的選項淹沒,真的不知道從哪裡開始。當然,在網路上尋找解決方案如何做到這一點,但找不到任何東西。
三個問題:
- 我想做的事情可能嗎?
- 我需要使用哪些命令列選項?
- 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/2。列印幾次 MAX 和 MIN 值,以便您知道它們的近似值
還有簡單的邊緣偵測例程,它們幾乎可以告訴您訊號中每個波的確切頻率(實際上只是週期)。只是更多的編碼。
答案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
我想對於經常使用襪子的人來說這並不難判斷。無論如何,這會產生一個包含如下內容的檔案(時間位置 => 幅度):
; 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 做了一些東西來解析它。
很奇怪的是,獲取波浪資訊如此之難,網路上的大多數資訊都是有限的。不完整、過時或不起作用。