一、下载虚拟机并安装Ubuntu
1. 全屏化界面
usr- share-applications-display(1440*900)
2. 更换下载源为国内高速下载源(符合版本)
usr-share-applications-software and update
etc-apt-source.list(修改其中的内容为阿里源)
二、下载安装UHD和Gnuradio(见选择与努力的CSDN帖子)
他的帖子仅供参考,因为版本不同。
- 这里选择的方案是利用编程之家的方法下载UHD(www.jb51.cc/python/1119…
- 利用选择与努力的方法下载Gnuradio,版本要更换。 (blog.csdn.net/weixin_4111…
1. 选择好版本
- 可选1:Ubuntu18.04 UHD3.10.3 Gnuradio3.7.13.5(某985版本)
- 可选2:Ubuntu16.04 UHD3.14.0.HEAD-0-g6875d061 gnuradio3.7.10.1(网络版本)
- 可选3:原版,见GitHub
2. 安装之前先下载g++(好像无所谓)
3. 安装过程(省略)
4. 安装完毕后配置以太网和USRP在一个子网下
例如USRP的IP为192.168.10.22 以太网IP设置为192.168.10.2 子网掩码 255.255.255.0 网关192.168.10.1然后看是否可以ping通(说明与主机已经正确连接)
5. 设置虚拟机中的网络模式为桥接模式,
- 设置方法: 打开VM-workstation的编辑,选择虚拟网络编辑器,点击更改设置,新建一个网络,然后设置桥接模式,桥接到(选择与你以太网相关的名称),应用,在虚拟机设置中,选择网络适配器中的桥接模式(复制物理网络连接状态勾选上)
- 这里如果设置桥接模式发生错误:VMware无法将网络更改为桥接状态:没有未桥接的主机网络适配器
- 若发生这个错误:检查网络适配器中的Vmnet1和8是否出现感叹号,如果出现说明VMware安装有问题,卸载VM并将注册表修复好(使用cclean修复注册表),然后重新装(装完没有感叹号,且虚拟网络编辑器默认出现VMnet0)。
- 参考链接:blog.csdn.net/m0_60028455…
- blog.csdn.net/2301_762941…
- blog.csdn.net/m0_64148419…
- 若想联网只要切换回原仅主机模式即可(或者NAT模式)或者自定义特定虚拟网络(选择VMnet8(Net模式))。
6. 在Ubuntu中配置一个网络命名为USRP,也设置IP地址在同一个子网掩码下。新建一个有线连接 命名为usrp1 IP设置为192.168.10.2 子网掩码 255.255.255.0 网关192.168.10.1 然后看是否可以ping通(ping 192.168.10.22IP地址)。Ping+USRP的IP地址。如果可以,则说明已经与USRP连接上。
7. 然后输入uhd_find_devices(看看是否能打印出版本信息)
8. 打开Gnuradio(打开一个终端,使用gnuradio-companion命令),选择流图,设置参数。--使用后面Reader库则不用画流图。
三、下载编译运行GEN2-UHF-RFID-Reader库
1. 下载Gen2-uhf-rfid-reader 库,从GitHub上面搜即可。
2. 直接下载后会在下载一栏出现此包,在主目录中新建一个文件夹RFID,将此包提取到新建的文件夹RFID
3. 编译:
1、删除build文件夹下所有文件
2、在bulid文件下执行:
1、cmake ../
2、sudo make install
3)、sudo ldconfig
4. 执行
1、cd apps/
2、sudo GR_SCHEDULER=STS nice -n -20 python2 ./reader.py
四、安装VMware-tools(方便Ubuntu与Windows的数据通信)
见CSDN(blog.csdn.net/xiaopangcam…
进入共享文件夹:进行Windows与Ubuntu的文件传递,切勿或谨慎直接拖拽。以防止电脑性能过低而蓝屏。
五、使用GEN2-UHF-RFID-Reader库
1. 系统功能
系统实现了一个Gen2的UHD RFID阅读器,能够识别商用RFID标签,并提取标签EPC。系统采用matched_filter->Gate->Decoder->Reader形式的数据流,具体实现了gate,Tag decoder,Reader三个GNU Radio blocks,其具体功能如下:
Gate: 检测reader发出的命令,消除原始采样数据中直流分量,并将结果输 出到Decoder模块中进行解码。
Decoder: 进行帧同步检测,解码RN16和EPC,将结果输出到Reader模块中进行统计
Reader: 判断reader所处盘存阶段,生成对应命令或信号,并对基带信号进行PIE编码输出。
每个模块都有相应的输出文件,便于调试。
可能更改的文件夹:
- apps : 用于流图的定义与运行
- grc : blocks.xml文件,用于自定义模块各参数
- Include : C++运行头文件
- lib : 框图实现.cc文件及.h文件
- misc : 输出的数据文件,用于系统调试
2. 可能需要更改的文件
apps/reader.py
- 取消self.source.set_auto_dc_offset(False)的注释
- 取消self.connect(self.source, self.file_sink_source)的注释,生成原信号文件
- 修改self.connect(self.file_sink_reader, self.file_sink_reader)为self.connect(self.reader, self.file_sink_reader)(原作者笔误)
- 取消self.connect((self.tag_decoder,1), self.file_sink_decoder)附近其他文件的注释生成其他文件
include/global_vars.h
lib/.cc文件
3. 代码问题
Q1:尝试编译源代码时发现了这样的问题:“attribute error:‘module’对象没有属性‘gate’” 。
A1:运行一次sudo ldconfig
Q2:如果出现载波不平稳的情况--尝试改变self.ampl 与 self.freq。
Q3:如果想要解码多个标签,更改global_vars.h文件文件里的FIXED_Q。
Q4:当阅读器查询出错,阅读器不会重新启动,会陷入无限循环。可以设置reader_state->gen2_logic_status 为START。
Q5:出现EPC解码准确率不高的情况(理论上最高解码率为85%)。
A1:尝试使用self.ampl和self.tx_gain的不同组合
4. 日志文件的安装和配置教程
5. 一些问题
Q1:该系统能否进行多标签的读取?
当然可以,但由于潜在冲突的存在,我们需要将时隙数进行调整。具体操作为:按照自己的需求更改global_vars.h文件文件里的FIXED_Q遍历。时隙数为2^(FIXED_Q)
Q2:系统读到标签解码EPC仅为两位16进制数,无法区分同型号标签,应该怎么解决?
这是由于系统在解码时,没有对全部EPC进行解码。可以通过修改decoder文件里tag_detection_EPC函数的对应部分,将全部EPC解码并保存。
Q3:从收到的数据里,应该怎么获取信号的相位信息?
我们首先对收到的数据进行分析,下图表示了一个轮回的时域幅值图: