通过 Sound FSK / PSK / DSSS 进行 PC 到 PC 数据通信

信息处理 声音的 调制 声音 fsk
2022-01-06 21:10:05

为了娱乐和工作,我必须实现一个基于 java 的应用程序,它可以将文本或数据编码为声音并使用 PC 的扬声器进行传输,接收端是一个带有解码器软件的麦克风。

我正在考虑使用 FSK(同步或异步或建议)来实现:

文本(数据)---调制---> 10khz-20khz音频载波--->空中传输--->麦克风->解调--->显示文本或数据。

我的主要考虑是:

  • ~200bps 带宽,如果不是更多的话
  • 抗噪能力达到一定水平
  • 最好是 16khz - 20khz 载波和 44.1khz 采样(这个区域的噪音较小,老年人和麦克风听不到,扬声器很便宜,在笔记本电脑中很容易买到)
  • 不太复杂的编码逻辑。

用最少的编码工作,哪种调制效果最好?关于使用 java 实现 FSK/BFSK/PSK 或 DSSS 的库/示例有什么建议吗?

2个回答

由于信道特性,这实际上是一个非常棘手的问题。大多数计算机扬声器的带宽相当有限,具有显着的非线性,并且房间声学通常是时变的。

如果您只需将一根电缆从一台 PC 的耳机输出连接到另一台 PC 的线路输入,生活就会变得轻松许多。

是的,您绝对应该使用 FSK,但它必须是异步的,这就是原因。同步解调 FSK 称为相干解调。相干解调 FSK 需要输入载波锁相(相位同步),这通常使用锁相环 (PLL) 来完成,除非您的信噪比 (SNR) 至少为 10 dB 左右,否则它不能很好地工作。通常音频广播没有这么高的信噪比,所以忘记相干解调。除了在电磁信号的实践中,对于 Pb ≤ 10−4,非相干 FSK 最多只需要比相干 FSK 多 1 dB 的 Eb/No(这意味着为了获得相同的误码概率 Pb,您只需要传输额外的每个位的 dB 功率)。然而,非相干 FSK 解调器相当容易构建,因为不需要生成相干参考信号。因此,在实际系统中,几乎所有 FSK 接收器都使用非相干解调,因为每个人都更喜欢传输额外 dB 的功率,而不是遇到所有同步问题。

回答您的主要考虑:

200bps 带宽(如果不是更多):我使用连续相位正交载波 8fsk 实现了 200bps,将智能手机设置为距离扬声器 1 m。

对噪声有一定程度的弹性:我实现了一个 BCH 纠错码,能够修复每个数据块多达 8 个错误。当添加 25% 到 50% 的冗余时,BCH 码的编码增益最大

最好是 16khz - 20khz 载波和 44.1khz 采样:我建议将采样频率提高到 48 kHz(这在当今智能手机中很常见),并将您的操作带宽限制在 17.5 或 18 到 21.5 kHz 之间。如果您使用 44.1,那么您必须在 17.5 或 18 和 20.5 kHz 之间工作。但是您必须非常小心选择的扬声器和麦克风,因为并非所有扬声器和麦克风都以这种高频率工作。您必须对它们进行频率响应分析。如果您使用的是 PC,我会推荐 ARTA 或 Audacity,或者如果您是程序员 Matlab 或 Octave。如果您使用的是智能手机,我会推荐任何音频频谱分析应用程序

不太复杂的编码逻辑:我会推荐非相干相关正交 fsk 解调器。比任何基于 fft 的实现都要轻得多。特别是如果您距离多普勒和多径对您影响不大的 1 m 以内