您现在的位置:首页 >> 通信 >> 内容

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

时间:2025/1/25 17:58:49 点击:

  核心提示:0X_075m,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Z56Vm59s

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览


3.算法概述

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

4.部分源码

        % 在数据符号位置插入 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');

0X_075m

---

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168