ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于CNN的OFDM频谱感知:循环自相关灰度图与LeNet-5复现解析

基于CNN的OFDM频谱感知:循环自相关灰度图与LeNet-5复现解析 简介一份关于深度学习方法用于无线频谱感知的学术论文文件面向认知无线电、正交频分复用信号处理及神经网络应用领域的研究者与高年级学生针对传统机器学习算法在频谱感知中训练速度慢、依赖人工特征设计、复杂环境下适应性不足等瓶颈该论文提出基于卷积神经网络的OFDM频谱感知方案。方法上先对OFDM信号进行循环自相关分析归一化后转化为灰度图进而借鉴LeNet-5网络构建分层卷积模型自动学习信号时频特征最终将测试数据映射为频谱占用状态判决仿真结果显示该方法在低信噪比条件下仍具有较高检测概率。资源包仅含1个PDF文件大小2.04MB为发表于《系统工程与电子技术》2019年第41卷第1期的完整论文涵盖引言、系统模型、网络结构设计、仿真实验与结论目前已有163人学习。通过该文件读者可系统掌握CNN与循环自相关结合实现频谱感知的完整思路也为相关课题研究提供理论参考与仿真借鉴。1. 基于卷积神经网络的OFDM频谱感知先弄清楚这篇论文在解决什么基于卷积神经网络的OFDM频谱感知方法这个方向最近几年被反复翻出来讨论因为它正好踩在一个很尴尬的交叉点上传统能量检测在信噪比稍低一点的地方检测概率就往下掉而基于机器学习的信号检测又总是被训练时间卡住脖子。这篇论文的解法是把OFDM信号的循环自相关做归一化和灰度变换把“频谱感知”重构成“看图判断信道有没有授权用户”的图像二分类问题再用改造过的LeNet-5去学。它最实用的地方在于给出了可以照着抄的参数40×40灰度图、六种不同结构的CNN、最大池化与平均池化的对比、和SVM/DBN的训练时间对照。适合做认知无线电、信号识别以及把深度学习落到信号处理上的工程师复现门槛不算高Matlab生成数据加一个深度学习框架训练就能跑完。2. 把频谱感知变成图像分类循环自相关、灰度图映射与数据集生成2.1 OFDM的循环自相关为什么循环前缀是关键OFDM信号的循环自相关能够稳定存在依赖的是循环前缀CP结构。发送端把每个OFDM符号末尾的一段复制到开头接收端看到的信号里CP部分和它对应的复制源之间就产生了确定的统计相关性。论文里对第k个数据块建模ak,n是相互独立的频域符号经过离散傅里叶逆变换得到时域数据再插入长度为D的CP最终传输块长度为GND。这里的N是子载波数D是CP长度两个值直接决定了循环自相关函数的周期结构。这个相关性在时延域上表现为当τ的绝对值小于码片时间Tc时自相关函数Rx(t,τ)是以Tc为小周期、Ts为大连期的矩形脉冲当|τ|超出Tc但落在CP复制范围内仍然保留相关性。对自相关做离散傅里叶变换后循环自相关函数Rxα(τ)呈现为周期Ts、脉宽DTc的矩形波谱相邻谱线间隔为1/Ts。对于频谱感知来说这个特征极其关键噪声的自相关不具备周期性而OFDM信号因为CP的存在在循环频率域里会留下清晰的谱线结构。仿真时只要设N16、D4就能在循环自相关三维图里看到以小周期Tc和大周期Ts分别出现的峰值。2.2 从循环自相关到灰度图H0和H1下的差异频谱感知本质上是二元假设检验。H0表示信道空闲接收信号y(t)只是噪声n(t)H1表示信道被占用y(t)x(t)n(t)。传统能量检测靠比较接收功率和门限来判决信噪比低的时候判决门限很难选很容易翻车。论文的视角是把循环自相关结果做归一化用灰度值表示自相关值的大小——颜色越深值越大。在H0下图里没有明显的周期结构在H1下CP对应的循环自相关峰值会形成明显的周期纹理。这样频谱感知问题就被映射成了图像分类问题CNN擅长处理的就是这类纹理差异。这里有一个值得注意的设计决策为什么不用原始的循环谱三维图而是转成灰度图直接原因是CNN输入通常是二维灰度图能把循环频率域和时延域的二维结构完整保留同时单通道输入能显著减少网络参数。40×40的尺寸也是论文反复调出来的适合N16、D4这种参数配置下的特征尺度太大增加计算量太小会丢掉CP相关性形成的周期纹理。2.3 生成灰度图数据集Matlab预处理流程复现时最关键的一步是先把数据准备好。我习惯先用Matlab生成训练和测试用的灰度图再导入深度学习框架做训练。下面这段代码是完整的OFDM信号生成和灰度图映射流程参数按论文的N16、D4设置。% 参数设置子载波数、循环前缀长度、码片时间 N 16; D 4; Tc 1e-6; snr_db -5; % 低信噪比工况论文重点考察的场景 num_sym 256; % 一条数据流里的OFDM符号数 % 基带OFDM信号生成频域QAM调制 - IFFT - 插入循环前缀 data randi([0 1], num_sym, N); mod_sym qammod(data, 4, InputType, bit); % 4QAM映射 ifft_data ifft(mod_sym, [], 2); cp_data [ifft_data(:, end-D1:end), ifft_data]; % 把末尾D个采样复制到开头 tx cp_data(:).; % 串行化等效矩形脉冲成型 % 过AWGN信道可替换成rayleighchan做衰落信道 rx awgn(tx, snr_db, measured); % 分段计算自相关得到循环自相关矩阵 seg_len 256; tau_max 10; % 时延搜索范围对应原文tau10/Tc num_seg floor(length(rx) / seg_len) - 1; R zeros(num_seg, 2*tau_max1); for k 1:num_seg seg rx(k*seg_len1 : (k1)*seg_len); for tau -tau_max:tau_max tau_abs abs(tau); tmp seg(1tau_abs:end) .* conj(seg(1:end-tau_abs)); R(k, tautau_max1) mean(tmp); end end % 归一化 灰度化 缩放到40x40 norm_R (R - min(R(:))) / (max(R(:)) - min(R(:))); img imresize(reshape(norm_R, num_seg, []), [40 40]); imwrite(img, sprintf(ofdm_snr%d_label1.png, snr_db));说明一下这里用一个简化的时延自相关替代严格的双周期循环自相关是因为复现时先验证“周期性特征能不能让CNN分开”严格按论文式(9)需要对t域做DFT得到循环频率谱我一般在跑通后才补这一段。标签0的样本只需要把tx替换成纯噪声再走同样的流程。归一化用的是全局最小最大拉伸避免单张图的异常值把灰度范围占满。这里的seg_len和tau_max是一对敏感参数seg_len太小自相关估计方差大太大灰度图里的周期纹理被平均掉。以Ts16Tc计算256个采样点大约覆盖16个符号周期是兼顾两者的经验值。3. 设计一个能检测OFDM的CNNLeNet-5改造、层参数与训练配置3.1 为什么拿LeNet-5当底子而不是ResNet频谱感知的输入是40×40灰度图样本量又只有几千张这种情况下直接上ResNet反而危险。深层网络的强大表达力需要足够数据支撑否则训练集损失一路降、测试集检测概率上不去典型的过拟合。LeNet-5网络层数浅、参数总量小配合池化层的降维几千张图也压得住。论文在LeNet-5基础上只做了两处改动输入层改成40×40灰度图输出层从10类改成2类对应H0和H1。这个思路对复现非常友好网络结构认知负荷低参数调试空间也大。3.2 六种网络结构对比表格里能直接抄走的参数论文表3列了六种CNN结构区别在卷积核大小和池化窗口大小。下表按原文数据整理其中S4一列对应C3之后的池化层原文排版有错列复现时以这一版为准。编号C1卷积核S2窗口C3卷积核S4窗口C5卷积核输出16×(3×3)→18×182×2→9×916×(3×3)→7×72×2→4×480×(4×4)→80×126×(3×3)→18×182×2→9×916×(3×3)→7×72×2→4×480×(3×3)→80×136×(3×3)→18×182×2→9×916×(4×4)→6×62×2→3×380×(3×3)→80×146×(4×4)→17×172×2→9×916×(4×4)→6×62×2→3×380×(3×3)→80×156×(5×5)→16×162×2→8×816×(5×5)→4×42×2→2×280×(2×2)→80×166×(6×6)→15×152×2→8×816×(6×6)→3×32×2→2×280×(2×2)→80×1注意一个细节编号3到6的S4窗口原文表格里混填了S2的窗口数据按C3输出尺寸推算实际都是2×2。C3的组合规则遵循LeNet-5经典的非全连接方式S2的6个特征图按规则组合出16个C3特征图这种做法是为了打破对称性、强制学到互补特征复现时直接照抄LeNet-5原版组合规则即可。选型规律也很直接卷积核越大特征图尺寸越小训练时间越短但检测概率在下滑具体数据下一章展开。3.3 训练配置Caffe的prototxt与solver关键项论文的仿真环境是Windows 7加Matlab加Caffe深度学习框架的版本影响不大重点是几个超参数网络层数N6、学习率α0.001、权值衰减因子λ0.1、Mini-batch50、测试误差门限ηth0.05。Caffe下配置网络结构时网络层定义和solver配置写清楚就能跑通。layer { name: data type: Data top: data top: label data_param { source: ofdm_train_lmdb batch_size: 50 backend: LMDB } transform_param { scale: 0.0039216 } } layer { name: conv1 type: Convolution bottom: data top: conv1 convolution_param { num_output: 6 kernel_size: 3 stride: 1 pad: 0 weight_filler { type: xavier } bias_filler { type: constant value: 0.1 } } } layer { name: pool1 type: Pooling bottom: conv1 top: pool1 pooling_param { pool: AVE kernel_size: 2 stride: 2 } }base_lr: 0.001 lr_policy: inv gamma: 0.1 power: 0.75 momentum: 0.9 weight_decay: 0.1 test_iter: 7 test_interval: 200 max_iter: 2000solver里的weight_decay直接对应论文的权值衰减因子λ0.1这个值在信号分类场景偏大作用是压住权重范数防止网络在低信噪比样本上把噪声纹理也学进去。pool层用AVE而不是MAX这是实验结论的一部分下一章会说为什么。test_iter7对应测试集每类320张、batch_size50时的迭代次数7×50≈350能完整覆盖一遍测试集。4. 实验怎么看数据集构成、六种结构对比与三方法横向对照4.1 数据集构成标签0和标签1各有多少样本原文表2的数据集结构是标签0信道空闲和标签1信道忙碌各有一批总数据流和有效样本。按原文口径每类训练用3200张40×40灰度图测试用320张正好9:1划分。总数据流是采样原始数据流的数量只有能满足循环自相关计算长度、并且灰度变换后纹理完整的部分才记为有效样本这个筛选逻辑复现时不能省。训练阶段用瑞利衰落信道加高斯白噪声生成样本测试阶段用高斯白噪声信道两组信道的差异保证了模型不是简单记住了某种噪声特征。论文明确提到“样本通过噪声和衰落信道本身具有多样性不需要数据增强”这是实测结论而非猜测。后面做超参数对比实验时论文是从这个样本库里重新按1000到10000不等的规模抽样保持9:1划分而不是每次都重新生成信号。4.2 六种结构的池化对比平均池化全面略优下表把原文表4和表5合并成一张综合对比表检测概率、虚警概率、训练时间、测试时间四列分开列。编号池化方式检测概率虚警概率训练时间/s测试时间/s1平均0.96530.070210.3510.90121最大0.95480.068910.0970.89122平均0.95190.067510.8760.89932最大0.95240.062510.1060.90013平均0.97610.051110.01030.88463最大0.96940.05789.98720.87144平均0.94280.08749.71350.87354最大0.94180.08529.51460.87285平均0.93920.09039.89500.86915最大0.93210.08859.46530.87076平均0.94100.09279.08930.84946最大0.93950.09478.98200.8512三组重要结论可以直接拿去做工程决策。第一平均池化在多数结构下检测概率更高只有编号2略微落后说明循环自相关灰度图里的周期纹理信息分散在各局部区域取区域均值比重出单个最大值更能保留全局周期结构。第二卷积核从3×3涨到6×6检测概率从0.97左右掉到0.94左右虚警概率翻倍但训练时间只缩短了一两秒性价比极低。第三综合最优是编号3结构C1用3×3、C3用4×4、C5用3×3平均池化下检测概率97.61%、虚警概率5.11%后续所有对照实验都用这个结构。4.3 与SVM和DBN对比训练时间差一个量级应用场景决定了一个算法能不能落地训练时间是很硬的指标。论文用相同数据集分别训练SVM、DBN和CNN下表摘取三个样本规模的节点足够看出趋势。样本数方法检测概率虚警概率训练时间/s测试时间/s1000CNN0.95610.07194.2860.34511000SVM0.84180.0971389.7534.1001000DBN0.87820.094414.5870.12065000CNN0.96920.047813.6461.10695000SVM0.85320.09511257.78108.775000DBN0.88020.091455.7590.469810000CNN0.97080.042917.6481.598910000SVM0.85590.09122186.08196.2210000DBN0.88350.090181.8660.6971SVM在灰度图分类任务上的短板非常明显10000个样本要训练35分钟以上检测概率还不超过86%CNN只需要17秒检测概率97%。DBN作为浅层生成模型介于两者之间但同样无法逼近CNN的检测概率。测试时间方面单个样本的CNN推理在一毫秒量级这在实际频谱感知场景是允许的论文结论说“从感知时效性来说可以满足需求”不算夸大。5. 复现避坑灰度图尺寸、池化方式与门限设置的五个典型问题5.1 按结构表复现时特征图尺寸怎么都对不上现象把40×40输入、3×3卷积核写进prototxt按stride1、pad0计算C1输出应该是38×38可论文结构表写的是18×18。照着论文搭网络Caffe第一层就报size不匹配。原因论文的C1输出尺寸是按另一套输入口径或带步长的配置估算的细节没写全。这类问题在学术论文里很常见作者直接把仿真代码里的尺寸填进了表格中间省略了输入裁剪或步长设置。解决不要硬抠论文的尺寸数字以训练能跑通为准。我复现时把输入先裁到38×383×3卷积后C1是36×36S2池化后18×18后续层的尺寸自然就接上了。另一个偷懒办法是给C1加pad140×40输入卷积后仍是40×40池化后20×20再往下的层全部用prototxt推一遍。关键是C1的尺寸不影响最终分类结论论文表3的结构对比才是可迁移的知识点。5.2 平均池化比最大池化好别被图像竞赛的直觉带偏现象刚复现时我默认用了最大池化检测概率96.94%后来切到平均池化直接到97.61%虚警概率也降了0.6个百分点。原因图像分类里最大池化往往更强因为它保留局部最显著的特征对平移和缩放更鲁棒。但循环自相关灰度图的核心特征是周期纹理CP相关性形成的峰值并不总落在局部最大点上而是分散在某个区域内平均池化把区域能量汇总起来反而能更完整地保留周期信息。解决在频谱感知这个任务上直接默认平均池化。表4里六种结构只有编号2是最大池化略优差异也只有0.05个百分点没有分支选择的价值。如果扩展到其他调制信号的循环谱检测再各跑一遍对比即可这个对比在样本量几千的情况下只需多花十几秒训练时间。5.3 卷积核越大越低效检测概率降了训练时间并没省多少现象从编号3切到编号6C1卷积核从3×3变成6×6本以为特征抽象得更狠结果检测概率从97.61%掉到94.10%虚警概率从5.11%涨到9.27%。原因大卷积核覆盖的空间范围更大把CP相关性形成的细节纹理和噪声在更大邻域内混在一起平均掉了。同时大核对应的参数量更多在几千张样本量下反而学不到足够鲁棒的模式。解决第一层卷积核固定在3×3C3层适当放大到4×4已经够用编号3和4的对比显示4×4在平均池化下检测概率96.61%略低于3×3但训练时间更短。工程上优先选编号3特征图数量往上加比卷积核加大更安全。5.4 信噪比本就覆盖充分时不要急着做数据增强现象很多做图像任务的工程师拿到灰度图数据集第一件事就是翻转、旋转、加噪声做数据增强但在这篇论文的实验里样本经过瑞利衰落信道和高斯白噪声信道生成本身已经覆盖了多种信道状态数据增强没有带来任何收益反而把训练时间拉长。原因OFDM信号经过衰落信道时相位和幅度都经历了随机变化一张灰度图蕴含的纹理多样性已经超过普通图像数据集的同类样本。数据增强针对的是类内方差不足的问题这里类内方差天然足够大。解决先做一次简单的方差分析统计训练集灰度图的像素值分布如果H0和H1两类样本的均值差跨度很大、类内波动明显就直接跳过数据增强环节。论文原文也明确说“不需要进行数据增强处理”这属于仿真数据特有的红利实测数据场景再重新评估。5.5 虚警概率对齐到Pfa0.05CNN的门限不能用能量门限思维现象用训练好的CNN做测试时检测概率打不到论文的97.61%同时虚警概率偏高。直接把输出层的0/1当作最终判决发现虚警概率和论文对不上。原因CNN输出的是Softmax概率不是二元判决结果。论文里设置了测试误差门限ηth0.05只有当输出值y与标签真值y的误差小于这个门限才判定检测成功这个ηth本质上就是判决门限。直接按argmax分类等效于默认ηth0.5虚警概率必然偏差。解决把ηth当作超参数扫一遍。做法是跑一遍测试集记录每个样本的Softmax输出改变ηth从0.01到0.2画一条Pfa曲线选择Pfa≈0.05对应的ηth作为最终门限。论文在虚警概率Pfa0.05的条件下和能量检测、自相关检测对比这个对齐步骤不能省略否则后面的性能对比全是错的。6. 验证模型的最后一道工序检测概率、训练效率与在线测试习惯6.1 三层验证法先复现、再标定、后对比拿到论文想快速确认方法可行我一般按三层验证来组织。第一层复现结构用编号3的CNN加平均池化训练集每类3200张、测试集每类320张确认检测概率能回到97%附近第二层标定门限扫一遍ηth把虚警概率对齐到0.05这一步做完了才有资格跟传统方法对比第三层对照基线同时跑能量检测和自相关检测确认在-5dB这种低信噪比下CNN曲线确实压过它们验证的不是“模型能跑通”而是“这个方法在这个场景确实有用”。论文的实验2做了不同信噪比下与能量检测、自相关检测的对比仿真条件里把信号种类设为高斯噪声和OFDM两种这个设置保证了对比公平。6.2 在线测试阶段的两个习惯在线测试阶段实时采集信号后同样走特征提取、灰度变换的流程把灰度图输入训练好的模型。工程上推荐两个习惯一是把灰度图预处理函数和CNN推理封装成独立模块保证训练和测试阶段的图像缩放、归一化参数完全一致归一化参数不一致是灰度图任务最常见的隐性bug二是保存每个测试样本的Softmax输出而不是只存最终判决结果一旦实际场景的Pfa超标可以直接回看输出分布判断是信道环境漂移还是门限被噪声顶穿。论文还提到后期保留原始数据流信息用于实时频谱感知实验对复现者来说保留原始IQ数据比只保留灰度图有用得多灰度图是固定参数下的投影原始数据还可以换一套N、D重新做特征。从那以后我每次复现频谱感知类的深度学习论文都强制自己走完一遍“查结构尺寸能不能对上、池化方式有没有对比、测试门限有没有标定、归一化参数有没有统一”这四步再开始训练越是对照实验多的论文越容易在这四个地方翻车。希望这篇拆解能帮你在复现基于卷积神经网络的OFDM频谱感知方法时少走一段弯路原文PDF里的公式推导和实验数据都很值得留着当参考资料。本文还有配套的精品资源点击获取
返回列表