如何通过单个波形传输二进制

时间:2012-01-06 19:27:27

标签: signal-processing modem

我正在开展的项目带来了一个奇怪的技术挑战。

数字设备需要通过麦克风插孔将数据传输到iPhone。

我需要从微控制器和iPhone端编写接口。

这个特定问题是否有既定的协议?我没有双时钟和数据线的奢侈(ala PS / 2协议https://en.wikipedia.org/wiki/PS/2_connector)。

我知道F2F(https://en.wikipedia.org/wiki/Biphase_mark_code),但这是一个要解码的皇家PITA。

还存在优化带宽的问题(在效率和算法复杂性之间的某种合理平衡)。 iPhone的采样频率为44.1 kHz;从理论上讲,每个样本都可以传输至少一个位,具体取决于它是高还是低(即,哪一侧为零 - 理论上当然每个样本都是16位但是试图真正优化带宽到理论最大值将是......什么是......疯了吗?),实际上我可能需要为每个位使用3个样本长度,以确保所有内容都被接收,并且在两个连续样本之间不会出现一点。

是否有一些我可以解除的开源代码?我想,从数字化的早期开始,软件工程师就一直在解决这个问题。我真的不想在这里重新发明轮子。

3 个答案:

答案 0 :(得分:3)

您的理论数据速率将受到同步开销,各种类型的失真加上信噪比的限制。否则可能接近16 * 44100 bps。

更现实的是,您可能想要搜索一些火腿无线电RTTY或PSK源代码,因为已知这些协议在带有噪声的音频宽度通道上工作。

答案 1 :(得分:2)

根据我对调制解调器的理解和经验,实现效率(如同可靠的数据速率,可接受的BER)和低算法复杂度/成本只不过是一个白日梦。

以下是您在传输数据时将以某种方式面对的一些事情:

  • 频道(例如房间)噪音。它会使信号失真并导致解码错误。用振幅调制编码的信息在这里受影响最大。
  • 多个信号路径。接收器(麦克风)将从房间中的物体拾取信号反射。信号将进一步降低。
  • 更改通信信道/信号路径。如果设备不是固定的和/或其他东西在房间里移动,信号将随着时间的推移而改变其属性,并且将更难以解码(有时,不可能)。
  • 发射器和接收器中使用的振荡器将以稍微不同的速率工作。更重要的是,他们的频率会随着时间的推移而波动。这需要在高数据速率/长数据包的情况下进行额外的同步。
  • 硬件和软件中的扭曲,尤其是非线性,特别是在iPhone方面,严重妨碍了其音频通道上的任何高速数据通信。 iPhone不是设计用作调制解调器,也不必满足调制解调器的所有典型要求。您可能会遇到麦克风是非线性的并且其频率范围非常窄,有时音频样本丢失或出现在空气中,在发送或接收的样本块之间的音频中存在明显的间隙等等。

我个人建议考虑实施极其简单和低速的东西。实现类似于ITU-T建议V.21和V.23中描述的2-FSK调制解调器。使用一个频率发送0和另一个频率发送1。

首先让它在集成到设备之前以不超过1200位/秒的速率工作。让它在软件中完全发挥作用,增加白噪声,当编码器和解码器的采样率略有不同时(提示:你需要一个采样率转换器,但是一些音频编辑器能够重新采样波形文件,你可以这样做用手)。

除非iPhone搞砸了,否则你应该可以在它上面实现一个调制解调器,但这并不是一件容易的事情,我认为你不能在网上找到任何你可以按原样使用的代码,而且几乎是即时的做好工作。

顺便说一下,在dsp.stackexchange.com提出这个问题可能是个好主意。

编辑:请参阅my answer to a different question and code in it。虽然速度不是很快,但是在这里可以使用简单的类似V.23的1200位/秒调制解调器。通过一些调整,可以支持更高的数据速率。 FSK发送器代码非常简单,可以移植到微控制器上。

答案 2 :(得分:1)

AFAIK,类似的方法用于通过使用麦克风解码来自IR接收器的信号的应用。无论如何,如果微控制器站点上有DAC,您可以轻松形成可由此类软件解码的脉冲。您可以查看WinLIRC:http://winlirc.sourceforge.net/audioreciever.html