我是靠谱客的博主 凶狠星月,最近开发中收集的这篇文章主要介绍使用C语言+USRP B210从零开始实现无线通信(1) 基本情况介绍1.实验目的2. 基本设计3. 实验环境4. 项目结构5. 后续章节,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

近期,有同学成功使用taskBus进行AM/FM广播的收发,并提出了问题:有没有可能简单几步就实现数据传输呢?

答案是肯定的。只要能传声音,那一定能传数据。不但如此,如果不考虑带宽、效率,在稳定的实验室环境下,实现起来很简单。本系列文章,我们带大家抛开GNURadio里现成的通信模块(如GSM),从零开始,一句句构造最简无线网络,实现双向数据互通。

这里插播一个题外话。为了taskBus本身的可维护性,实验课程的代码将从taskBus主干代码独立出来,使用仓库 taskbus_course管理。如此考虑,是基于实验课程主要强调的是功能性,在可扩展性、性能方面不做要求。与之相比,taskbus中的模块对通用性有较高的要求,二者侧重点显著不同。

taskbus:https://gitcode.net/coloreaglestdio/taskbus
taskbus_course:https://gitcode.net/coloreaglestdio/taskbus_course

1.实验目的

用两台USRP-B210实验终端,构造端到端的无线数据连接,让实验室的两台计算机不插网线也能PING通。

为达到上述目的,我们需要解决很多技术细节,这些技术细节在课本里往往是学不到的,也是融汇学校所学知识最关键的末端环节,也是实验的真正意义。

2. 基本设计

从头构造一个SDR无线数据通信系统,其实相当于从物理层构造一套协议栈。协议栈是通信系统实现功能而依托的协议的总成。不是只有巨头才能定义协议栈——每个人都可以定义自己的协议栈。SDR给予我们充分的想象空间,让我们逐步解决各个层面的问题,并定义自己的数据规范——也就是协议栈。

2.1 协议栈

设计一个通信系统时,可以从源头逐步考虑问题。由于我们这次构造的是点对点的连接,不存在资源复用(如频率、时间、空间等),相对而言就简单多了。先给我们设计的物理层协议定个名字吧——就叫a1frame了。

协议栈
ICMP/UDP/TCP
IPv4
Ethernet
a1Frame

a1frame协议主要定义了物理层的行为。主要特性:

  1. 通信样式: 室内实验室点对点
  2. 资源分配: 预定频率
  3. 波形样式: 即时猝发(有数据就走一波)

2.1 发射阶段

  1. 以太网(Ethernet)以上的链路层交给计算机操作系统来解决。
  2. 数据获取: 在来源机器上使用PCAP获取链路层数据。
  3. 数据包装: 对数据进行包装,指明长度,规定大小端,并安装一个易于接收检测的头。
  4. 波形生成: 使用纠错编码适当保护数据,并用最简单的脉冲幅度调制(类似ADS-B)把01数据变成电磁波的强度值。
  5. 波形发射: 用USRP B210的突发模式,发送各包数据。

2.2 接收阶段

  1. 数据接收: 接收的数据不一定在最强的最佳位置,引入过采样来提高稳定性。
  2. 头部检测: 确定接收信号的起点。
  3. 长度提取: 长度字段很重要,采用序列扩频提高可靠性,直接进行长度提取,获得包的长度。
  4. 解调纠错: 使用幅度键控进行解调,判决生成二进制数据并纠错。
  5. 数据分发: 还原的二进制以太网数据,用PCAP投放到目的网卡。

上述各个阶段,都有不少技术细节值得玩味,后续几篇专门介绍。

3. 实验环境

实验环境如下图所示:

实验环境

实验环境由两台计算机,2台USRP B210共4个设备组成。

  1. 计算机充当无线网关,运行taskBus环境,驱动USRP B210完成数据收发。频率沿用之前的广播频段,200MHz附近。
  2. 计算机上运行1部 VMWare Player 虚拟机,作为客户。
  3. 虚拟机桥接到物理机的某块网卡上。可建立一个虚拟网卡,或者直接使物理网卡。使用物理网卡要注意网卡的状态应该是连接有网线的(随便找个负载,比如树莓派)。

实验中,从虚拟机A ping 虚拟机B,收到回复说明实验成功。

4. 项目结构

使用TaskBus打开项目,

taskbus
注意设置网卡的抓取条件,只抓取虚拟机的网卡MAC的包:

ether src 00:0C:XX:XX:XX:XX

以免在双向通信时,反复抓包形成回环。

如果一切顺利(实验环境永远是不顺利的),则能够收到回包.

项目主要模块如下图:

结构
两台计算机上的项目除了收发频率互换,其余配置完全一致。

5. 后续章节

后续章节,将介绍各个模块的设计思路和注意的细节。


taskBus项目源码需要Qt环境构造。建议使用Linux环境,在windows下,建议使用msys2 Qt5 x64,结合PothosSDR全家桶进行编译。相关编译技巧参考SDR专栏。

taskBus_course源码相对简单很多,基本的Qt环境都可以编译。

最后

以上就是凶狠星月为你收集整理的使用C语言+USRP B210从零开始实现无线通信(1) 基本情况介绍1.实验目的2. 基本设计3. 实验环境4. 项目结构5. 后续章节的全部内容,希望文章能够帮你解决使用C语言+USRP B210从零开始实现无线通信(1) 基本情况介绍1.实验目的2. 基本设计3. 实验环境4. 项目结构5. 后续章节所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部