基于DNN深度神经网络的OFDM+QPSK信号检测与误码率matlab仿真

简介: 本内容展示了基于深度神经网络(DNN)的OFDM-QPSK信号检测算法在Matlab2022a中的仿真效果。通过构建包含多层全连接层和ReLU激活函数的DNN模型,结合信号预处理与特征提取,实现了复杂通信环境下的高效信号检测。仿真结果对比了传统LS、MMSE方法与DNN方法在不同信噪比(SNR)条件下的误码率(BER)和符号错误率(SER),验证了DNN方法的优越性能。核心程序涵盖了QPSK调制、导频插入、OFDM发射、信道传输及DNN预测等关键步骤,为现代通信系统提供了可靠的技术支持。

1.算法仿真效果
matlab2022a仿真结果如下(完整代码运行后无水印):

1.jpeg
2.jpeg
3.jpeg
4.jpeg
5.jpeg

仿真操作步骤可参考程序配套的操作视频。

2.算法涉及理论知识概要
在现代通信系统中,高效可靠的信号检测至关重要。正交频分复用(OFDM)技术因其能有效对抗多径衰落、提高频谱效率等优点,被广泛应用于众多通信标准,如 4G、5G 移动通信以及数字视频广播等领域。正交相移键控(QPSK)则是一种常用的数字调制方式,它在有限的带宽内实现了较高的数据传输速率。然而,在复杂的通信环境中,OFDM-QPSK 信号会受到噪声、干扰等因素的影响,传统的信号检测方法在性能上存在一定的局限性。深度神经网络(DNN)以其强大的特征学习和模式识别能力,为 OFDM-QPSK 信号检测提供了新的解决方案,能够有效提升检测性能,适应复杂多变的通信场景。

   DNN 是一种包含多个隐藏层的神经网络,通常由输入层、隐藏层和输出层组成。每一层由多个神经元组成,神经元之间通过权重连接。在基于 DNN 的 OFDM - QPSK 信号检测中,输入层接收经过处理的 OFDM-QPSK 信号特征,隐藏层对这些特征进行逐层提取和变换,输出层则输出检测结果。

信号预处理

a49d4ca61e932b61c4c2d0142e91fd0d_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

DNN模型构建
确定网络的层数、每层的神经元数量、激活函数等参数。例如,对于一个简单的 MLP 模型,可能包含 3个隐藏层,每个隐藏层的神经元数量在 50 - 200 之间,激活函数可以选择 ReLU(Rectified Linear Unit)函数。在本课题中,DNN网络结构如下:

Layers = [
sequenceInputLayer(384,"Name","sequence")
fullyConnectedLayer(500,"Name","fc_1")
reluLayer("Name","relu_1")
fullyConnectedLayer(250,"Name","fc_2")
reluLayer("Name","relu_2")
fullyConnectedLayer(120,"Name","fc_3")
reluLayer("Name","relu_3")
fullyConnectedLayer(16,"Name","fc_4")
regressionLayer("Name","regressionoutput")];

DNN训练与检测
训练数据准备:收集大量的 OFDM - QPSK 信号样本,包括不同信噪比条件下的信号。对这些信号进行预处理和特征提取,得到训练数据。同时,根据信号的调制映射关系,确定每个样本的真实类别标签。

模型训练:使用训练数据对 DNN 模型进行训练,通过反向传播算法调整模型的参数,使得模型的预测结果与真实标签之间的损失函数最小化。在训练过程中,可以采用交叉验证等方法来评估模型的性能,防止过拟合。

信号检测:训练完成后,将接收到的 OFDM - QPSK 信号经过预处理和特征提取后输入到训练好的 DNN 模型中,模型输出预测结果。根据预测结果和调制映射关系,恢复出原始的二进制数据。

3.MATLAB核心程序
``` % 在数据符号位置插入 QPSK 信号
Sym_qpsk = func_QPSKMod(dataSym);
Msg_qpsk = reshape(Sym_qpsk, Nsubs, Nsymb);

    %导频插入
    Xpilot          = 1 - 1j;
    Loc_pilot       = loc_pilot : It_pilot : NFrame;
    Num_pilot_frame = length(Loc_pilot) * Nsubs;

    Loc_data        = 1 : NFrame;
    Loc_data(Loc_pilot(:)) = [];

    dat_ifft        = zeros(NFFT-1,NFrame);

    dat_ifft(:, Loc_pilot(:)) = Xpilot;
    dat_ifft(:, Loc_data(:))  = Msg_qpsk;

    dat_ifft                  = [zeros(1, NFrame); dat_ifft];

    %OFDM发射
    Tx_ofdm                   = func_TOFDM(dat_ifft, NFFT, NCP);

    %Channel
    OFDM_ch                   = (1 / sqrt(2)) * randn(Nsymb2, 1) + (1 / sqrt(2)) * 1j * randn(Nsymb2, 1);
    OFDM_ch_sp                = repmat(OFDM_ch, NFrame, 1);

    Rx_ofdm0                  = OFDM_ch_sp .* Tx_ofdm;
    Rx_ofdm0                  = awgn(Rx_ofdm0,SNR,'measured');
    Hch_ideal                 = Rx_ofdm0 ./ OFDM_ch_sp;

...................................................................
% Deep learning
[Rx_ofdm_feature, ~] = func_ofdm_feature(Rx_ofdm, Msg_qpsk(1:8));
Rx_de_H_dnn = predict(DNN_Trained, Rx_ofdm_feature);
Rx_de_H_dnn2 = Rx_de_H_dnn(1:2:end, :) + 1j * Rx_de_H_dnn(2:2:end, :);
Rx3_de_qpsk = func_QPSKDemod(Rx_de_H_dnn2);
Rx3_de_qpsk2 = de2bi(Rx3_de_qpsk, 2);
Rx_de_qpsk_dnn = reshape(Rx3_de_qpsk2, [], 1);
.................................................
figure;
semilogy(SNRs,ber_ls,'-k<',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.3,0.9,0.3]);
hold on
semilogy(SNRs,ber_mmse,'-bs',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
semilogy(SNRs,ber_dnn,'-r>',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.9,0.0]);
grid on
xlabel('SNR');
ylabel('BER');
legend('LS','MMSE','DNN');

figure;
semilogy(SNRs,ser_ls,'-k<',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.3,0.9,0.3]);
hold on
semilogy(SNRs,ser_mmse,'-bs',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
semilogy(SNRs,ser_dnn,'-r>',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.9,0.0]);
grid on
xlabel('SNR');
ylabel('SER');
legend('LS','MMSE','DNN');
```

相关文章
|
27天前
|
机器学习/深度学习 算法 机器人
【PID】基于人工神经网络的PID控制器,用于更好的系统响应研究(Matlab&Simulink代码实现)
【PID】基于人工神经网络的PID控制器,用于更好的系统响应研究(Matlab&Simulink代码实现)
158 15
|
27天前
|
机器学习/深度学习 算法 机器人
基于Qlearning强化学习的2DoF机械臂运动控制系统matlab仿真
本项目基于Q-learning强化学习算法,实现对二自由度机械臂的运动控制仿真。通过MATLAB 2022a平台,验证了算法在状态、动作与奖励机制下的学习效果,展示了机械臂自主学习达到目标位置的能力。内容涵盖理论模型、算法原理与核心代码实现。
57 7
|
25天前
|
机器学习/深度学习 传感器 运维
【电机轴承监测】基于matlab声神经网络电机轴承监测研究(Matlab代码实现)
【电机轴承监测】基于matlab声神经网络电机轴承监测研究(Matlab代码实现)
|
26天前
|
算法 机器人 定位技术
基于机器视觉和Dijkstra算法的平面建筑群地图路线规划matlab仿真
本程序基于机器视觉与Dijkstra算法,实现平面建筑群地图的路径规划。通过MATLAB 2022A读取地图图像,识别障碍物并进行路径搜索,支持鼠标选择起点与终点,最终显示最优路径及长度,适用于智能导航与机器人路径规划场景。
|
25天前
|
传感器 并行计算 算法
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
113 3
|
25天前
|
机器学习/深度学习 数据采集 算法
【创新无忧】基于白鲨算法WSO优化广义神经网络GRNN电机故障诊断(Matlab代码实现)
【创新无忧】基于白鲨算法WSO优化广义神经网络GRNN电机故障诊断(Matlab代码实现)
|
25天前
|
机器学习/深度学习 编解码 算法
【图像处理】小波编码图像中伪影和纹理的检测(Matlab代码实现)
【图像处理】小波编码图像中伪影和纹理的检测(Matlab代码实现)
|
25天前
|
机器学习/深度学习 并行计算 算法
【图像分割】基于神经气体网络的图像分割与量化(Matlab代码实现)
【图像分割】基于神经气体网络的图像分割与量化(Matlab代码实现)
|
25天前
|
算法 安全 网络安全
【多智能体系统】遭受DoS攻击的网络物理多智能体系统的弹性模型预测控制MPC研究(Simulink仿真实现)
【多智能体系统】遭受DoS攻击的网络物理多智能体系统的弹性模型预测控制MPC研究(Simulink仿真实现)
|
27天前
|
机器学习/深度学习 编解码 算法
对三种雷达信号调制类型的识别及MATLAB实现
对三种雷达信号调制类型的识别及MATLAB实现

热门文章

最新文章