主要内容

用捕获的数据测试深度神经网络,以检测WLAN路由器模拟

此示例显示如何使用捕获的数据训练射频(RF)指纹卷积神经网络(CNN)。您使用软件定义的无线电(SDR)捕获从真实路由器的无线局域网(WLAN)信标帧。您将第二个SDR编程以传输未知信标帧并捕获它们。您使用这些捕获的信号训练CNN。然后,您将软件定义的无线电(SDR)编程为路由器模拟器,其将信标信号发送与已知路由器之一的媒体访问控制(MAC)地址,并使用CNN将其识别为模拟器。

有关路由器模拟和使用模拟数据验证网络设计的更多信息,请参阅设计一种基于模拟数据的深度神经网络用于无线局域网路由器模拟检测的例子。

用捕获的数据进行培训

从真实的WLAN路由器上收集802.11a/g/n/ac OFDM非高吞吐量(非ht)信标帧数据集。如设计一种基于模拟数据的深度神经网络用于无线局域网路由器模拟检测例如,为了避免任何数据依赖,只使用序言中遗留的长训练字段(L-LTF)字段作为训练单元。

在这个例子中,数据是使用下图中描述的场景收集的。该观测者是一个静止的ADALM-PLUTO无线电。已知路由器数据收集如下:

  1. 根据路由器使用的WLAN通道设置观察者的中心频率

  2. 收到信标框架

  3. 提取L-LTF信号

  4. 解码MAC地址用作标签

  5. 保存L-LTF信号及其标签

  6. 重复步骤2-5进行收集numframesperrouter.框架来自numknnown.路由器。

使用移动adalm-pluto无线电作为变送器模拟未知路由器信标帧。该无线电重复用随机MAC地址发送信标帧。收集未知路由器数据如下所示:

  1. 生成带有随机MAC地址的信标帧

  2. 使用Adalm-Pluto Radio重复开始发送信标帧

  3. 搜集NUMFRAMES信标帧

  4. 提取L-LTF信号

  5. 使用标签“未知”保存L-LTF帧

  6. 将收音机移动到另一个位置

  7. 重复步骤3-6以收集数据NUMLOC地点

该组合的已知和未知路由器数据集用于训练相同的DL模型设计一种基于模拟数据的深度神经网络用于无线局域网路由器模拟检测的例子。

此示例下载培训数据和培训的网络//www.tatmou.com/金宝appsupportfiles/spc/rffingerprinting/rffingerprintcapturedata.tar.gz.如果您没有Internet连接,则可以在连接到Internet的计算机上手动下载文件,并将其另存为当前示例文件。出于隐私原因,MAC地址已在下载的数据中匿名。要复制此示例的结果,请按照描述捕获自己的数据附录:已知和未知路由器数据收集

rffingerpingdownloaddata('捕获'
从以下文件下载数据文件://www.tatmou.com/supportfiles/spc/rffingeri金宝appng/rffageringcaptureddata.tar.gz下载和提取完成文件

要快速运行此示例,请使用下载的预磨损网络。要在计算机上培训网络,请选择“立即列车网络”选项(即设置训练为true)。使用Nvidia(R) Titan Xp GPU培训此网络大约需要5分钟。在CPU上进行训练可能会导致训练持续时间很长。

训练=%#OK <* verch>

此示例使用来自四个已知路由器的数据。数据集包含每个路由器的3600帧,其中90%用作训练帧,10%用作测试帧。

numknnownrouters = 4;numframesperrouter = 3600;numtringframesperrouter = numframesperrouter * 0.9;numtestframesperrouter = numframesperrouter * 0.1;frameLength = 160;

预处理已知和未知的路由器数据

将收集的复数基带数据分开进入其同相和正交组件,并将其重塑成一个2 x frameLength x 1 x numframesperrouter * numknownrouters矩阵。对未知路由器数据重复相同的过程。以下代码使用先前收集和预处理的数据。使用您自己的数据,首先收集数据如下所述附录:已知和未知路由器数据收集.复制命名为rfFingerprintingCapturedDataUser.matrfFingerprintingCapturedUnknownFramesUser.mat到与本例相同的目录。然后更新负载加载这些文件的命令。

如果训练%加载已知的路由器数据加载(“rfFingerprintingCapturedData.mat”%创建标签向量YTrain = Repelem(Macaddresses,NumtringFramesPerrouter);ytest = repelem(macaddresses,numtestframesperrouter);我和q之间的%分开numtrainingsamples = numtringframesperrouter * numknownrouters * frameLength;xtrainingframes = xtrainingframs(1:numtrainingsamples,1);xtrainingframes = [real(xtrainingframes),imag(xtrainingframes)];numtestsamples = numtestframesperrouter * numknownrouters * frameLength;xtestframes = xtestframs(1:numtestsamples,1);xtestframes = [real(xtestframes),imag(xtestframes)];%重塑数据集成一个2 x frame ength x 1 x numTrainingFramesPerRouter*numKnownRouters矩阵xtrainingframes = permute(......REPAPE(XTRINGFRAMES,[FRAMELENG,NUMTRINGFRAMESPRUTER * NUMKNOWNROUTERS,2,1]),......[1 3 4 2]);%重塑数据集到2 x frameLength x 1 x numtestframesperrouter * numknownrouters矩阵xtestframes = permute(......重塑(xTestFrames [frameLength numTestFramesPerRouter * numKnownRouters 2,1)),......[1 3 4 2]);%加载未知路由器数据加载('rffingerprintcapturedundundrame.mat'%培训单位数量numUnknownFrames = size(unknownFrames, 4);将数据分成90%的训练和10%的测试numunknowntrainingframes =楼层(numunknownframes * 0.9);numunknowntest = numunknownframes  -  numunknowntrainingframes;%将adalm-pluto数据添加到训练和测试数据集中XTRINGFRAMES(::,::......= UnknownFrams(:,:,:,1:numunkNowntrainingFrames);XTestFrames(::,::,(1:numunknowntest)+ numtestframesperrouter * numknownrouters)......= UnknownFrams(:,:,:,(1:numunknowntest)+ numunknowntrainingframes);%洗牌数据VR = RANDPERM(numknownrouters * numtringframesperrouter + numunknowntrainingframes);xtrainingframes = xtrainingflams(:,::,VR);%添加“未知”标签和洗牌ytrain = [ytrain,repmat(“未知”,[1,numunknowntringframes])];YTrain =分类(Ytrain(VR));ytest = [ytest,repmat(“未知”(1, numUnknownTest)));欧美=分类(欧美);结束

训练CNN.

使用与模拟数据示例中的训练相同的神经网络架构和训练选项。

poolsize = [2 1];浮体= [2 1];%创建网络架构layers = [imageInputLayer([frameLength 2 1]),'正常化'“没有”“名字”输入层的)卷积2dlayer([7 1],50,'填充',[1 0],“名字”“CNN1”batchnormalizationlayer(“名字”'bn1') leakyReluLayer (“名字”“LeakyReLu1”)maxpooling2dlayer(poolsize,“步”,浮卷,“名字”'maxpool1'[7 2], 50,'填充',[1 0],“名字”“CNN2”batchnormalizationlayer(“名字”'bn2') leakyReluLayer (“名字”“LeakyReLu2”)maxpooling2dlayer(poolsize,“步”,浮卷,“名字”'maxpool2')全连接列(256,“名字”'fc1') leakyReluLayer (“名字”“LeakyReLu3”)DropoutLayer(0.5,“名字”“DropOut1”)全连接列(80,“名字”'fc2') leakyReluLayer (“名字”“LeakyReLu4”)DropoutLayer(0.5,“名字”“DropOut2”)全连接列(numknownrouters + 1,“名字”'fc3') softmaxLayer (“名字”'softmax'scassificationlayer(“名字”“输出”)];

配置培训选项以使用带有迷你批量大小为128的adam优化器。使用测试帧进行验证,因为超参数的优化完成[1]

默认情况下,execultenvironment.被设定为“汽车”,它使用GPU进行训练(如果有的话)。否则,trainNetwork(深度学习工具箱)使用中央处理器进行训练。要显式设置执行环境,请设置execultenvironment.之一'中央处理器''GPU''多gpu', 或者“平行”.选择'中央处理器'可能导致持续时间很长。

如果trainNow miniBatchSize = 128;%培训选择选项=培训选项('亚当'......'maxepochs',30,......“ValidationData”,{xtestframes,ytest},......'验证职业',地板((numtringframesperrouter * numknownrouters + numunknowntraindsframes)/ minibatchsize / 3),......'verbose',错误的,......'L2Regularization', 0.0001,......“InitialLearnRate”, 0.0001,......'minibatchsize',小匹马,......'验证景点',5,......“阴谋”'培训 - 进步'......'洗牌''每个时代');%训练网络CapturedDatanet = TrainNetwork(XtrainingFrames,Ytrain,图层,选项);其他的加载('rffingerprintcapteddatatrownnnmat'“capturedDataNet”“xTestFrames”'ytest''macaddresses'结束

以下绘图显示了网络上的网络运行的培训进度,其中单个NVIDIA Titan XP GPU,网络将大约10个时期收敛到几乎100%的精度。网络的最终准确性为100%。

产生混淆矩阵。

figure yTestPred = classify(capturedDataNet,xTestFrames);cm = confusionchart(yTest, yTestPred); / /输出厘米。Title =“测试数据的混淆矩阵”;厘米。RowSummary ='行标准化'

测试特别提款权

在“Unknown”类上测试训练网络的性能。生成带有已知路由器和一个未知路由器的MAC地址的信标帧。传输这些帧使用一个ADALM-PLUTO无线电和接收使用另一个ADALM-PLUTO无线电。由于这两个无线电之间产生的信道和射频损伤与真实路由器和观察者之间产生的不同,神经网络应该将所有接收到的信号分类为“未知”。如果接收到的MAC地址是已知的,则系统将源声明为一个路由器模拟器。如果接收到的MAC地址是未知的,则系统将该源声明为未知路由器。要执行这个测试,您需要两个ADALM-PLUTO无线电进行传输和接收。此外,您还需要安装通讯工具箱支持包的ADALM-PLUTO无线金宝app电

波形生成

生成由带有不同MAC地址的信标帧组成的传输波形。发射器重复发送这些WLAN帧。接收器捕获WLAN帧并确定它是否是使用由训练的NN检测到的接收的MAC地址和RF指纹的路由器模拟器。

chanbw =“CBW20”%通道带宽OSF = 2;%过采样因子frameLength = 160;样品中的%帧长度%创建信标框架 - 正文配置对象frameBodyConfig = wlanMACManagementConfig;创建信标帧配置对象beaconFrameConfig = wlanMACFrameConfig ('frameType''灯架');beaconFrameConfig。ManagementConfig = frameBodyConfig;%创建插值和抽取对象decimator = dsp.firdecimator(“DecimationFactor”,OSF);%保存已知的MAC地址众所周知的macaddresses = macaddresses;macaddressestosimulate = [macaddresses,“abcdefabcdef”];%使用已知路由器的MAC地址创建WLAN波形和一个%未知的路由器txWaveform = 0 (1540 5);i = 1:长度(macaddressostosimulate)%设置MAC地址beaconframeconfig.address2 = macaddressostosimulate(i);%生成信标帧位[beacon, mpduLength] = wlanMACFrame(beaconFrameConfig,'输出格式'“位”);nonHTcfg = wlanNonHTConfig (......'信道带宽',chanbw,......“MCS”,1,......“psdulength”, mpduLength);txWaveform(:,i) = [wlanWaveformGenerator(beacon, nonHTcfg); / /输出1) 0(20日);结束txWaveform = txWaveform (:);%获得5ghz频段153频道的中心频率fc = helperWLANChannelFrequency(153, 5);fs = wlanSampleRate (nonHTcfg);txSig =重新取样(txWaveform osf 1);突发模式下每帧的%样本spf =长度(txsig)/长度(macaddressostosimulate);runsdrsection = false;如果Helperisplutosdrinstalled()收音机= findplutoradio();如果runSDRSection = true;其他的DISP(“需要两个adalm-pluto无线电。跳过sdr测试。”结束其他的DISP(没有找到模拟设备ADALM-PLUTO无线电通信金宝app工具箱支持包。) disp (“单击MATLAB ToolStrip的”主页“选项卡中的”添加到“以安装支持包。”金宝app) disp (“特别提款权跳过测试”。结束如果runsdrsection.%设置plutosdr发射器devicenamesdr ='pluto';txGain = 0;txSDR = sdrtx (deviceNameSDR);txSDR。RadioID ='USB:0';txSDR。BasebandSampleRate = f * osf;txSDR。CenterFrequency = fc;txSDR。获得= txGain;%设置plutosdr接收器rxsdr = sdrrx(deviceNamesdr);rxsdr.radioid ='USB:1';rxSDR。BasebandSampleRate = txSDR.BasebandSampleRate;rxSDR。CenterFrequency = txSDR.CenterFrequency;rxSDR。GainSource ='手动的';rxsdr.gain = 30;rxsdr.outputdatatype =“双”;rxsdr.enableburstmode = true;rxsdr.numframesinburst = 20;rxsdr.samplesperframe = OSF * SPF;结束

L-LTF进行分类

存在于每个信标帧前导码中的L-LTF序列用作NN的输入单元。rfFingerprintingNonHTFrontEnd系统对象用于检测WLAN数据包,执行同步任务,提取L-LTF序列和数据。此外,MAC地址也被解码。此外,利用训练好的网络对数据进行预处理和分类。

如果runsdrsection numlltf = 20;%检测捕获的L-LTF数量rxFrontEnd = rfFingerprintingNonHTFrontEnd ('信道带宽'“CBW20”);DISP(已知的MAC地址是:);disp (knownMACAddresses)%设置PlutoSDR重复传输DISP(“从发射机”) transmitRepeat (txSDR txSig);%捕获的帧计数器num capturedframes = 0;DISP('启动接收器'%循环,直到收集NumllTF帧numcrapturedframes %使用plutosdr接收数据rxSig = rxSDR ();rxSig =杀害多人者(rxSig);%执行前端处理和有效负载缓冲[payloadFull, cfgNonHT, rxNonHTData, chanEst, noiseVar, LLTF] =......rxFrontEnd (rxSig);如果有效载荷%恢复有效载荷位Revbits = wlannonhtdatarecover(rxnonhtdata,chanest,......noiseVar cfgNonHT,“EqualizationMethod”“ZF”);解码和评估恢复位[MPDUCFG,〜,成功] = WLANMPDUDECODE(COVBITS,CFGNONHT);如果成功= = wlanMACDecodeStatus。成功%更新计数器numcapturedframes = numcapturedframes + 1;%创建真实值输入LLTF = [real(LLTF), imag(LLTF)];LLTF = permute(重塑(LLTF,frameLength,[], 2,1), [1 3 4 2]);ypred = classid (capturedDataNet, LLTF); / /分类如果sum(包含(熟知macaddresses,mpducfg.address2))〜= 0如果分类(ConventCharStoStrings(MPDucfg.Address2))〜= ypred disp(strcat(“MAC地址 ”,mpducfg.address2,“已知,指纹错配,检测到路由器模拟器”))其他的DISP(Strcat(“MAC地址 ”,mpducfg.address2,“已知,指纹匹配”))结束其他的DISP(Strcat(“MAC地址 ”,mpducfg.address2,“没有识别,未知的设备”));结束结束结束结束释放(TXSDR)结束
已知的MAC地址有:
“71b63a2d0b83”“a3f8ac0f2253”“ef11d125044a”“f636a97e07e7”
开始变送器
##连接硬件这个过程可能需要几秒钟。##波形传输已成功启动,无限期地重复。##调用释放方法来停止传输。
开始接收
##连接硬件这个过程可能需要几秒钟。
MAC Address A3F8AC0F2253 is known, fingerprint mismatch, ROUTER IMPERSONATOR DETECTED MAC Address F636A97E07E7 is known, fingerprint mismatch, ROUTER IMPERSONATOR DETECTED MAC Address A3F8AC0F2253 is known, fingerprint mismatch, ROUTER IMPERSONATOR DETECTED MAC Address F636A97E07E7 is known, fingerprint mismatch,ROUTER IMPERSONATOR DETECTED MAC Address 71B63A2D0B83 is known, fingerprint mismatch, ROUTER IMPERSONATOR DETECTED . MAC Address EF11D125044A is known, fingerprint mismatch, ROUTER IMPERSONATOR DETECTED
MAC地址ABCDEFABCDEF无法识别,设备未知
已知MAC地址A3F8AC0F2253是已知的指纹错配,路由器非匹配器检测到的MAC地址F636A97E07E7是已知的指纹错配,路由器非匹配器检测到的MAC地址71B63A2D0B83,Recient intrical ismatch检测到的MAC地址EF11D125044A是已知的,指纹错配,检测到路由器模拟器
MAC地址ABCDEFABCDEF无法识别,设备未知
已知MAC地址A3F8AC0F2253是已知的指纹错配,路由器非匹配器检测到的MAC地址F636A97E07E7是已知的指纹错配,路由器非匹配器检测到的MAC地址71B63A2D0B83,Recient intrical ismatch检测到的MAC地址EF11D125044A是已知的,指纹错配,检测到路由器模拟器
MAC地址ABCDEFABCDEF无法识别,设备未知
MAC地址A3F8AC0F2253已知指纹不匹配,路由器非匹配器检测到的MAC地址F636A97E07E7是已知的指纹错配,路由器Impersonator检测到的MAC地址71B63A2D0B83,指纹错配,检测到路由器模拟器路由器模拟器

进一步的探索

如上所述,从您自己的路由器中捕获数据附录:已知和未知路由器数据收集,用这些数据训练神经网络,并测试网络的性能。

附录:辅助函数

附录:已知和未知路由器数据收集

使用rffingerprintrouterdatacollection.从已知(即可信)路由器收集数据。该函数提取802.11a/g/n/ac OFDM非ht信标帧中存在的L-LTF信号。有关更多信息,请参见IEEE®802.11™WLAN - 具有USRP®硬件的OFDM信标接收器(USRP无线电通讯工具箱支援包)金宝app的例子。利用L-LTF信号和相应的路由器MAC地址对射频指纹神经网络进行训练。如果路由器和它们的天线是固定的,并且很难在无意中移动,这种方法效果最好。例如,在大多数办公环境中,路由器都安装在天花板上。遵循以下步骤:

  1. 连接一个ADALM-PLUTO无线电到您的PC使用作为观察员无线电。

  2. 将收音机放在一个中心位置,可以从尽可能多的路由器接收信号。修复收音机,以便它不会移动。如果可能,将观察者收音机放在天花板上或墙上高。

  3. 确定路由器的通道号。你可以使用手机上的Wi-Fi分析应用程序来查找频道号码。

  4. 通过运行“rfFingerprintingRouterDataCollection(频道)“channel是Wi-Fi频道号码。

  5. 监控“max(abs(LLTF))”值。如果大于1.2或小于0.01,使用的增益输入来调整接收机的增益rffingerprintrouterdatacollection.函数。

使用辅助功能rfFingerprintingUnknownClassDataCollectionTxrfFingerprintingUnknownClassDataCollectionRx从未知路由器收集数据。这些功能设置了两个adalm-pluto无线电来传输和接收L-LTF信号。接收信号与已知路由器信号组合以训练神经网络。您需要两个adalm-pluto无线电,优选地连接到两个单独的pcs。遵循以下步骤:

  1. 连接一个ADALM-PLUTO无线电到一个固定的PC作为未知路由器

  2. 通过运行启动变速箱"rfFingerprintingUnknownClassDataCollectionTx

  3. 将另一个adalm-pluto收音机连接到移动PC以充当观察者

  4. 通过运行“rfFingerprintingUnknownClassDataCollectionRx“。默认情况下该函数收集每个位置200帧。每个位置代表一个不同的未知路由器。

  5. 当该功能指示您移动到新位置时,将观察者收音机移动到一个新位置。默认情况下,此函数从10个位置收集数据。

  6. 如果观察者不接收任何信标或者很少接收信标,则将观察者更靠近发射器移动。

  7. 完成数据收集后,调用“发行版(sdrTransmitter)“在传输无线电的matlab会话中。

选定的参考书目

[1] K. Sankhe, M. belgium ovine, F. Zhou, S. Riyaz, S. Ioannidis and K. Chowdhury, "ORACLE:通过卷积神经网络优化无线电分类",IEEE INFOCOM 2019 - IEEE计算机通信会议,巴黎,法国,2019,第370-378页。

相关话题