测试一个深神经网络获取的数据来检测WLAN路由器扮演
这个例子展示了如何训练无线电频率(RF)指纹卷积神经网络(CNN)获取的数据。你捕捉的无线局域网(WLAN)信标帧的路由器使用软件定义无线电(SDR)。你计划第二个特别提款权传送未知信标帧和捕获它们。你训练CNN使用这些捕获信号。然后程序软件定义无线电(SDR)作为一个路由器冒名顶替者发送信标信号与媒体访问控制(MAC)地址的一个路由器和使用CNN确定它被称为一个冒名顶替者。
关于路由器扮演的更多信息和验证网络的设计与模拟数据,看到设计一个深层神经网络检测WLAN路由器模拟与模拟数据的例子。
火车与获取的数据
收集的数据集/ 802.11 g / n / ac OFDM non-high吞吐量(non-HT)信标帧的WLAN路由器。中描述的那样设计一个深层神经网络检测WLAN路由器模拟与模拟数据示例中,仅遗留长期训练字段(L-LTF)字段出现在前言作为培训单位为了避免任何数据依赖。
在本例中,数据收集使用下图中所示的场景。观察者是一个静止的ADALM-PLUTO收音机。已知的路由器数据收集如下:
将观察者的中心频率基于WLAN的通道使用的路由器
接收信标帧
提取L-LTF信号
解码所使用的MAC地址的标签
保存L-LTF信号连同它的标签
重复步骤2 - 5
numFramesPerRouter
帧的numKnownRouters
路由器。
未知模拟路由器信标帧使用移动ADALM-PLUTO无线电发射机。这台收音机反复发送信标帧随机的MAC地址。未知的路由器数据收集如下:
信标帧生成一个随机的MAC地址
开始传输使用ADALM-PLUTO无线电信标帧多次
收集
NUMFRAMES
信标帧提取L-LTF信号
保存L-LTF帧与标签“未知”
无线移动到另一个位置
重复步骤3 - 6来收集数据
NUMLOC
位置
这种组合数据集的已知和未知的路由器是用来培训的DL模型一样设计一个深层神经网络检测WLAN路由器模拟与模拟数据的例子。
这个示例下载训练数据和训练网络//www.tatmou.com/金宝appsupportfiles/spc/RFFingerprinting/RFFingerprintingCapturedData.tar.gz。如果你没有一个互联网连接,您可以下载的文件在电脑上手动连接到互联网和保存到当前示例文件相同的目录中。出于隐私原因,MAC地址一直在匿名下载数据。复制的结果,这个例子中,捕捉自己的数据中描述附录:已知和未知路由器数据收集。
rfFingerprintingDownloadData (“捕获”)
开始下载的数据文件://www.tatmou.com/supportfiles/spc/RFFingerpri金宝appnting/RFFingerprintingCapturedData.tar.gz下载和提取文件完成
快速运行这个例子,使用下载pretrained网络。培训网络在你的电脑,选择“现在列车网络”选项(即集trainNow
为true)。培训这个网络需要大约5分钟的NVIDIA GPU®泰坦Xp。培训一个CPU可能导致很长的训练时间。
trainNow =假;% #好< * UNRCH >
这个示例使用数据从四个路由器。数据集包含3600帧/路由器,90%用作训练帧和10%用作测试框架。
numKnownRouters = 4;numFramesPerRouter = 3600;numTrainingFramesPerRouter = numFramesPerRouter * 0.9;numTestFramesPerRouter = numFramesPerRouter * 0.1;frameLength = 160;
预处理已知和未知路由器数据
单独收集复杂的基带数据到其同相正交组件和重塑成frameLength x 2 x 1 x numFramesPerRouter * numKnownRouters矩阵。对未知的路由器数据重复相同的过程。下面的代码使用以前收集和预处理数据。先用自己的数据,收集数据中描述附录:已知和未知路由器数据收集。复制新的数据文件命名rfFingerprintingCapturedDataUser.mat
和rfFingerprintingCapturedUnknownFramesUser.mat
这个示例相同的目录中。然后更新负载
命令加载这些文件。
如果trainNow%被路由器数据加载负载(“rfFingerprintingCapturedData.mat”)%创建标签向量yTrain = repelem (MACAddresses numTrainingFramesPerRouter);欧美= repelem (MACAddresses numTestFramesPerRouter);% I和Q之间的分离numTrainingSamples = numTrainingFramesPerRouter * numKnownRouters * frameLength;xTrainingFrames = xTrainingFrames (1: numTrainingSamples, 1);xTrainingFrames =[真实(xTrainingFrames),图像放大(xTrainingFrames)];numTestSamples = numTestFramesPerRouter * numKnownRouters * frameLength;xTestFrames = xTestFrames (1: numTestSamples, 1);xTestFrames =[真实(xTestFrames),图像放大(xTestFrames)];%重塑数据集到一个frameLength x 2 x 1 x numTrainingFramesPerRouter * numKnownRouters矩阵xTrainingFrames =交换(…重塑(xTrainingFrames [frameLength numTrainingFramesPerRouter * numKnownRouters 2,1)),…(1 2 3 4));%重塑数据集到一个frameLength x 2 x 1 x numTestFramesPerRouter * numKnownRouters矩阵xTestFrames =交换(…重塑(xTestFrames [frameLength numTestFramesPerRouter * numKnownRouters 2,1)),…(1 2 3 4));%未知路由器数据加载负载(“rfFingerprintingCapturedUnknownFrames.mat”)%的培训单位numUnknownFrames =大小(unknownFrames 4);%数据分割成90%的训练,10%的测试numUnknownTrainingFrames =地板(numUnknownFrames * 0.9);numUnknownTest = numUnknownFrames - numUnknownTrainingFrames;%添加ADALM-PLUTO数据训练和测试数据集xTrainingFrames (:,:,:, (1: numUnknownTrainingFrames) + numTrainingFramesPerRouter * numKnownRouters)…= unknownFrames (:,:,: 1: numUnknownTrainingFrames);xTestFrames (:,:,:, (1: numUnknownTest) + numTestFramesPerRouter * numKnownRouters)…= unknownFrames (::,:, (1: numUnknownTest) + numUnknownTrainingFrames);%洗牌数据vr = randperm (numKnownRouters * numTrainingFramesPerRouter + numUnknownTrainingFrames);xTrainingFrames = xTrainingFrames (::,:, vr);%添加“未知”的标签和洗牌yTrain = [yTrain repmat (“未知”(1,numUnknownTrainingFrames)));yTrain =分类(yTrain (vr));欧美=[欧美repmat (“未知”(1,numUnknownTest)));欧美=分类(欧美);结束
火车CNN
使用相同的神经网络结构和训练选项在训练和模拟数据的例子。
poolSize = 1 [2];strideSize = 1 [2];%建立网络体系结构层= [imageInputLayer ([frameLength 2 1],“归一化”,“没有”,“名字”,输入层的1)convolution2dLayer([7], 50岁,“填充”(1 0),“名字”,“CNN1”)batchNormalizationLayer (“名字”,“BN1”)leakyReluLayer (“名字”,“LeakyReLu1”)maxPooling2dLayer (poolSize“步”strideSize,“名字”,“MaxPool1”)convolution2dLayer(2[7], 50岁,“填充”(1 0),“名字”,“CNN2”)batchNormalizationLayer (“名字”,“BN2”)leakyReluLayer (“名字”,“LeakyReLu2”)maxPooling2dLayer (poolSize“步”strideSize,“名字”,“MaxPool2”)fullyConnectedLayer (256,“名字”,“FC1”)leakyReluLayer (“名字”,“LeakyReLu3”)dropoutLayer (0.5,“名字”,“DropOut1”)fullyConnectedLayer (80,“名字”,“取得”)leakyReluLayer (“名字”,“LeakyReLu4”)dropoutLayer (0.5,“名字”,“DropOut2”)fullyConnectedLayer (numKnownRouters + 1,“名字”,“一个FC3”文件)softmaxLayer (“名字”,“SoftMax”)classificationLayer (“名字”,“输出”));
配置培训选项以使用亚当优化器mini-batch大小为128。使用测试框架进行验证优化hyperparameters以来完成的[1]。
默认情况下,ExecutionEnvironment
被设置为“汽车”
使用GPU培训如果一个是可用的。否则,trainNetwork
(深度学习工具箱)使用CPU进行训练。显式地设置执行环境,集ExecutionEnvironment
之一“cpu”
,“图形”
,“multi-gpu”
,或“平行”
。选择“cpu”
可能会导致一个很长的训练时间。
如果trainNow miniBatchSize = 128;%培训选项选择= trainingOptions (“亚当”,…“MaxEpochs”30岁的…“ValidationData”{xTestFrames,欧美},…“ValidationFrequency”、地板((numTrainingFramesPerRouter * numKnownRouters + numUnknownTrainingFrames) / miniBatchSize / 3),…“详细”假的,…“L2Regularization”,0.0001,…“InitialLearnRate”,0.0001,…“MiniBatchSize”miniBatchSize,…“ValidationPatience”5,…“阴谋”,“训练进步”,…“洗牌”,“every-epoch”);%训练网络capturedDataNet = trainNetwork (xTrainingFrames、yTrain层,选择);其他的负载(“rfFingerprintingCapturedDataTrainedNN.mat”,“capturedDataNet”,“xTestFrames”,“次”,“MACAddresses”)结束
下面的图显示了网络上运行的计算机的培训进度与单个NVIDIA泰坦Xp GPU,网络聚集的地方大约10时代几乎100%的准确率。网络的最终精度为100%。
生成混淆矩阵。
图yTestPred =分类(capturedDataNet xTestFrames);厘米= confusionchart(欧美,yTestPred);厘米。Title =测试数据的混淆矩阵的;厘米。RowSummary =“row-normalized”;
测试特别提款权
训练网络的性能测试类“未知”。生成信标帧的MAC地址已知路由器和一个未知的路由器。这些框架使用一个传输ADALM-PLUTO广播和接收使用另一个ADALM-PLUTO收音机。由于通道和射频损伤之间创建这两个收音机是不同于那些真正的路由器和观察者之间创建,该神经网络分类所有接收的信号是“未知”。如果收到了MAC地址是已知的,则系统声明源作为一个路由器冒名顶替者。如果接收到的MAC地址是未知的,那么系统声明源作为一个未知的路由器。要执行这个测试,您需要两个ADALM-PLUTO无线电发射和接受。另外,您需要安装为ADALM-PLUTO无线电通信工具箱支持金宝app包。
波形的一代
生成一个信标帧组成的传输波形不同的MAC地址。发射机多次传送这些WLAN帧。接收机捕获WLAN帧并确定如果是路由器冒名顶替者使用了MAC地址和射频指纹检测到的训练神经网络。
chanBW =“CBW20”;%通道带宽osf = 2;%过采样因子frameLength = 160;%在样本帧长度%创建信标肋骨配置对象frameBodyConfig = wlanMACManagementConfig;%创建信标帧配置对象beaconFrameConfig = wlanMACFrameConfig (“FrameType”,“灯塔”);beaconFrameConfig。ManagementConfig = frameBodyConfig;%建立插值和大批杀害对象杀害多人者= dsp.FIRDecimator (“DecimationFactor”(osf);%保存已知的MAC地址knownMACAddresses = MACAddresses;MACAddressesToSimulate = [MACAddresses,“ABCDEFABCDEF”];%的MAC地址创建WLAN波形已知的路由器和一个%未知的路由器txWaveform = 0 (1540 5);为i = 1:长度(MACAddressesToSimulate)%设置MAC地址beaconFrameConfig。Address2 = MACAddressesToSimulate(我);%生成信标帧比特[信标,mpduLength] = wlanMACFrame (beaconFrameConfig,“OutputFormat”,“位”);nonHTcfg = wlanNonHTConfig (…“ChannelBandwidth”chanBW,…“主持人”, 1…“PSDULength”,mpduLength);txWaveform (:, i) = [wlanWaveformGenerator(信标,nonHTcfg);1)0(20日);结束txWaveform = txWaveform (:);%获得中心频率频道153年5 GHz乐队fc = wlanChannelFrequency (153 5);fs = wlanSampleRate (nonHTcfg);txSig =重新取样(txWaveform osf 1);%样本每帧突发模态防晒系数=长度(txSig) / (MACAddressesToSimulate);runSDRSection = false;如果收音机= findPlutoRadio helperIsPlutoSDRInstalled () ();如果长度(收音机)> = 2 runSDRSection = true;其他的disp (“两个ADALM-PLUTO收音机是必要的。跳过特别提款权测试”。)结束其他的disp (“通信工具箱支持方案模拟装置ADALM-PLUT金宝appO无线电没有找到。”)disp (在家里“点击插件选项卡的MATLAB将来发布安装支持包。”金宝app)disp (“特别提款权跳过测试”。)结束
为模拟设备通信工具箱支持包ADALM-PLUT金宝appO无线电没有找到。
在家里点击插件选项卡的MATLAB将来发布安装支持包。金宝app
跳过特别提款权测试。
如果runSDRSection%建立PlutoSDR发射机deviceNameSDR =“冥王星”;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。获得= 30;rxSDR。OutputDataType =“双”;rxSDR.EnableBurstMode = true;rxSDR。NumFramesInBurst = 20;rxSDR。SamplesPerFrame = osf *防晒系数;结束
L-LTF分类
L-LTF序列存在于每个信标帧序言作为神经网络输入单元。rfFingerprintingNonHTFrontEnd系统对象™是用来检测WLAN包,执行同步任务,提取L-LTF序列和数据。此外,MAC地址也是解码。此外,数据预处理和分类使用训练网络。
如果runSDRSection numLLTF = 20;%的L-LTF捕获进行测试rxFrontEnd = rfFingerprintingNonHTFrontEnd (“ChannelBandwidth”,“CBW20”);disp (“已知的MAC地址是:“);disp (knownMACAddresses)%设置PlutoSDR反复传输disp (“从发射机”)transmitRepeat (txSDR txSig);%捕捉帧计数器numCapturedFrames = 0;disp (“开始接收”)%收集循环直到numLLTF帧而numCapturedFrames < numLLTF%使用PlutoSDR接收数据rxSig = rxSDR ();rxSig =杀害多人者(rxSig);%执行前端处理和有效载荷的缓冲[payloadFull, cfgNonHT rxNonHTData,成龙,noiseVar, LLTF] =…rxFrontEnd (rxSig);如果payloadFull%恢复有效载荷部分recBits = wlanNonHTDataRecover (rxNonHTData,陈,…noiseVar cfgNonHT,“EqualizationMethod”,“ZF”);%解码和评估恢复部分[mpduCfg, ~,成功]= wlanMPDUDecode (recBits cfgNonHT);如果成功= = wlanMACDecodeStatus.Success%更新计数器numCapturedFrames = numCapturedFrames + 1;%创建实值输入LLTF =[真实(LLTF),图像放大(LLTF)];LLTF =排列(重塑(LLTF frameLength, [], 2, - 1), (1 2 3 4));ypred =分类(capturedDataNet LLTF);如果金额(包含(knownMACAddresses mpduCfg.Address2)) ~ = 0如果分类(convertCharsToStrings (mpduCfg.Address2)) ~ = ypred disp (strcat (“MAC地址”mpduCfg.Address2,“指纹不匹配,路由器发现冒名顶替者”))其他的disp (strcat (“MAC地址”mpduCfg.Address2,“众所周知,指纹匹配”))结束其他的disp (strcat (“MAC地址”mpduCfg.Address2,“不认识,未知设备”));结束结束结束结束发行版(txSDR)结束
进一步的探索
捕获数据从自己的路由器中解释附录:已知和未知路由器数据收集,与这个数据训练神经网络,网络的性能进行测试。
附录:辅助函数
附录:已知和未知路由器数据收集
使用rfFingerprintingRouterDataCollection
从已知的收集数据(即信任)路由器。这个函数提取L-LTF信号出现在802.11 a / g / n / ac OFDM Non-HT信标帧传输从商业802.11硬件。看到的更多信息OFDM使用软件定义无线电信标接收机(USRP无线电通信工具箱支持包)金宝app的例子。L-LTF信号和相应的路由器的MAC地址用于射频指纹识别神经网络训练。这种方法效果最好,如果路由器和天线是固定的,很难无意中移动。例如,在大多数办公室环境中,路由器安装在天花板上。遵循以下步骤:
一个ADALM-PLUTO无线电连接到你的电脑作为观察者收音机。
收音机在中央位置可以从尽可能多的路由器接收信号。修理收音机,这样它不会移动。如果可能的话,把观察者电台在天花板上或高墙上。
确定路由器的通道数量。您可以使用wi - fi®分析仪应用在你的手机上发现通道数字。
开始数据收集通过运行”
rfFingerprintingRouterDataCollection(频道)
“频道是wi - fi频道号码监控“马克斯(abs (LLTF))”的价值。如果大于1.2或小于0.01,调整接收机的增益使用获得的输入
rfFingerprintingRouterDataCollection
函数。
使用帮助功能rfFingerprintingUnknownClassDataCollectionTx
和rfFingerprintingUnknownClassDataCollectionRx
从未知的路由器来收集数据。这些函数设置两个ADALM-PLUTO无线电传输和接收L-LTF信号。接收到的信号结合已知的路由器信号来训练神经网络。需要两个ADALM-PLUTO收音机,最好是连接两个独立的个人电脑。遵循以下步骤:
连接一个ADALM-PLUTO无线电固定式PC作为未知的路由器。
开始传输通过运行”
rfFingerprintingUnknownClassDataCollectionTx
”。连接另一个ADALM-PLUTO无线电移动PC作为观察者。
开始数据收集通过运行”
rfFingerprintingUnknownClassDataCollectionRx
”。这个函数默认情况下收集200帧/位置。每个位置都代表一个不同的未知的路由器。当函数指示你搬到一个新的位置,观察者无线电移动到一个新的位置。默认情况下,此函数从10个位置收集数据。
如果观察者没有收到任何灯塔也很少收到信标,靠近观察者发射机。
数据收集完成后,所谓的“
发行版(sdrTransmitter)
“发射无线电的MATLAB®会话。
选定的参考书目
[1]k . Sankhe m . Belgiovine f .周s Riyaz埃尼迪斯和k . Chowdhury“甲骨文:优化无线电通过卷积神经网络分类,“2019年IEEE INFOCOM IEEE计算机通讯大会上,巴黎,法国,2019年,页370 - 378。