m基于深度学习的QPSK调制解调系统频偏估计和补偿算法matlab仿真

130 阅读3分钟

1.算法仿真效果

matlab2022a仿真结果如下:

1.jpeg

2.jpeg

3.jpeg

4.jpeg

5.jpeg  

2.算法涉及理论知识概要

        基于深度学习的QPSK调制解调系统频偏估计和补偿算法,是一种利用神经网络模型对无线通信中出现的载波频率偏移进行实时、精确估计并实施有效补偿的技术。QPSK(Quadrature Phase Shift Keying)是一种常用的数字调制方式,它通过改变正交载波的相位来传输二进制信息。在实际通信环境中,由于发射机和接收机之间的硬件差异、环境因素等影响,接收信号往往会发生频率偏移(Frequency Offset, FO),导致解调错误。

 

      QPSK调制将每两位二进制信息映射到四个可能的相位状态之一,其相位角为{0,π/2,π,3π/2},对应的复数表示为{1,i,−1,−i}。调制公式为:

 

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

 

      解调通常采用相干解调,即对接收信号与本地恢复的同频同相载波进行乘法器(Multiplier)运算,然后通过低通滤波器(LPF)提取出包络信息,进行判决。理想情况下,无频偏时解调输出与原始二进制信息一致。

 

        基于深度学习的频偏估计和补偿算法通常采用神经网络模型,如卷积神经网络(CNN)或循环神经网络(RNN),对输入的接收信号片段进行分析,输出估计的频偏值。模型设计的关键要素包括:

 

输入预处理:将接收信号转换为适合神经网络处理的形式,如IQ样本序列、时频谱图等。

 

网络结构:设计适当的网络层数、类型(如卷积层、全连接层、循环层等)和参数(如滤波器大小、步长、激活函数等),以捕获频偏相关特征。

 

损失函数:选择合适的损失函数(如均方误差、均方根误差、Huber loss等)衡量网络输出与真实频偏之间的差距,指导网络训练。

 

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

 

优化算法:使用梯度下降法、Adam、RMSprop等优化算法更新网络权重,最小化损失函数。

 

3.MATLAB核心程序 `K            = 2;               %调制阶数

SNR          = [0:2:30];            %信噪比范围0~30

OFFSET       = 6;%频偏范围0~10Hz

LEN          = 1000;

Fs           = 1e4;

t            = [1:LEN/K]/Fs;

 

for i = 1:length(SNR)

    i

    for j = 1:10

        [i,j]

        %产生信号

        signal                  = round(rand(1,LEN));

        signal_modulated1       = Modulator(signal,K);        

        signal_receive1         = awgn(signal_modulated1,SNR(i),'measured');

        signal_receive2         = signal_receive1.exp(sqrt(-1)2piOFFSET*t );

        

        

        offset2   = func_phase_est_dnn(signal_receive2);%基于深度学习的相位估计

        

        RR        = signal_receive2.exp(-sqrt(-1)2pimean2(offset2)*t);

        %加相位补偿

        output    = DeModulator(RR,K);

        

        msgr      = ones(size(output));

        idx       = find(output<=0);

        msgr(idx) = 0;

        

        len         = length(find(signal==msgr));

        errrate(i,j)= 1-len/length(signal);

        %没有相位补偿

        output2     = DeModulator(signal_receive2,K);

        

        msgr2       = ones(size(output2));

        idx2        = find(output2<=0);

        msgr2(idx2) = 0;

        

        len2      = length(find(signal==msgr2));

        errrate2(i,j)= 1-len2/length(signal);

 

    end

end

 

figure;

semilogy(SNR,mean(errrate2,2),'b-o');

hold on

semilogy(SNR,mean(errrate,2),'r-s');

grid on

xlabel('SNR');

ylabel('误码率');

legend('QPSK无频偏补偿误码率','QPSK频偏补偿误码率');`