目录

1.传统OFDM架构的固有局限

2.FC-DNN OFDM接收机

1.数据生成

2.网络结构与训练目标

3. 推理阶段——端到端的比特恢复

3.MATLAB大致程序结构


       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);
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐