基于OFDM通信系统的PAPR抑制算法matlab仿真,对比IPTS,OPTS,CEPTS三种算法
1.算法运行效果图预览
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(Po*J)))/ceil(Po*J); 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(-1*F2(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-2*Ps(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