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

基于DNN深度学习网络的OFDM信号检测算法的仿真,对比LS和MMSE

时间:2023/1/20 21:05:23 点击:

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

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

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

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

点击店铺

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

2.部分仿真图预览



3.算法概述

         信道估计器是接收机一个很重要的组成部分。在OFDM系统中,信道估计器的设计上要有两个问题:一是导频信息的选择,由于无线信道的时变特性,需要接收机不断对信道进行跟踪,因此导频信息也必须不断的传送: 二是既有较低的复杂度又有良好的导频跟踪能力的信道估计器的设计,在确定导频发送方式和信道估计准则条件下,寻找最佳的信道估计器结构。 **在实际设计中,导频信息的选择和最佳估计器的设计通常又是相互关联的,因为估计器的性能与导频信息的传输方式有关。正交频分复用(orthogonalfrequencydivisionmultiplexing,ofdm)调制因其频带利用率高、抗频率选择性衰落的性能在通信系统中得到了广泛的应用,但ofdm解调对信道估计、时频偏估计、采样起始时刻偏差的估计精度要求很高,尤其是当使用高阶调制时,这一问题更为明显。信道估计和均衡是ofdm系统设计中的关键技术之一,通常ofdm系统的信道估计方法分为非盲信道估计方法和盲信道估计方法。非盲信道估计方法通常采用插入训练序列的方式或者插入导频的方式,盲信道估计方法则是在接收端采用相应的信号处理技术来获得信道时域或频域响应的估计值,有基于判决反馈的估计方法和基于相位的信道估计方法。

4.部分源码

..............................................................

for i = 1:NumIter

    for snr = 1:length(NoiseVar)

        [i,snr]

        % 1. Testing data generation

        noiseVar = NoiseVar(snr);   

        % OFDM pilot symbol (can be interleaved with random data symbols)

        PilotSym = 1/sqrt(2)*complex(sign(rand(NumPilotSym,NumSC,NumPacket)-0.5),sign(rand(NumPilotSym,NumSC,NumPacket)-0.5)); 

        PilotSym(1:PilotSpacing:end) = FixedPilotAll;

        % OFDM data symbol

        DataSym = 1/sqrt(2)*complex(sign(rand(NumDataSym,NumSC,NumPacket)-0.5),sign(rand(NumDataSym,NumSC,NumPacket)-0.5)); 

        % Transmitted OFDM frame

        TransmittedPacket = [PilotSym;DataSym];

        % Received OFDM frame

        ReceivedPacket = genTransmissionReceptionOFDM(TransmittedPacket,LengthCP,h,noiseVar);

        

        % Collect the data labels for the selected subcarrier

        DataLabel = zeros(size(DataSym(:,idxSC,:)));

        for c = 1:NumClass

            DataLabel(logical(DataSym(:,idxSC,:) == 1/sqrt(2)*Mod_Constellation(c))) = Label(c);

        end

        DataLabel = squeeze(DataLabel); 

        % Testing data collection

        XTest = cell(NumPacket,1);

        YTest = zeros(NumPacket,1);       

        for c = 1:NumClass

            [feature,label,idx] = getFeatureAndLabel(real(ReceivedPacket),imag(ReceivedPacket),DataLabel,Label(c));

            featureVec = mat2cell(feature,size(feature,1),ones(1,size(feature,2))); 

            XTest(idx) = featureVec;

            YTest(idx) = label;

        end

        YTest = categorical(YTest);

        %% 2. DL detection

        YPred = classify(Net,XTest,'MiniBatchSize',MiniBatchSize);

        SER_DL(snr,i) = 1-sum(YPred == YTest)/NumPacket;

        % 3. LS & MMSE detection

        % Channel estimation

        wrapper = @(x,y) performChanEstimation(x,y,RHH,noiseVar,NumPilot,NumSC,NumPath,idxSC);

        ReceivedPilot = mat2cell(ReceivedPacket(1,:,:),1,NumSC,ones(1,NumPacket));

        PilotSeq = mat2cell(FixedPilotAll,1,NumPilot,ones(1,NumPacket));

        [EstChanLS,EstChanMMSE] = cellfun(wrapper,ReceivedPilot,PilotSeq,'UniformOutput',false);

        EstChanLS = cell2mat(squeeze(EstChanLS));

        EstChanMMSE = cell2mat(squeeze(EstChanMMSE));

        % Symbol detection

        SER_LS(snr,i) = getSymbolDetection(ReceivedPacket(2,idxSC,:),EstChanLS,Mod_Constellation,Label,DataLabel);

        SER_MMSE(snr,i) = getSymbolDetection(ReceivedPacket(2,idxSC,:),EstChanMMSE,Mod_Constellation,Label,DataLabel);

    end

end

a265

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