PAPR抑制算法对IPTS,OPTS,CE,PMCE等常见的PAPR抑制算法进行仿真分析
Posted fpga&matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAPR抑制算法对IPTS,OPTS,CE,PMCE等常见的PAPR抑制算法进行仿真分析相关的知识,希望对你有一定的参考价值。
1.软件版本
matlab2017b
2.本算法理论知识
《减少OFDM系统的峰均功率比的研究》
3.部分源码
clc;
clear;
close all;
warning off;
RandStream.setDefaultStream(RandStream('mt19937ar','seed',1));
%FFT变换长度
Npts = 8;
Nfft = 256;
ij = sqrt(-1);
Map_qpsk = [1 -1 ij -ij];
Init_Phase = [1 -1];
Nframes = 10000;
PAPRo = zeros(1,Nframes);
load_data;
Phase_length = 2^Npts;
PAPR_pts = zeros(1,Nframes);
Po = 0.1;%稀有参数
alpha = 0.7;%平滑参数
Iter = 20; %迭代次数,上交博士论文中有提到设置固定的迭代次数简化算法
J = 10;%每次随机产生J个采样集合cJ
Out = 0;%lemda估计值的输出
for k=1:Nframes
if mod(k,10) == 0
k/10
end
%产生数据源
QPSK_Ind = randint(1,Nfft,length(Map_qpsk)) + 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
if iter == 1
for pp=1:Npts
c(:,pp) = random('Binomial',1,P0(pp),J,1);%第一次迭代的时候,就用0.5来处理
end
else
for pp=1:Npts
c(:,pp) = random('Binomial',1,Ps(iter-1,pp),J,1);%第一次迭代的时候,就用0.5来处理
end
end
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
if iter == 1
Ps(iter,:) = P0;
else
Ps(iter,:) = alpha * P(iter,:) + (1-alpha) * P(iter-1,:);
if sum(Ps(iter,:)) == round(sum(Ps(iter,:)));
break;
end
end
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
[cdf,PAPR] = ecdf(PAPR_temp);
figure;
semilogy(PAPR,1-cdf,'b','LineWidth',2);
xlabel('PAPR0[dB]');
ylabel('CCDF (Pr[PAPR>PAPR0])');
title('CEPTS的时候的系统CCDF图');
grid on;
axis([5,12,1e-4,1]);
save CEPTS.mat PAPR cdf
4.仿真结论
5.参考文献
[1]王亚军. 减少OFDM系统的峰均功率比的研究[D]. 上海交通大学.A01-62
以上是关于PAPR抑制算法对IPTS,OPTS,CE,PMCE等常见的PAPR抑制算法进行仿真分析的主要内容,如果未能解决你的问题,请参考以下文章
基于PSO优化的OFDM系统PAPR抑制PTS算法MATLAB仿真
基于OFDM通信系统的PAPR抑制算法matlab仿真,对比OFDMA,LFDMA,IFDMA三种不同调制方式
基于参数化最小互熵(Parametric Minimum Cross Entropy,PMCE)算法的PAPR抑制matlab仿真