通过使用GNuradio、麦克风和扬声器,我们提出了一种简单易用的跨超声波频率联网的实现方案。这允许您在音频链路上使用TCP/IP、UDP。
为了学习本教程,我们建议您使用GNuradio的LiveDVD版本(这基本上是一个Ubuntu发行版,已经安装了gnuradio)。这很容易从http://gnuradio.org/redmine/news/31.下载。首先,您需要将我们为GNuradio制作的补丁下载到U盘。您可以从https://github.com/anfractuosity/ultrasonicnetworking/archive/master.zip.下载该修补程序。为了使用补丁,您需要是root用户,所以输入‘sudo bash’,然后解压缩补丁,然后通过键入./setup.sh简单地运行setup.sh。为了支持可变长度的数据包,安装文件只需对GNuradio数据包编码器和解码器打补丁即可。
在运行setup.py之后,您可以初始化GNuradio,您需要以root身份运行它,所以也可以初始化sudo gnuradio-panion。然后在您的第一台笔记本电脑上加载.grc。
图1描绘了我们的图表,它使我们能够执行超声波联网。现在我们将描述图形如何在每个块中运行。左上角的第一个块是TUNTAP PDU,它允许您创建虚拟网络接口,我们可以通过该接口发送和接收数据包。
我们使用“PDU to tag Stream”块将从虚拟NIC接收的数据包转换为数据包编码器要处理的字节流。我们不能直接将标记流的输出附加到GFSK调制器,因为我们需要通过使用CRC添加校验和,还需要在数据包中添加前同步码和报头-这都是通过使用数据包编码器实现的。
前同步码本质上是一系列比特,为了将比特正确地对齐到正确的字节边界,可以在接收端检测到这些比特。分组编码器还在前同步码之后添加报头,该报头以字节为单位说明分组的长度。
GFSK调制器基本上执行频移键控调制。如图2所示,发送‘0’时调制信号的频率低于发送‘1’时的频率。我们发现,在使用笔记本电脑和麦克风的超声波联网环境中,FSK比PSK(相移键控)表现更好,PSK使用相移键控来传递比特,PSK是另一种调制技术。
GFSK块的一个非常重要的方面是采样/符号的数量。我们将其设置为值9。这意味着对于调制器接收的每个符号,都会生成9个样本。此数字越高,信号对噪声的恢复能力越强,但相应地波特率也越低(这实质上意味着发送数据包所需的时间越长)。波特率是指每秒传输的符号数。
然后,我们使用有理重采样器模块,以使信号更具弹性。每输入一个样本,它就会产生320个输出。
我们使用频率转换FIR滤波器来转换输入信号的频率。我们将信号按载波_tx移位,在本例中为-19 kHz。这就是说,信号正好在人的听觉范围之外。
因为我们在这一点上一直在处理复数信号,所以我们需要将复数输出转换为音频卡的浮点输出,我们通过使用“Complex to Real”块来实现这一点。
图形的底部描绘了程序的接收器部分。它本质上执行相同的功能,但情况相反。但是,在“Float to Complex”块之后还有两个额外的块。乘法常量模块允许您将麦克风的输出乘以固定的数字。这之后的模块是带通滤波器,只允许很小范围的频率通过解调器,这有助于消除麦克风输出中的大量噪声。
在图3中,您将看到有两个图表。上图描述了发送到发射机的输出,下图描述了从麦克风接收的输入(在对其应用了带通滤波器之后)。顶部还有一个滑块,允许您将来自麦克风的信号乘以特定值。当使用彼此距离较远的两台笔记本电脑时,此功能非常有用。
图4描述了我们使用的全双工信令。您可以看到,在本例中,我们以两种不同的频率传输,即19 kHz和18 kHz。这使得两台笔记本电脑可以同时发送自己的信号。
在GNuradio-Companion中,您需要转到Build>;Execute,以便执行图形。然后,您需要为它为您创建的Tap0接口分配IP地址。您需要通过终端执行此操作,例如,输入sudo ifconfig ap0 192.168.1.10。
您需要在第二台笔记本电脑B上执行相同的步骤,但这次加载b.grc并使用sudo ifconfig tap0 192.168.1.20。
我们发现最好手动为每台笔记本电脑分配ARP条目。为了分配ARP条目,在膝上型计算机A上,ARP-s 192.168.1.20<;膝上型计算机B的MAC地址为Tap0&>-i Tap0。
您已在两台笔记本电脑上初始化的安装脚本将修补文件复制到GNuradio,并修改TCP选项,以便允许TCP/IP在非常滞后的网络中工作。
第一行是必需的,以便使客户端TCP连接在关闭之前保持打开的时间超过默认的20秒。
为了测试网络是否正常工作,我们建议使用Netcat。要测试TCP/IP连通性,请在笔记本电脑A上使用netcat-vv-l 10000,并使用netcat-vv 192.168.1.10 10000从笔记本电脑B连接到它。因为我们使用的是详细选项,所以当与笔记本电脑A建立连接时,Netcat会通知您,然后您可以从任一笔记本电脑向另一台笔记本电脑发送文本。
由于GNuradio提供的分组编码器和解码器只处理固定数量的数据,因此需要对其进行修改以支持流标签的读取。“PDU到标记流”用它们的大小标记来自TAP接口的数据包。数据包编码器/解码器无法正常处理这些标签,因此我们更改了数据包编码器,以读取这些标签,并从TAP0帧生成适当大小的数据包。然后,分组解码器将分组解封,并用其大小标记结果数据。
为了让您了解所涉及的延迟,请单击下图,其中显示了Wireshark屏幕截图,其中显示了TCP/IP连接的服务器端。你会看到它很慢!
如果有人对GNuradio补丁有任何改进建议,我将不胜感激(补丁本身很快就完成了)。
下面的视频来自我之前做的一次实验,目的是简单地测试我们是否可以以23 kHz的频率发送数据。
Minimodem看起来是一个很棒的程序,但据我所知,它只支持FSK。我热衷于尝试不同的调制方案,GNuradio提供了许多不同的调制方案;我最初尝试使用PSK进行设置。
这也为我介绍了一些用于软件定义无线电的技术是如何工作的。