中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

基于DNN深度神經網絡的OFDM+QPSK信號檢測與誤碼率matlab仿真

1.算法仿真效果

matlab2022a仿真結果如下(完整代碼運行后無水印):

 

 

 

仿真操作步驟可參考程序配套的操作視頻。

 

2.算法涉及理論知識概要

       在現代通信系統中,高效可靠的信號檢測至關重要。正交頻分復用(OFDM)技術因其能有效對抗多徑衰落、提高頻譜效率等優點,被廣泛應用于眾多通信標準,如 4G、5G 移動通信以及數字視頻廣播等領域。正交相移鍵控(QPSK)則是一種常用的數字調制方式,它在有限的帶寬內實現了較高的數據傳輸速率。然而,在復雜的通信環境中,OFDM-QPSK 信號會受到噪聲、干擾等因素的影響,傳統的信號檢測方法在性能上存在一定的局限性。深度神經網絡(DNN)以其強大的特征學習和模式識別能力,為 OFDM-QPSK 信號檢測提供了新的解決方案,能夠有效提升檢測性能,適應復雜多變的通信場景。

 

       DNN 是一種包含多個隱藏層的神經網絡,通常由輸入層、隱藏層和輸出層組成。每一層由多個神經元組成,神經元之間通過權重連接。在基于 DNN 的 OFDM - QPSK 信號檢測中,輸入層接收經過處理的 OFDM-QPSK 信號特征,隱藏層對這些特征進行逐層提取和變換,輸出層則輸出檢測結果。

 

信號預處理

 

 

 

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

  

posted @ 2025-06-12 16:25  我愛C編程  閱讀(20)  評論(0)    收藏  舉報