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

1.算法运行效果图预览

2.算法运行软件版本
matlab2022a

3.算法理论概述

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

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

3.3、CEPTS算法
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)) + ijimag(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



|
14小时前
|

3 0
|
1天前

7 2
|
1天前
|

7 2
|
2天前
|

15 1
|
2天前
|

9 1
|
28天前
|

23 0
|
28天前
|

24 1
|
28天前

75 1
|
28天前
|

43 0
|
28天前
|

25 1