一、实验环境
Ubuntu14.04+UHD3.14.1+gnuradio3.7.9.2
硬件:两台usrp b100(RX/TX),两副天线
二、例程简析
1.例程位置
打开终端输入以下内容打开例程文件夹
nautilus /usr/local/share/gnuradio/examples/digital
打开narrowband文件夹,主要分析benchmark、path、uhd_interface三类代码块
2.各类代码块作用
benchmark文件:相当于使用companion进行图形编程之后生成的my_top_block文件,完成流图的搭建、连接与启动流图。
path文件:完成流图中模块之间的定义与连接,如调制解调模块与放大器之间的链接,类方法与my_top_block的类似。
uhd_interface文件:初始化收发机的工作状态,如工作频率,天线增益等。
3.benchmark文件详解
以benchmark_tx文件为例,分析代码运行逻辑
导入gnuradio库函数,提供底层运行逻辑代码、各种数字/模拟信号处理模块等。导入path文件和uhd_interface文件,并通过标准库OptionParser来实现参数的传递。
用官方的gr.top_block定义并初始化顶层函数,配置文件options由uhd_interface中的发射模块部分导入,并通过代码行键入具体配置,否则为默认配置。最后将功能模块连接完毕。
主函数部分首先定义了发包函数,之后通过OptionParser添加参数的配置,如数据包大小等到实例化对象parser中,将parser中的参数放到options中,最后用path,uhd的方法添加到这两个类中,以便于在顶层模块中实例化两个连接对象。
使用最终配置参数实例化得到信号处理流图 tb 并启动。
此处代码用于生成与发送数据包,可根据自己需求做适当改动。
三、例程使用步骤
1.帮助文档
命令行中进入例程目录后输入以下代码获得帮助说明(以发送端为例):
./benchmark_tx.py –h
-h | 列出帮助说明 |
-m | 选择调制方式,有psk, cpm, qpsk, dqpsk, gfsk,qam, dbpsk, bpsk, gmsk。默认为psk |
-s | 设置发送数据包大小,默认为1500字节 |
--from-file | 使用文件作为数据包内容,后续跟地址 |
--to-file | 导出发送的内容,后续跟地址 |
-f | 设置射频频率 |
-r | 设置比特率 |
-A | 选择发送使用天线(应用于多天线场景) |
2.具体试例
发送一个频率为1GHz的信号:
TX:./benchmark_tx1.py -f 1000M
RX:./benchmark_rx1.py -f 1000M
四、修改例程以发送文件
直接使用--from-file命令只能在接收端命令行接收到文件内容,即一串乱码,可读性差,为了进一步实现文件的传输与本地保存,将例程文件做适当修改。
1.benchmark_tx的修改
该步骤可简化命令行输入,利于调试。
该步骤为后续对数据包打包做预处理,获取发送时间以用于接收端的文件命名,避免接收文件混乱。
此处对读取的文件提取有用内容,并结合帧头,发送时间打包为发送数据包,同时在发送时实时打印发送信息,以供调试用。
2.benchmark_rx的修改
接收端文件只需修改对接收数据包的读取部分代码,按照发送端的数据包定义格式逐句解包并对保存文件命名。
3.具体试例
以发送图片为例
TX:./benchmark_tx1.py -f 1000M -t 111.png
RX:./benchmark_rx1.py -f 1000M