Ruby 中的 AFSK 编码和解码

AFSK Encoding and Decoding in Ruby

我想编写一个 'Audio Frequency Shift Keying' (AFSK) 编码器和解码器,可用于使用 radio/sound 波传输和接收数据。

Bell 202 是我尝试使用的 AFSK 标准,它将二进制数据编码为两种音调 1200hz 和 2200hz。这两个音代表二进制中的1和0。

我正在尝试在 ruby 中使用 win32 声音来生成这些音调,它确实如此。问题是在一种音调之间切换并移动到另一种音调大约需要 1 秒才能完成,这对于铃 202 能够运行的 1200 波特速度来说太慢了。

我的问题是:有没有其他方法可以更快地创建这些音调并在它们之间切换?另外,当我在这里时,是否有一个 gem 可以让我将这些音调解码回二进制数据?

前段时间我尝试在Ruby中写一个AFSK modulator/demodulator。我得到了一个可以写入和读取 WAV 文件的工作原型,但与实时性能相去甚远(如果我没记错的话,我将其优化了大约 8 倍实时)。

一些小技巧:

  • Ruby + 音频非常糟糕,你可能找不到很多解调的 Gems
  • 对我来说,只有纯 C 解决方案(带有一个小的 Objective-C 包装器,因此我可以在 iPhone 应用程序中使用它)可以提供必要的性能提升
  • 通过使用连续相位 FSK (CPFSK) 消除编码信号中的不连续性,有助于 lot 提高信号质量
  • 我使用了一个相干解调器,然后是一个运行良好的状态机https://www.kth.se/polopoly_fs/1.141538!/Menu/general/column-content/attachment/lec9.pdf