% Program 2-3
% ptsn.m
% Simulation program to realize PTS with different N to reduct PAPR of OFDM
% programmed by phui
clc;
clear;
close all;
%********************** preparation part ***************************
V=2;
N=[16 32 64]; % Number of parallel channel to transmit (points)
%papr % Peak-to-Average Power Ratio
nloop=1000; % Number of simulation loops
%************************** main loop part **************************
para=16;
for iii=1:nloop
%************************** Data generation ****************************
x=rand(1,para)>0.5;
%**************************** BPSK demode ****************************
seldata=x.*2-1;
%******************************** IFFT ********************************
y=ifft(seldata);
%*********************** Sub-block Partition ***************************
V=2;
seldata0=zeros(1,para/2);
seldata1=[seldata(1:para/2),seldata0];
seldata2=[seldata0,seldata(para/2+1:para)];
%******************* Ifft************************
y1=ifft(seldata1); % ifft : built in function
y2=ifft(seldata2);
Vloop=2.^V;
B=zeros(Vloop,V);
for vvv=1:1:Vloop
a=rand(1,V);
B(vvv,:)=2*(a>0.5)-1 ;
ypts=B(vvv,1)*y1+B(vvv,2)*y2;
mma(vvv)=max(abs(ypts).^2);
end
[mmioa,idx]=min(mma);
b=B(idx,:);
b
yptsN=b(1)*y1+b(2)*y2;
pr10(iii)=papr(y);
pr11(iii)=papr(yptsN);
end
Pprr10=ccdf(pr10);
Pprr11=ccdf(pr11);
para=32;
for iii=1:nloop
%************************** Data generation ****************************
x=rand(1,para)>0.5;
%**************************** BPSK demode ****************************
seldata=x.*2-1;
%******************************** IFFT ********************************
y=ifft(seldata);
%*********************** Sub-block Partition ***************************
V=2;
seldata0=zeros(1,para/2);
seldata1=[seldata(1:para/2),seldata0];
seldata2=[seldata0,seldata(para/2+1:para)];
%******************* Ifft************************
y1=ifft(seldata1); % ifft : built in function
y2=ifft(seldata2);
Vloop=2.^V;
B=zeros(Vloop,V);
for vvv=1:1:Vloop
a=rand(1,V);
B(vvv,:)=2*(a>0.5)-1 ;
ypts=B(vvv,1)*y1+B(vvv,2)*y2;
mma(vvv)=max(abs(ypts).^2);
end
[mmioa,idx]=min(mma);
b=B(idx,:);
b
yptsN=b(1)*y1+b(2)*y2;
pr20(iii)=papr(y);
pr21(iii)=papr(yptsN);
end
Pprr20=ccdf(pr20);
Pprr21=ccdf(pr21);
para=64;
for iii=1:nloop
%************************** Data generation ****************************
x=rand(1,para)>0.5;
%**************************** BPSK demode ****************************
seldata=x.*2-1;
%******************************** IFFT ********************************
y=ifft(seldata);
%*********************** Sub-block Partition ***************************
V=2;
seldata0=zeros(1,para/2);
seldata1=[seldata(1:para/2),seldata0];
seldata2=[seldata0,seldata(para/2+1:para)];
%******************* Ifft************************
y1=ifft(seldata1); % ifft : built in function
y2=ifft(seldata2);
Vloop=2.^V;
B=zeros(Vloop,V);
for vvv=1:1:Vloop
a=rand(1,V);
B(vvv,:)=2*(a>0.5)-1 ;
ypts=B(vvv,1)*y1+B(vvv,2)*y2;
mma(vvv)=max(abs(ypts).^2);
end
[mmioa,idx]=min(mma);
b=B(idx,:);
b
yptsN=b(1)*y1+b(2)*y2;
pr30(iii)=papr(y);
pr31(iii)=papr(yptsN);
end
Pprr30=ccdf(pr30);
Pprr31=ccdf(pr31);
papr0_in_dB=2.001:0.001:14;
figure(20);
semilogy(papr0_in_dB,Pprr10);hold on;
semilogy(papr0_in_dB,Pprr11,'r');
semilogy(papr0_in_dB,Pprr20,'g--');
semilogy(papr0_in_dB,Pprr21,'c');
semilogy(papr0_in_dB,Pprr30,'m');
semilogy(papr0_in_dB,Pprr31,'y:');
hold off;
axis([6 12 1e-003 1e000]) ;
ylabel('Pr(PAPR>PAPR0)');
xlabel('PAPR0/dB');
title('performance' );
legend('b,primary N=16','r,V=2 N=16','g--,primary N=32','c,V=2 N=32','m,primary N=64','y:,V=2 N=64');
grid;
gtext('N=16');
gtext('V=2 N=16');
gtext('N=32');
gtext('V=2 N=32');
gtext('N=64');
gtext('V=2 N=64');
评论4