这个例子展示了如何使用通用软件无线电外设(USRP®)设备使用SDRu(软件定义无线电USRP®)系统对象™来实现WLAN接收器。该接收机能够恢复802.11 OFDM非ht信标帧[1从商业802.11硬件上通过空气传输。OFDM信标可以从802.11a / g / n /交流接入点传输,并且通常在5 ghz频段中找到。在恢复期间打印到命令行之类的数据包信息。该示例假定接入点在范围内,并在所需信道中发送OFDM信标。
的安装和配置部分文档的USRP®无线电关于配置主机使用SDRu Receiver System对象的详细信息。
此示例需要WLAN工具箱™。
这个例子有以下目标:
在MATLAB®中使用SDRu系统对象接收来自商用WLAN发射器的信号。
演示使用WLAN工具箱和通信工具箱™与真实的信号和无线电硬件演示全包同步和解码。
在本例中,SDRuReceiver System对象接收被空气传输损坏的数据,并输出由WLAN RF前端对象处理的复杂基带信号。这个例子展示了WLAN信号恢复功能在流安排中一起工作以恢复数据包。它还展示了如何使用WLAN工具箱解码恢复的介质访问控制(MAC)层包。
功能runWLANNonHTReceiver使用两个System对象comm.SDRuReceiver和RFFrontEnd实现抓包和同步。捕获后,将使用WLAN Toolbox函数对数据包进行解码。
SDRu接收机
MATLAB使用SDRu接收系统对象与USRP®板通信。参数结构配置。RadioInfo设置硬件参数,如获得
,decimationFactor.
, 和masterclockrate.
.
射频前端
nonHTFrontEnd提供数据包同步和收集功能。这分四个阶段:
数据包检测:数据包必须在任何处理开始之前被检测。这是通过自动关联输入符号来实现的。由于每个802.11 OFDM包的开始包含一个称为L-STF的重复结构,因此当这个包存在时,相关性将出现峰值。然后提取L-STF并用于粗频偏估计。
符号时序:检测到数据包后,将若干将来符号捕获到缓冲区中。该缓冲器与用于定位L-LTF的交叉相关。定位L-LTF首先提供精细的符号定时,识别数据包中所有连续符号的DM符号边界。在捕获整个L-LTF之后,它用于信道估计和细频率偏移估计。
L-SIG解码:在L-LTF之后的第一个OFDM符号是L-SIG域。必须恢复并解码该字段,以确定后续有效负载的调制方式、编码速率和长度。该信息用于在L-SIG完成有效载荷后捕获正确的数据量。
有效载荷解码:所有在L-SIG之后的OFDM符号被缓冲到由L-SIG字段决定的长度。在所有的符号被捕获后,它们被解调并解码为它们的源位。然后计算源位。该评估包括帧检查序列(FCS)验证和头部和正文的提取。如果报文是子类型的灯塔,将打印关于恢复的数据包的摘要信息。
一旦接收到完整的数据包或在处理链中出现任何故障,接收端将返回数据包检测以搜索更多的数据包。在请求的捕获时间期间,将重复此过程。捕获时间与从无线电中提取的数据量有关,而与物理模拟的运行时间无关。
如果isempty(版本('WLAN')错误(请安装WLAN工具箱以运行此示例。);结束
发现连接到您的计算机的收音机。此示例使用使用的第一个USRP®收音机使用findsdru
功能。检查无线电是否可用。根据该类型记录无线电类型并设置配置。
config.radioinfo = getradioinfowlanbeacon();disp(config.radioinfo);
请求用户输入从命令行进行仿真参数。将要求1)以秒为单位,2)绘制状态(开/关),3)从恢复的数据包显示的数据量,4)为MAC地址启用供应商查找,5)感兴趣的乐队和6)您要扫描的频道。如果启用了供应商查找此功能也将下载MAC地址查找表,由IEEE公开提供。
配置。SimInfo = getUserInputWLANBeacon ();
如需查询您所在地区的有效频道号码,请参阅的文档.
%获取频道号回复=输入([“你要扫描的波段是什么?”\ n”,...'1 == 5 GHz频带(默认)\n',...'2 == 2.4 GHz频带\n[1]: '],“年代”);如果isempty(回复)回复=' 1 ';结束如果比较字符串(回答,' 1 ') bandToScan = 5;validChannels = [...' 7-16 (5.035-5.080 GHz)\n'...'34-64(5.170-5.320 GHz)\ n'...' 100-144 (5.550-5.720 GHz)\n'...' 149-165 (5.745-5.825 GHz)\n'...];defaultChannels =“(153 157)”;其他的bandToScan = 2.4;validChannels = [...' 1-13 (2.412-2.472 GHz)\n'...' 14 (2.484 GHz)\n'...];defaultChannels =“[1 - 6]”;结束%获取要扫描的频道回复=输入([“有效的频道号码是:\ n”validChannels...“您想扫描哪个频道?”defaultChannels':'],“年代”);如果isempty(回复)回复= defaultChannels;结束ChannelStOcan = REPAPE(str2num(回复),[],1);%#OK
为了加速接收函数的性能,如果你有有效的MATLAB Coder™许可,生成代码。
runcodegen = false;如果checkCodegenLicense reply = input('你想为接收者生成mex文件吗?y / n [n]:',“年代”);如果isempty(回复)回复=“N”;结束如果strcmpi(回答,“Y”) runCodegen = true;结束结束compileIt = runCodegen;%生成接收方的MEX文件如果compileIt流('为接收器生成MEX文件\n');清除runWLANNonHTReceiver_mexcodegen (“runWLANNonHTReceiver”,“参数”{1 e9 coder.Constant(配置)});结束
根据请求的时间量捕获并尝试解码通道列表上的数据包。该中心频率是该无线电的可调谐参数;因此,无需为整个接收函数重新生成代码就可以更改它。
为Channel = 1:长度(ChannelStocan)%计算频道的中心频率WiFiCenterFrequency = helperWLANChannelFrequency (channelsToScan(频道),bandToScan);%运行接收器流('接收端在信道%d (%1.3f GHz)上运行\n',...channelsToScan(频道),WiFiCenterFrequency / 1 e9);如果runCodegen runWLANNonHTReceiver_mex (WiFiCenterFrequency配置);其他的runWLANNonHTReceiver (WiFiCenterFrequency配置);结束结束%完成运行流(“理想的通道(s)扫描\ n”);
在运行模拟时,一旦捕获到被恢复的数据包,就会对其进行解码。如果他们通过了FCS检查并且他们是该亚型灯塔,信息将打印到命令行。输出示例如下:
SSID: w-guest Packets Decoded: 1 --------------- SSID: w-guest Packets Decoded: 2 --------------- ###处理100毫秒接收的数据…SSID: w-guest Packets Decoded: 3 --------------- SSID: w-guest Packets Decoded: 4 --------------- ###处理200毫秒收到的数据…SSID: w-guest Packets Decoded: 5 --------------- ###处理100毫秒接收的数据…SSID: w-guest Packets Decoded: 6 --------------- ###处理200毫秒收到的数据…所需的通道(s)扫描
不同USRP®子板的增益行为差异很大。因此,本例中定义的增益设置可能不太适合您的子板。如果接收系统不能正确地解码数据包,则可以改变源信号的增益SDRu接收机系统对象,通过更改Config。USRPGain的值接收初始化文件.
所需的收集时间不应超过5秒。为了确保来自USRP®的连续数据,使用突发模式,它内部存储样品在一个单独的缓冲区。此缓冲区的最大大小依赖于操作系统,当收集时间太长时将超过该大小。当使用b系列USRP®设备时,它可以通过运行重置收音机call_uhd_app(“b2xx_fx3_utils”,“- d”)
如果函数runWLANNonHTReceiver
过早地退出。
这个例子使用了下面的脚本和辅助函数:
还使用了以下WLAN工具箱函数:
IEEE Std 802.11-2012 (IEEE Std 802.11-2007修订版). IEEE信息技术标准-系统之间的电信和信息交换局域网-特定要求第11部分:无线局域网介质访问控制(MAC)和物理层(PHY)规范
Universal Software Radio Peripheral®和USRP®是国家仪器公司的商标。