2012-03-18 55 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