主要内容

OFDM使用软件定义无线电信标接收机

这个示例展示了如何检索信息的WiFi网络5 GHz乐队使用软件定义无线电(SDR)。5 GHz信标的例子扫描通道和MATLAB®内捕捉波形进行分析。例子然后解码OFDM数据包,以确定哪些数据包接入点(AP)灯塔。美联社信标信息包括服务集标识符(SSID)、媒体访问控制(MAC)地址(也称为基本名称,或BSSID),美联社信道带宽,和802.11标准使用的美联社。

介绍

这个例子扫描通过一组在5 GHz无线频道带检测美联社20 MHz子信道上传输的灯塔。

扫描过程包括以下步骤。

  • 设置频段和渠道特别提款权来捕获。

  • 捕捉波形为一组时间为每个指定的通道。

  • 在MATLAB处理波形通过搜索信标帧捕获的波形和从每个成功解码信标帧中提取相关信息。

  • 显示关键信息APs探测到。

这个例子支持这些sdr捕捉金宝app波形5 GHz的乐队。

  • ADALM-Pluto通信工具箱支持方案的模拟设备®ADALM-Pluto收音机金宝app

  • USRP™E310 /通信工具箱支持包的E312 USRP™嵌入式系列广播金宝app

  • AD936x /通信工具箱支持包的FMCOMMS5 Xilinx®Zynq®的收音机金宝app

  • USRP™N200灯/ N210 USRP2 / N320 / N321 / B200 / B210 /×/ X310通信工具箱支持包的USRP™收音机金宝app

另外,如果一个特别提款权不是用于波形捕获,这个例子支持导入一个文件precaptured波形。金宝app

示例设置

在运行示例之前,确保您已经安装了相应的支持包的特别提款权你打算使用和设置硬件。金宝app

ReceiveOnSDR场的rxsim示例接收波形结构决定停播或进口垫的波形文件。

rxsim.ReceiveOnSDR=;

指定文件名的precaptured波形文件名变量。确认垫子文件包含这些变量:capturedWaveforms,渠道,radioSampleRate,乐队

文件名=“capturedBeacons.mat”;

默认情况下,示例过程波形存储在一个垫子文件。如果使用特别提款权执行现场扫描5 GHz的乐队,指定特别提款权名称,广播标识符,无线电采样率,频道号码和其他参数。有效的通道编号为5 GHz乐队在1到200之间。20 MHz然而,有效控制渠道AP 32岁,36岁,40岁,44岁,48岁,52岁,56岁,60岁,64,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165,169,173,177。

如果rxsim.ReceiveOnSDRrxsim。SDRDeviceName =“AD936x”;特别提款权%用于波形信号rxsim。RadioIdentifier =“192.168.3.2”;%值用来确定广播,例如,IP地址,USB接口,或30 ad2d5序列号rxsim。RadioSampleRate =20000000;% 20 e6配置赫兹因为这是传播BW灯塔rxsim。RadioGain =50;rxsim。FrequencyBand = 5;rxsim。ChannelNumbers =(32岁,36岁,40岁,44岁,48岁,52岁,56岁,60岁,64,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165,169,173,177];%默认扫描所有5 GHz信标的渠道rxsim。ReceiveAntenna =1;%配置工作只有一个天线rxsim。CaptureTime =毫秒(100);%值类型的预期持续时间%派生参数rxsim。CenterFrequencies = wlanChannelFrequency (rxsim.ChannelNumbers rxsim.FrequencyBand);rxsim。NumSamplesToCapture =秒(rxsim.CaptureTime) * rxsim.RadioSampleRate;其他的rx =负载(文件名);rxsim。ChannelNumbers = rx.channels;rxsim。RadioSampleRate = rx.radioSampleRate;rxsim。FrequencyBand = rx.band;%派生参数rxsim。NumSamplesToCapture =大小(rx.capturedWaveforms, 1);结束osf = rxsim.RadioSampleRate / 20 e6;

设置可选的信息显示

确定美联社的硬件制造商,选择retrieveVendorInfo盒子。选择retrieveVendorInfo盒子下载组织唯一标识符(是的)CSV文件从IEEE®登记机关网站供应商美联社识别。

retrieveVendorInfo =真正的;

显示额外的数据包信息,如载荷大小,编码速率,和调制成功解码non-HT包,选择displayAdditionalInfo盒子。

displayAdditionalInfo =;

显示捕获的波形的频谱和声谱图,选择displayScope盒子。

displayScope =;

扫描5 GHz渠道

特别提款权初始化对象

这个例子与无线电通信硬件使用对象与所选的电台。

创建一个对象通过调用特别提款权sdrrxcomm.SDRuReceiver。然后,应用参数中设置rxsim结构上面的属性对象。

如果rxsim.ReceiveOnSDR如果(rxsim匹配。SDRDeviceName, (“AD936x”,“FMCOMMS5”,“冥王星”,“E3xx”])sdrReceiver = sdrrx (rxsim.SDRDeviceName,BasebandSampleRate = rxsim.RadioSampleRate,GainSource =“手动”);如果(rxsim匹配。SDRDeviceName, (“AD936x”,“FMCOMMS5”,“E3xx”])%捕捉波形时,跳过FPGA的数据%直接发送到主机sdrReceiver。ShowAdvancedProperties = true;sdrReceiver。BypassUserLogic = true;sdrReceiver。IPAddress = rxsim.RadioIdentifier;其他的sdrReceiver。RadioID = rxsim.RadioIdentifier;结束其他的% USRP特别提款权sdrReceiver = comm.SDRuReceiver (平台= rxsim.SDRDeviceName,EnableBurstMode = true);%确定破裂捕获值%每一帧将有100个符号sdrReceiver。SamplesPerFrame = 4 e-6 * rxsim.RadioSampleRate * 100;sdrReceiver。NumFramesInBurst = rxsim.NumSamplesToCapture / sdrReceiver.SamplesPerFrame;[sdrReceiver。MasterClockRate sdrReceiver。DecimationFactor] =hGetUSRPRateInformation (rxsim.SDRDeviceName rxsim.RadioSampleRate);如果(rxsim匹配。SDRDeviceName, (“B200”,“B210”])变化百分比所需的序列号是USRP B200 / B210sdrReceiver。SerialNum = rxsim.RadioIdentifier;其他的sdrReceiver。IPAddress = rxsim.RadioIdentifier;结束结束sdrReceiver。获得= rxsim.RadioGain;sdrReceiver。OutputDataType =“替身”;sdrReceiver。ChannelMapping = rxsim.ReceiveAntenna;结束

接收机的设计

这个图表显示了扫描选定的概述接收机通道和频带和恢复信标信息。

这些步骤在图上提供进一步的信息。

  1. 特别提款权的中心频率,然后初始化捕获的波形持续时间。

  2. 确定并应用频率和时间修正波形,然后试图恢复传统信号比特(L-SIG)领域。

  3. 检查数据包格式是non-HT。

  4. 从恢复L-SIG提取调制和编码方案(MCS)和PLCP服务数据单元的长度(PSDU)。然后恢复non-HT数据,随后解码MAC协议数据单元(MPDU)。

  5. 使用MAC帧恢复配置,检查non-HT包是一个灯塔。

  6. BSSID恢复SSID,美联社的供应商,信噪比,主要20 MHz频道,当前信道中心频率指数,支持通道宽度、频段,无线AP所使用的标准。金宝app

  7. 检查波形包含另一个包,您可以解码。

开始包捕获和处理

创建一个结构(APs)来存储这些信息对于每个成功解码的灯塔。

  • 名称

  • BSSID

  • 美联社的供应商

  • 信噪比(信噪比)

  • 主要20 MHz通道

  • 当前信道中心频率指数

  • 通道宽度

  • 频带

  • 支持的操作模式金宝app

  • MAC帧配置

  • 波形的灯塔的存在

  • 索引值的non-HT信标包始于捕获的波形

APs =结构(“名称”[],“BSSID”[],“供应商”[],“SNR_dB”[],“Beacon_Channel”[],“Operating_Channel”[],“Channel_Width_MHz”[],“乐队”[],“模式”[],“MAC_Config”wlanMACFrameConfig,“波形”[],“抵消”[]);

初始化一个non-HT配置对象用于处理传入的波形。

生化武器=“CBW20”;cfg = wlanNonHTConfig (ChannelBandwidth =生化武器);印第安纳州= wlanFieldIndices (cfg);indexAP = 1;

开始扫描和解码为指定的渠道。

i = 1:长度(rxsim.ChannelNumbers)流(“<强>扫描通道% d % .1f乐队。< /强> \ n”rxsim.ChannelNumbers(我),rxsim.FrequencyBand);如果rxsim.ReceiveOnSDRsdrReceiver。CenterFrequency = rxsim.CenterFrequencies(我);capturedData = captureWaveform (sdrReceiver rxsim.NumSamplesToCapture);其他的capturedData = rx.capturedWaveforms(:,我);结束%显示光谱和光谱图如果displayScope% #好< * UNRCH >=简介(ViewType =范围“spectrum-and-spectrogram”SampleRate = rxsim.RadioSampleRate,TimeSpanSource =“财产”时间间隔= rxsim.NumSamplesToCapture / rxsim.RadioSampleRate);范围(capturedData);结束%重新取样20 MHz的捕获数据处理灯塔。如果osf ~ = 1 capturedData =重新取样(capturedData 20 e6, rxsim.RadioSampleRate);结束searchOffset = 0;searchOffset <长度(capturedData)% recoverPreamble检测到一个数据包并执行分析non-HT序言。[preambleStatus, res] = recoverPreamble(生化武器,capturedData searchOffset);如果匹配(preambleStatus“没有发现包”)打破;结束%检索同步数据和规模与LSTF权力这样做% recoverPreamble函数。syncData = capturedData (res.PacketOffset + 1:结束)。/√(res.LSTFPower);syncData = frequencyOffset (syncData rxsim.RadioSampleRate / osf, -res.CFOEstimate);%只需要4个OFDM符号LLTF后(LSIG + 3更多的符号)%格式检测fmtDetect = syncData (ind.LSIG (1): (ind.LSIG (2) + 4 e-6 * rxsim.RadioSampleRate / osf * 3));[LSIGBits, failcheck] = wlanLSIGRecover (fmtDetect (1:4e-6 * rxsim.RadioSampleRate / osf * 1),res.ChanEstNonHT res.NoiseEstNonHT,生化武器);如果~ failcheck格式= wlanFormatDetect (fmtDetect、res.ChanEstNonHT res.NoiseEstNonHT,生化武器);如果匹配(格式,“Non-HT”)%提取MCS L-SIG的前3位。率=双(bit2int (LSIGBits (1:3), 3));如果率< = 1 cfg。MCS =率+ 6;其他的cfg。MCS = mod(速度,6);结束%确定从L-SIG PSDU长度。cfg。PSDULength =双(bit2int (LSIGBits(17), 12日0));ind.NonHTData = wlanFieldIndices (cfg,“NonHT-Data”);如果双(ind.NonHTData (2) -ind.NonHTData (1)) >长度(syncData (ind.NonHTData(1):结束))%退出while循环完整的包不是被俘。打破;结束nonHTData = syncData (ind.NonHTData (1): ind.NonHTData (2));bitsData = wlanNonHTDataRecover (nonHTData res.ChanEstNonHT,res.NoiseEstNonHT cfg);[cfgMAC ~, decodeStatus] = wlanMPDUDecode (bitsData cfg,SuppressWarnings = true);%打印附加信息在所有成功的包如果~ decodeStatus & & displayAdditionalInfo payloadSize =地板(长度(bitsData) / 8);[调制,coderate] = getRateInfo (cfg.MCS);流(“有效载荷大小:% d |调制:% s |代码率:% s \ n”,调制payloadSize coderate);流(类型:% s |子类型:% s”、cfgMAC.getType cfgMAC.getSubtype);结束%从信标中提取信息通道。如果~ decodeStatus & &匹配(cfgMAC.FrameType“灯塔”)%用信标信息填充表。如果isempty (cfgMAC.ManagementConfig.SSID) APs (indexAP)。名称=“隐藏”;其他的APs (indexAP)。名称=string(cfgMAC.ManagementConfig.SSID);结束流(“<强> % s信标发现频道% d带% .1f。< /强> \ n”、APs (indexAP) .SSID rxsim.ChannelNumbers(我),rxsim.FrequencyBand);APs (indexAP)。BSSID= string(cfgMAC.Address3);如果retrieveVendorInfo APs (indexAP)。供应商=determineVendor(cfgMAC.Address3);其他的APs (indexAP)。供应商=“跳过”;结束(APs (indexAP)。模式,APs (indexAP)。Channel_Width_MHz operatingChannel] =determineMode (cfgMAC.ManagementConfig.InformationElements);如果isempty (operatingChannel)%默认扫描通道如果操作通道%不能确定。operatingChannel = rxsim.ChannelNumbers(我);结束APs (indexAP)。Beacon_Channel = rxsim.ChannelNumbers(我);APs (indexAP)。Operating_Channel = operatingChannel;APs (indexAP)。SNR_dB = res.LLTFSNR;APs (indexAP)。MAC_Config = cfgMAC;APs (indexAP)。抵消= res.PacketOffset; APs(indexAP).Waveform = capturedData; indexAP = indexAP + 1;结束%转变包搜索抵消while循环的下一次迭代。searchOffset = res.PacketOffset +双(ind.NonHTData (2));其他的%包不是non-HT;改变包搜索10 OFDM符号(最低所抵消%的包长度non-HT) while循环的下一次迭代。searchOffset = res.PacketOffset + 4 e-6 * rxsim.RadioSampleRate / osf * 10;结束其他的% L-SIG复苏失败;改变包搜索10 OFDM符号(最低所抵消%的包长度non-HT) while循环的下一次迭代。searchOffset = res.PacketOffset + 4 e-6 * rxsim.RadioSampleRate / osf * 10;结束结束结束
扫描通道52带5.0。
在乐队5.0 WLAN_5G信标检测52频道。
下载是的。csv从IEEE登记机关…
扫描通道56带5.0。
在乐队5.0 w-inside信标检测56个频道。在乐队5.0 w-mobile信标检测56个频道。在乐队5.0 w-guest信标检测56个频道。
5.0扫描频道157年乐队。
5.0 w-inside信标发现频道157年乐队。5.0 w-mobile信标发现频道157年乐队。5.0 w-guest信标发现频道157年乐队。

转换APs结构表中指定的信息并显示步骤6通过使用本地函数generateBeaconTable

detectedBeaconsInfo = generateBeaconTable (APs、rxsim.FrequencyBand retrieveVendorInfo)
detectedBeaconsInfo =7×9表SSID BSSID供应商信噪比(dB)主要20 MHz通道电流通道中心频率指数通道宽度____________________________ (MHz)乐队模式__________ * * * ________ ______________________ ______________________________________ ___________________ ____ __________“WLAN_5G”“04 d4c451c584”“华硕电脑公司。”34。57 52 50 "160" 5 "802.11ax" "w-inside" "B0B867F6B2D0" "Hewlett Packard Enterprise" 26.24 56 58 "80" 5 "802.11ac" "w-mobile" "B0B867F6B2D1" "Hewlett Packard Enterprise" 26.251 56 58 "80" 5 "802.11ac" "w-guest" "B0B867F6B2D2" "Hewlett Packard Enterprise" 25.843 56 58 "80" 5 "802.11ac" "w-inside" "B0B867F3D9B0" "Hewlett Packard Enterprise" 31.592 157 155 "80" 5 "802.11ac" "w-mobile" "B0B867F3D9B1" "Hewlett Packard Enterprise" 31.971 157 155 "80" 5 "802.11ac" "w-guest" "B0B867F3D9B2" "Hewlett Packard Enterprise" 33.3 157 155 "80" 5 "802.11ac"
如果rxsim.ReceiveOnSDRrelease(sdrReceiver);结束

进一步的探索

  • detectedBeaconsInfo表只显示了APs的关键信息。得到进一步的信息信号,如美联社支持的数据速率,探讨MAC帧的配置金宝appAPs结构。

  • 如果你访问一个可配置的美联社,改变你的AP的通道宽度并重新运行这个例子来证实通道宽度。

本地函数

这些功能帮助处理传入的灯塔。

函数波形= captureWaveform (sdrReceiver numSamplesToCapture)% CAPTUREWAVEFORM返回一个列向量给出一个复杂的值% SDRRECEIVER对象和一个标量NUMSAMPLESTOCAPTURE价值。% comm.SDRuReceiver对象,使用爆炸捕获技术%获得波形如果isa (sdrReceiver“comm.SDRuReceiver”)波形=复杂(0 (numSamplesToCapture, 1));samplesPerFrame = sdrReceiver.SamplesPerFrame;我= 1:sdrReceiver。NumFramesInBurst波形(samplesPerFrame *(张)+ (1:samplesPerFrame)) = sdrReceiver ();结束其他的波形=捕获(sdrReceiver numSamplesToCapture);结束结束函数[调制,coderate] = getRateInfo (mcs)% GETRATEINFO返回字符数组和调制方案%代码的包给一个标量整数代表调制%编码方案开关mcs情况下0% BPSK调制=“BPSK”;coderate =“1/2”;情况下1% BPSK调制=“BPSK”;coderate =“3/4”;情况下2%正交相移编码调制=“正交相移编码”;coderate =“1/2”;情况下3%正交相移编码调制=“正交相移编码”;coderate =“3/4”;情况下4% 16 qam调制=16 qam的;coderate =“1/2”;情况下5% 16 qam调制=16 qam的;coderate =“3/4”;情况下6% 64 qam调制=64 qam;coderate =“2/3”;否则% 64 qam调制=64 qam;coderate =“3/4”;结束结束函数供应商= determineVendor (mac)% DETERMINEVENDOR返回供应商美联社通过提取出的名称%组织唯一标识符(是的)指定的MAC地址。持续的对供应商=字符串(0);试一试如果isempty(是的)如果~ (“oui.csv”,“文件”)disp (“下载是的。csv从IEEE登记机关……”)选项= weboptions (“超时”10);websave (“oui.csv”,“http://standards-oui.ieee.org/oui/oui.csv”、选择);结束是的= readtable (“oui.csv”VariableNamingRule =“保存”);结束%从MAC地址提取是的。是的= mac (1:6);%提取基于对供应商的名字。供应商=字符串(cell2mat(是的。“机构名称”)(匹配(ouis.Assignment是的))));%重新抛出错误的警告。警告(ME.message +而“\跳过determineVendor函数调用,retrieveVendorInfo假。”[]);结束如果isempty(供应商)供应商=“未知”;结束结束函数[模式,bw, operatingChannel] = determineMode (informationElements)% DETERMINEMODE决定美联社所使用的802.11标准。%功能检查HT的存在,VHT,他的能力%的元素和决定美联社所使用的802.11标准。的元素% id定义在IEEE Std 802.11 -2020和IEEE Std 802.11 ax - 2021。elementIDs = cell2mat (informationElements (: 1));id = elementIDs (: 1);如果任何(id = = 255)如果任何(elementIDs (id = = 255, 2) = = 35)%他包格式模式=“802.11斧头”;其他的模式=“未知”;结束vhtElement = informationElements {id = = 192, 2};htElement = informationElements {id = = 61, 2};[bw, operatingChannel] = determineChannelWidth (htElement vhtElement);elseif任何(id = = 191)% VHT数据包格式模式=“802.11交流”;vhtElement = informationElements {id = = 192, 2};htElement = informationElements {id = = 61, 2};[bw, operatingChannel] = determineChannelWidth (htElement vhtElement);elseif任何(id = = 45)% HT数据包格式模式=“802.11 n”;htElement = informationElements {id = = 61, 2};[bw, operatingChannel] = determineChannelWidth (htElement);其他的% Non-HT数据包格式只支持DSSS %排除b金宝app模式=“802.11 a / g / j / p”;bw =“未知”;operatingChannel = [];结束结束函数[bw, operatingChannel] = determineChannelWidth (htElement变长度输入宗量)% DETERMINECHANNELWIDTH返回带宽的通道%灯塔操作信息元素中定义的IEEE Std 802.11 -2020表11-23 %。msbFirst = false;%转换为比特STA通道宽度值在第三位。htOperationInfoBits = int2bit (htElement (2), 5 * 8, msbFirst);operatingChannel = 0;如果输入参数个数= = 2 vhtElement =变长度输入宗量{1};% VHT操作通道宽度字段连续波= vhtElement (1);%信道中心频率段0CCFS0 = vhtElement (2);%信道中心频率段1CCFS1 = vhtElement (3);如果htOperationInfoBits (3) = = 0 bw =“20”;operatingChannel = CCFS0;elseif连续波= = 0% HT操作通道宽度字段是1bw =“40”;operatingChannel = CCFS0;elseifCCFS1 = = 0% HT操作1和通道宽度字段% VHT操作通道宽度字段是1bw =“80”;operatingChannel = CCFS0;elseifabs (CCFS1 - CCFS0) = = 8% HT操作1和通道宽度字段% VHT操作1和通道宽度字段% CCFS1大于0bw =“160”;operatingChannel = CCFS1;其他的% HT操作1和通道宽度字段% VHT操作1和通道宽度字段% CCFS1大于0% | CCFS1——CCFS0 |大于16bw =“80 + 80”;结束结束如果operatingChannel = = 0如果htOperationInfoBits (3) = = 1 bw =“40”;secondaryChannelOffset = bit2int (htOperationInfoBits(1:2), 2,假);如果secondaryChannelOffset = = 1%以上二级频道的主要通道。operatingChannel = htElement (1) + 2;elseifsecondaryChannelOffset = = 3%二级频道下面的主要通道。operatingChannel = htElement (1) - 2;其他的警告(“无法确定操作通道。”)结束其他的bw =“20”;operatingChannel = htElement (1);结束结束结束函数台= generateBeaconTable (APs,乐队,retrieveVendorInfo)% GENERATEBEACONTABLE转换表和访问点结构%清除变量名。台= struct2table (APs,“AsArray”,真正的);资源描述。乐队= repmat(乐队,长度(tbl.SSID), 1);台= renamevars(资源描述,“SNR_dB”,“Beacon_Channel”,“Operating_Channel”,“Channel_Width_MHz”),(“信噪比”(dB),“主要20 MHz频道”,“当前信道中心频率指数”,“通道宽度(MHz)”]);如果retrieveVendorInfo台=(资源(:1:9);其他的台=(资源(:[1:2,9]);结束结束