基于OFDM通信系统的PAPR抑制算法matlab仿真,对比IPTS,OPTS,CEPTS三种算法

174 阅读3分钟

1.算法运行效果图预览

 

1f262b9823d60a6e82ebc8ad4bcd1de5_82780907_202401031331140643492818_Expires=1704260474&Signature=xWQX6aivOKz6r3CjS41Ni%2FJrwaw%3D&domain=8.png

2.算法运行软件版本

matlab2022a

 

3.算法理论概述

         基于OFDM通信系统的PAPR抑制算法是降低OFDM信号峰均比(Peak-to-Average Power Ratio,PAPR)的技术,以提高通信系统的性能和稳定性。其中,IPTS(选择性映射迭代削峰)、OPTS(优化的PTS)和CEPTS(压缩扩展变换选择性映射)是三种常见的PAPR抑制算法。下面将详细介绍这三种算法的原理和数学公式。

 

3.1、IPTS算法

        IPTS算法是一种基于选择性映射迭代削峰的方法,通过迭代削峰和选择性映射,降低OFDM信号的PAPR。具体步骤如下:

 

对OFDM信号进行IFFT变换,得到时域信号。

对时域信号进行削峰处理,将峰值超过一定阈值的信号进行削减。

对削减后的信号进行IFFT变换,得到新的频域信号。

通过选择性映射,选择PAPR最低的频域信号作为输出信号。

3.2、OPTS算法

       OPTS算法是一种基于优化的PTS方法,通过将OFDM信号分成多个子块,对每个子块进行相位旋转和幅度调整,以降低PAPR。具体步骤如下:

 

将OFDM信号分成多个子块。

对每个子块进行相位旋转和幅度调整,使得子块的PAPR最低。

将调整后的子块重新组合成完整的OFDM信号。

3.3、CEPTS算法

        CEPTS算法是一种基于压缩扩展变换选择性映射的方法,通过对OFDM信号进行压缩扩展变换和选择性映射,降低PAPR。具体步骤如下:

 

对OFDM信号进行压缩扩展变换,得到多个变换后的信号。

对每个变换后的信号进行PAPR计算,选择PAPR最低的信号作为输出信号。

将选择的信号进行逆变换,得到最终的OFDM信号。

         综上所述,IPTS、OPTS和CEPTS算法都是通过不同的方式对OFDM信号进行处理,以降低PAPR,提高通信系统的性能和稳定性。具体选择哪种算法需要根据实际应用场景和性能需求来决定。

 

 

 

 

4.部分核心程序 `for k=1:Nframes

    if mod(k,10) == 0

       k/10

    end

    %产生数据源

    QPSK_Ind     = floor(length(Map_qpsk)*rand(1,Nfft)) + 1;

    %调制,这里为了研究PAPR性能,所以不加入编码模块和交织模块

    Qpsk_mod     = Map_qpsk(QPSK_Ind(1,:));  

    %进行IFFT变换

    Dat_Ifft     = ifft(Qpsk_mod,[],2);

    %计算功率和PAPR

    Signal_Power = abs(Dat_Ifft.^2);

    Peak_Power   = max(Signal_Power,[],2);

    Mean_Power   = mean(Signal_Power,2);

    PAPRo(k)     = 10*log10(Peak_Power./Mean_Power);

    %随机分块

    QPSK_Ind     = randperm(Nfft);

    A            = zeros(Npts,Nfft);

    for v=1:Npts

        A(v,QPSK_Ind(v:Npts:Nfft)) = Qpsk_mod(QPSK_Ind(v:Npts:Nfft));

    end

    a            = ifft(A,[],2);

    %限幅

    Tho          = mean2(abs(a));

    [rr,cc] = size(a);

    for i = 1:rr

        for j = 1:cc

            if abs(a(i,j)) > Tho

               a(i,j) = Tho*(real(a(i,j)) + ij*imag(a(i,j)))/abs(a(i,j));

            end

        end

    end

    %PCME算法

    P0   = 0.5*ones(1,Npts);%初始概率为0.5

    Ps   = zeros(Iter,Npts);

    P    = zeros(Iter,Npts);

    for iter = 1:Iter

        %根据随机分布,产生一组序列c

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

       

        for j = 1:J

            Phase_Factor = repmat(1-2*c(j,:)',1,Nfft); 

            aa           = sum(a.*Phase_Factor);

            Signal_Power = abs(aa.^2);

            Peak_Power   = max(Signal_Power,[],2);

            Mean_Power   = mean(Signal_Power,2);

            F(j)         = 10*log10(Peak_Power./Mean_Power);

        end

       

        %对当前迭代产生的J个F进行增序排序

        [F2,IND]      = sort(F);

        %计算rj

        r(iter)   = sum(F2(1:ceil(PoJ)))/ceil(PoJ);

        IND2      = find(F <= r(iter));

       

        if isempty(IND2) == 1

           IND2 = 1;

        else

           IND2 = IND2; 

        end

       

        for pp = 1:Npts

           

            for s1 = 1:J

                I(pp,s1) = c(IND(s1),pp);

                tmp11s(s1) = I(pp,s1)exp(-1F2(s1));

                tmp12s(s1) = exp(-1*F2(s1));

            end

            P(iter,pp) =  sum(tmp11s)/sum(tmp12s);

        end       

        %更新概率P

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

    end

    %根据PMCE计算得到的相位因子来计算PAPR值

    aa                = sum(a.repmat(sign((1-2Ps(iter,:)))',1,Nfft));

    Signal_Power      = abs(aa.^2);

    Peak_Power_temp   = max(Signal_Power,[],2);

    Mean_Power_temp   = mean(Signal_Power,2);

    PAPR_temp(k)      = 10*log10(Peak_Power_temp./Mean_Power_temp);

end`