基于深度学习的FC-DNN-OFDM接收系统理论分析
目录
FC-DNN OFDM接收机用全连接深度神经网络(FC-DNN)替代传统接收机的“信道估计-均衡-解调” 全流程,将其视为一个“黑盒子”,直接实现“接收时域信号→输出原始比特”的端到端映射。其核心思想是“数据驱动的拟合”:通过大量仿真数据训练DNN,让网络自主学习“信道失真 + 噪声”到“原始比特”的映射关系,无需人工设计信道估计、均衡等算法。
1.传统OFDM架构的固有局限
传统接收机的结构如下图所示:

其性能高度依赖信道估计的精度:
1.在高速移动、深度衰落或信道延迟扩展远大于CP长度的场景下,信道估计误差会急剧增加,导致均衡模块输出失真;
2.分模块设计的“误差累积效应”明显:信道估计的微小误差会在均衡、解调阶段被放大,最终导致比特错误率BER恶化;
3.算法鲁棒性不足:针对不同信道环境(如城市多径、郊区衰落),需人工调整信道估计、均衡的参数,缺乏自适应能力。
2.FC-DNN OFDM接收机
1.数据生成
随机生成发送比特(作为标签),经QPSK调制、IDFT、加CP后生成OFDM发送信号;
让发送信号通过仿真信道(如 WINNER II模型,模拟多径、延迟、衰落等真实信道特性),并叠加加性白高斯噪声(AWGN),得到接收时域信号(作为DNN输入)。
2.网络结构与训练目标
网络为5层全连接结构,神经元数量依次为256、500、250、120、16(输入层维度对应接收信号的实虚部总长度,输出层对应16位比特);其基本结构如下图所示:

因QPSK调制、64有效子载波共128 bit,需采用8个独立FC-DNN网络,比特输出连接后得到最终输出。隐藏层激活函数为ReLU,最后一层为Sigmoid。
训练目标是最小化网络输出与真实比特的误差,采用最小平方误差损失:

3. 推理阶段——端到端的比特恢复
训练完成后,接收机部署时无需再进行信道估计、均衡等操作,直接执行以下步骤:
步骤1:接收时域信号帧(含导频和数据的OFDM信号,去CP后);
步骤2:将信号输入已训练好的FC-DNN,网络直接输出比特的概率估计(经Sigmoid激活后在[0,1]区间);
步骤3:对输出进行硬判决(如0.5为阈值,大于则判1,否则判0),得到最终的比特估计。
3.MATLAB大致程序结构
%% 1. 系统参数配置
% 基本参数
N_subcarriers = 64; % 子载波数量
N_CP = 16; % 循环前缀长度
mod_order = 2; % QPSK调制(2bit/符号)
N_symbols = 2; % 每帧OFDM符号数(1个导频+1个数据)
N_bits_per_frame = N_subcarriers * mod_order * N_symbols; % 每帧总比特数
SNR_dB = 10; % 信噪比(dB)
N_train = 10000; % 训练样本数
N_test = 1000; % 测试样本数
% 信道参数(WINNER II模型简化版)
channel_model = @(len) rayleighchan(1/100, 3, [0 1e-6 3e-6], [0 -3 -6]); % 多径信道
%% 2. 数据生成:生成训练/测试数据集(发送比特+接收信号)
% 生成训练集
[train_input, train_label] = generate_dataset(N_train, N_subcarriers, N_CP, mod_order, ...
N_symbols, SNR_dB, channel_model);
% 生成测试集
[test_input, test_label] = generate_dataset(N_test, N_subcarriers, N_CP, mod_order, ...
N_symbols, SNR_dB, channel_model);
%% 3. 构建FC-DNN模型(5层全连接网络)
layers = [
featureInputLayer(size(train_input, 2), 'Name', 'input') % 输入层(实部+虚部)
fullyConnectedLayer(256, 'Name', 'fc1') % 第1层全连接
reluLayer('Name', 'relu1')
fullyConnectedLayer(500, 'Name', 'fc2') % 第2层全连接
reluLayer('Name', 'relu2')
fullyConnectedLayer(250, 'Name', 'fc3') % 第3层全连接
reluLayer('Name', 'relu3')
fullyConnectedLayer(120, 'Name', 'fc4') % 第4层全连接
reluLayer('Name', 'relu4')
fullyConnectedLayer(N_bits_per_frame, 'Name', 'fc5') % 输出层(对应比特数)
sigmoidLayer('Name', 'sigmoid') % 输出映射到[0,1]
regressionLayer('Name', 'output') % 回归损失(L2)
];
% 训练选项
options = trainingOptions('adam', ...
'MaxEpochs', 20, ... % 训练轮数
'MiniBatchSize', 128, ... % 批大小
'LearningRate', 1e-3, ... % 学习率
'ValidationData', {test_input, test_label}, ... % 验证集
'ValidationFrequency', 100, ... % 验证频率
'Verbose', true, ... % 显示训练过程
'Plots', 'training-progress'); % 绘制训练曲线
%% 4. 训练FC-DNN模型
net = trainNetwork(train_input, train_label, layers, options);
%% 5. 测试:对比FC-DNN与传统接收机性能
% 用测试集评估FC-DNN接收机
dnn_output = predict(net, test_input);
dnn_bits = round(dnn_output); % 硬判决
dnn_ber = sum(sum(abs(dnn_bits - test_label)))/(N_test * N_bits_per_frame);
% 传统接收机(信道估计+均衡)
traditional_ber = traditional_receiver(test_input, test_label, N_subcarriers, ...
N_CP, mod_order, N_symbols, channel_model);
% 输出结果
fprintf('FC-DNN接收机BER: %.4e\n', dnn_ber);
fprintf('传统接收机BER: %.4e\n', traditional_ber);
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)