2012-03-18 53 views
1

我有一些從無線傳輸錄製的WAV文件。它包含關於誰發送了傳輸的信息,我希望能夠閱讀這些信息。 通過發送x hz爲0和y hz爲1(更多大約AFSK在維基百科上)在WAV錄製中讀取通過無線電傳輸的二進制代碼

我的問題是:如何從波形文件中獲取二進制數據?如果有C#的控件會很好,但爲了更好的理解,一些源代碼會更好。

任何想法?

+2

HTTP://awesomegeekblog.blogspot .com/2009/04/file-transfer-over-sound-card.html – 2012-03-18 16:41:45

回答

1

WAV file specification是您從WAV文件讀取的聲音數據的藍圖。用於讀取和操作WAV文件的示例代碼可以參見in this CodeProject article.

要實現色調映射,您可以使用read this article,它描述瞭如何編寫軟件以在兩個聲卡之間傳輸數據。例如,要查明給定頻率在WAV文件的特定片段中存在多少,可以使用傅里葉變換。

像這樣:

double fourier1(double x_in[], double n, int length) { 

    double x_complex[2] = { 0, 0 }; 

    int i; 

    for(i = 0; i < length; i++) 
    { 
     x_complex[0] += x_in[i] * cos(M_PI * 2 * i * n/(double) length); 
     x_complex[1] += x_in[i] * sin(M_PI * 2 * i * n/(double) length); 
    } 

    return sqrt(x_complex[0]*x_complex[0] + x_complex[1]*x_complex[1])/(double) length; 
} 

凡x_in是一系列-1和1之間的數字,n爲修正的頻率:

(length * fre­quency/rate)

+0

感謝CodeProject鏈接,至少我現在可以輕鬆訪問音頻幀。 雖然我需要一些傅里葉變換的幫助。我仍然沒有得到x_in部分。我應該在哪裏放置音頻幀的二進制表示?我如何將我的變速箱正在使用的1200 bauds? – meilon 2012-03-18 20:34:16

+0

FFT不能工作,它不是一個週期性信號。兩個帶通濾波器是必需的。還需要有某種成幀方案來恢復數據時鐘,這可能與串行端口類似。 – 2012-03-18 20:40:41

+0

使用兩個帶通濾波器,您可以測量每個輸出的「電壓電平」。但根據這篇文章,FFT計算完成了同樣的事情。文章中有更多的代碼。 – 2012-03-18 21:13:12