基于DNN深度学习网络的OFDM+QPSK信号检测算法matlab仿真

1.算法运行效果图预览


2.算法运行软件版本

matlab2022a



3.算法理论概述

        正交频分复用(OFDM)是一种多载波调制技术,已经广泛应用于数字通信领域。OFDM信号检测是接收端的关键问题之一,目的是将接收到的OFDM信号恢复为原始数据。由于OFDM信号具有高带宽效率、抗多径衰落等特点,可以在高速移动环境下实现高速数据传输。但是,OFDM信号的检测存在一些困难,例如频率偏移、信道估计误差、多路径干扰等。为了解决这些问题,近年来,深度学习技术被广泛应用于OFDM信号检测中。



3.基于DNN的OFDM信号检测模型


基于DNN的OFDM信号检测模型可以表示为:


$$\hat{s}{n,k}=\arg\max{s_{n,k}}P(s_{n,k}|r_{n,k},\theta)$$


       其中,$\hat{s}{n,k}$是预测的数据符号,$r{n,k}$是接收到的OFDM信号,$\theta$是模型参数。该模型可以通过DNN深度学习网络来学习OFDM信号的映射关系,从而实现OFDM信号的检测。


      在实际应用中,需要实现实时OFDM信号检测。这可以通过将训练好的模型部署到实际系统中来实现。在实时检测过程中,需要对接收到的OFDM信号进行预处理,并将其输入到训练好的模型中进行检测。实时检测的实现需要考虑到时间延迟、资源限制等因素。


     基于DNN深度学习网络的OFDM信号检测已广泛应用于数字通信领域。它可以用于解决OFDM信号检测中的一些难题,例如频率偏移、信道估计误差、多路径干扰等。此外,它还可以用于无线电频谱感知、无线电干扰检测等领域。


4.部分核心程序

Transmitted_signal                 =OFDM_Transmitter(data_in_IFFT, NFFT, NCP);



       %信道

       Ray_h_ofdm             = (1 /sqrt(2)) * randn(len_symbol, 1) + (1 / sqrt(2)) * 1j * randn(len_symbol, 1); %Rayleigh channel coff

       Rayleigh_h_channel     =repmat(Ray_h_ofdm, Frame_size, 1);

       Rayleigh_Fading_Signal = awgn(Rayleigh_h_channel .*Transmitted_signal,SNR,'measured');

       signal_ideal           =Rayleigh_Fading_Signal ./ Rayleigh_h_channel;


       Multitap_h = [(randn + 1j * randn);...

                      (randn + 1j * randn) /24] ;


       %卷积通过信道

       Multipath_Signal        =conv(Transmitted_signal, Multitap_h);


       Multipath_Signal        =awgn(Multipath_Signal(1 : length(Transmitted_signal)),SNR,'measured');

       % OFDM接收

       [Rsignals0, Rsignalsh0] = OFDM_Receiver(Multipath_Signal, NFFT, NCP,len_symbol, signal_ideal);


       %进行深度学习部分,使用已训练好的神经网络进行解调

       [DNN_feature_signal, ~, ~] = Extract_Feature_OFDM(Rsignals0,dataSym(1:2), M, QPSK_signal(1:8));

       Received_data_DNN          =predict(DNN_Trained, DNN_feature_signal);

       Received_data_DNN          =transpose(Received_data_DNN);

       DNN_Received_data          =Received_data_DNN(1:2:end, :) + 1j * Received_data_DNN(2:2:end, :);


       DNN_dataSym_Rx             =QPSK_Demodulator(DNN_Received_data);


       DNN_dataSym_Received       =de2bi(DNN_dataSym_Rx, 2);

       DNN_Data_Received          =reshape(DNN_dataSym_Received, [], 1);


       DNN_sym_err(ij, 1)         =sum(sum(round(dataSym(1:8)) ~= round(DNN_dataSym_Rx)));

       DNN_bit_err(ij, 1)         =sum(sum(round(reshape(de2bi(dataSym(1:8), 2),[],1)) ~=round(DNN_Data_Received))); 

   end

   Bers(idx, 1) = sum(DNN_bit_err, 1) / N_bits_DNN; %计算平均比特误码率

   Sers(idx, 1) = sum(DNN_sym_err, 1) / N_QPSK_DNN; %计算平均符号误码率

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容