USRP识别射频标签配置详解(非常全面)

375 阅读5分钟

一、下载虚拟机并安装Ubuntu

1. 全屏化界面

usr- share-applications-display(1440*900)

2. 更换下载源为国内高速下载源(符合版本)

usr-share-applications-software and update

etc-apt-source.list(修改其中的内容为阿里源)

二、下载安装UHD和Gnuradio(见选择与努力的CSDN帖子)

他的帖子仅供参考,因为版本不同。

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库则不用画流图。

IMG_20230324_224544.jpg

三、下载编译运行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. 日志文件的安装和配置教程

blog.csdn.net/weixin_3934…

blog.csdn.net/xiaerbi6140…

5. 一些问题

Q1:该系统能否进行多标签的读取?

当然可以,但由于潜在冲突的存在,我们需要将时隙数进行调整。具体操作为:按照自己的需求更改global_vars.h文件文件里的FIXED_Q遍历。时隙数为2^(FIXED_Q)

Q2:系统读到标签解码EPC仅为两位16进制数,无法区分同型号标签,应该怎么解决?

这是由于系统在解码时,没有对全部EPC进行解码。可以通过修改decoder文件里tag_detection_EPC函数的对应部分,将全部EPC解码并保存。

Q3:从收到的数据里,应该怎么获取信号的相位信息?

我们首先对收到的数据进行分析,下图表示了一个轮回的时域幅值图: