我们通过利用GNURADIO和麦克风和扬声器,展示了一种易于使用超声波频率的网络的实现。这允许您在音频链路上使用TCP / IP,UDP。
为了遵循本教程,我们建议您使用Gnuradio的Livevvd发布(基本上是Ubuntu分发,已经安装了Gnuradio)。这可以从http://gnuradio.org/redmine/news/31轻松下载。首先,您将需要下载我们向Gnuradio的补丁,到USB棒。您可以从https://github.com/anfractuenction/ultrasonicnetworking/archive/master.zip下载补丁。为了使用补丁,您需要是root,所以键入'sudo bash',然后解压缩修补程序,并通过键入来键入./setup.sh。设置文件只是修补Gnuradio数据包编码器和解码器,以支持可变长度数据包。
运行setup.py后,您可以初始化Gnuradio,您需要以root身份运行,因此sudo gnuradio-companion。然后在第一笔记本电脑上加载A.GRC。
图1描绘了我们的图形,使我们能够执行超声网络。我们现在将描述图表如何通过每个块函数。左上角的第一个块,是Tuntap PDU,这允许您创建虚拟网络接口,我们可以通过它发送和接收数据包。
我们使用“PDU标记为标记的Stream”块将从虚拟NIC接收的数据包转换为要处理的数据包编码器的字节流。我们无法直接将标记流的输出附加到GFSK调制器,因为我们需要通过使用CRC添加校验和,我们需要在数据包中添加序言和标题 - 这一切都通过了使用数据包编码器。
前导码基本上是一系列比特,可以在接收器结束时检测到,以便将位校正位于正确的字节边界。数据包编码器,还在前导码之后添加标题,该标题表示数据包以字节为单位多长时间。
GFSK调制器基本上执行频移键控调制。如图2所示,当发送'0'时,调制信号的频率较低,而被发送'0',而不是发送'0'。我们发现,在使用笔记本电脑和麦克风的超声网络的背景下,FSK比PSK更好(相移键控 - 使用相位变化,传送位),这是另一种调制技术。
GFSK块的一个非常重要的方面是样本/符号的数量。我们将其设置为值9.这意味着对于调制器接收的每个符号,生成9个样本。该数量越高,信号对噪声越苛刻,而且因此,波特率越低(基本上意味着发送数据包所需的时间越长)。波特率是指每秒传输的符号数。
然后我们使用Rational ReveLamer块,使信号进一步弹性。对于每个样本,它会产生320次。
我们使用频率翻译的FIR滤波器,转换输入信号的频率。我们通过-carrier_tx转换信号,在此示例中为-19khz。这是使信号在人类听力范围之外。
正如我们在这一点上使用复杂信号的那样,我们需要将复数输出转换为音频卡的浮点输出,我们通过使用“复杂到真实”块来实现这一目标。
图的底部,描绘了程序的接收器部分。它基本上执行相同的功能,但反向。然而,“浮动到复杂”块之后存在两个附加块。乘法Const块允许您将麦克风的输出乘以固定数量。该块之后是一个带通滤波器,仅允许一小范围频率传递到解调器,这有助于去除从麦克风的输出中存在的大量噪声。
在图3中,您将看到有两个图表。顶部图描绘了发送到发射机的输出,底图描绘了从麦克风接收的输入(在带通滤波器上的平均值之后)。顶部还存在一个滑块,允许您通过特定值将信号乘以从麦克风。当使用2台距离彼此的距离更远的笔记本电脑时,这很有用。
图4描绘了我们使用的全双工信号。您可以看到我们在此示例中在两个不同的频率,19khz和18khz中传输。这允许两个笔记本电脑同时发送自己的信号。
在Gnuradio-Companion中,您需要去构建和gt;执行,以执行图形。然后,您需要为您为您创建的Tap0接口分配IP地址。例如,您需要通过终端执行此操作,例如键入sudo ifconfig tap0 192.168.1.10。
您需要在第二笔记本电脑B上执行相同的步骤,而是此时加载B.GRC,并使用sudo ifconfig tap0 192.168.1.20。
我们发现最好将ARP条目手动分配给每个笔记本电脑。为了在笔记本电脑A中分配ARP条目A,ARP -S 192.168.1.20<笔记本电脑B的TAP0&GT的MAC地址; -i tap0.
您在两个笔记本电脑上初始化的设置脚本将修补的文件复制到Gnuradio,以及修改TCP选项,以允许TCP / IP在非常滞后的网络上工作。
在关闭之前,必须使客户端TCP连接能够保持超过20秒的默认值,以便保持开放时间。
为了测试网络正常运行,我们建议使用NetCat。要测试OUT TCP / IP连接,请在笔记本电脑A上使用NetCat -VV -L 10000,并使用NetCat -VV 192.168.1.10 10000从笔记本电脑B连接到它。由于我们使用的冗长选项,Netcat将在连接时通知您已经建立了笔记本电脑A,然后可以将文本从任何一个笔记本电脑发送到另一个。
由于Gnuradio提供的数据包编码器和解码器仅使用固定量的数据,因此必须修改它们以支持读取流标签。将“PDU标记为Stream”标记与其大小的TAP接口的数据包。数据包编码器/解码器无法正常处理这些标签,因此我们更改了数据包编码器,以读取这些标记,并从TAP0帧生成相应的大小分组。然后,数据包解码器,然后urencapsing数据包,并标记其大小的结果数据。
为了让您了解所涉及的延迟,请点击下面的图像,这向您展示了Wireshark屏幕截图,显示了TCP / IP连接的服务器端。 你会看到它很慢! 如果有人对改进GNuradio补丁的建议,我最欣赏(修补程序本身就业很快)。 以下视频来自上一个实验,我确实只测试了我们是否可以在23khz发送数据。 Minimodem看起来像一个伟大的计划,但就我意识到它只支持FSK。 我热衷于尝试不同的调制方案,这是Gnuradio提供的许多; 我最初尝试使用psk设置。 此外,我还为我介绍了一些用于软件定义无线电工作的技术。