目录

1. 数据预处理

1.1 移除循环前缀(CP)

1.2 FFT变换

1.3 实虚部分离

1.4 归一化

2. DNN网络设计

3. 模型训练

3.1 数据集生成

3.2 优化器选择

3.3 训练循环

3.4 步骤

4.算法总结

5.MATLAB程序

6.MATLAB仿真结果

7.参考文献


       OFDM(正交频分复用)作为多载波调制技术的核心,凭借高频谱效率和抗多径干扰能力,广泛应用于5G、WiFi等通信系统。传统OFDM信号检测依赖信道估计(如LS、MMSE)与均衡器,在复杂信道(如高速移动、强噪声、非线性失真)下易因信道建模误差导致性能下降。基于深度神经网络(DNN)的检测算法通过数据驱动方式学习信道映射关系,无需精确信道模型即可实现高效信号恢复,成为突破传统算法瓶颈的关键技术。

      传统OFDM检测的核心是 “信道估计→均衡→符号判决” 的三步流程,需基于已知信道模型(如瑞利衰落、高斯噪声)推导最优检测策略;而DNN-based OFDM检测则通过神经网络的非线性拟合能力,直接学习“接收信号→发送符号”的端到端映射关系,或在关键环节(如信道估计、均衡)替代传统模块,本质是用数据驱动的 “黑箱模型” 优化检测性能。

1. 数据预处理

将接收的时域OFDM信号转换为适合DNN输入的频域特征向量。

1.1 移除循环前缀(CP)

接收信号r(t)包含CP以对抗多径干扰。移除CP后得到原始OFDM符号:

1.2 FFT变换

对时域信号进行快速傅里叶变换(FFT),转换为频域符号:

1.3 实虚部分离

将复数向量拆分为实部和虚部,形成长度为2N的实数向量:

1.4 归一化

对输入向量进行归一化,消除幅度差异:

2. DNN网络设计

构建多层感知机(MLP)或卷积神经网络(CNN),学习从接收信号到发送符号的非线性映射。

网络结构示例(以MLP为例):

输入层:2N个神经元(对应实虚部分离后的向量)。

隐藏层:3个全连接层,神经元数量分别为512、256、128,激活函数为ReLU:

损失函数:交叉熵损失(Cross-Entropy Loss):

3. 模型训练

目标:通过反向传播优化网络参数 θ={Wi​,bi​},最小化损失函数。

3.1 数据集生成

生成OFDM符号s,通过QPSK/16-QAM调制映射到子载波。

添加高斯白噪声(AWGN)和多径信道(如3GPP Extended Pedestrian A模型):

3.2 优化器选择

使用Adam优化器,学习率η=0.001,动量参数β1​=0.9,β2​=0.999。

3.3 训练循环

每10个epoch在验证集上计算误码率(BER),若连续5个epoch未改善则停止训练。

3.4 步骤

4.算法总结

整体系统结构如下图所示:

将其中的信道估计和信道均衡模块替换为如下图所示:

5.MATLAB程序


clear variables;
close all;

 

load('TrainingData.mat');
load('ValidationData.mat');

%% Define training parameters

MiniBatchSize = 1000;
MaxEpochs = 100;
InputSize = 2*NumOFDMsym*NumSC;
NumHiddenUnits = 16;
NumClass = length(Label);

 

Layers = [ ...
    sequenceInputLayer(InputSize)
    lstmLayer(NumHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(NumClass)
    softmaxLayer
    classificationLayer];

 

Options = trainingOptions('adam',...
    'InitialLearnRate',0.01,...
    'ValidationData',{XValid,YValid}, ...
    'ExecutionEnvironment','auto', ...
    'GradientThreshold',1, ...
    'LearnRateDropFactor',0.1,...
    'MaxEpochs',MaxEpochs, ...
    'MiniBatchSize',MiniBatchSize, ...
    'Shuffle','every-epoch', ...
    'Verbose',0,...
    'Plots','training-progress');

%% Train DNN

Net = trainNetwork(XTrain,YTrain,Layers,Options);

 

save('TrainedNet','Net','MiniBatchSize');

6.MATLAB仿真结果

测试结果如下图所示:

7.参考文献

[1]刘步花, 丁丹, 杨柳. 基于DNN的OFDM系统非线性失真补偿[J]. 现代电子技术, 2021, 44(5):4. D236

更多推荐