📄 ptsv.m
字号:
% Program 2-1
% ptsv.m
% Simulation program to realize PTS with different V to reduct PAPR of OFDM
% programmed by phui
clc;
clear;
close all;
%************************ preparation part *****************************
para=16; % Number of parallel channel to transmit (points)
fftlen=16; % FFT length
nd=1000; % Number of information OFDM symbol for one loop
%papr % Peak-to-Average Power Ratio
nloop=1000; % Number of simulation loops
%************************** main loop part **************************
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;
seldata20=zeros(1,para/2);
seldata21=[seldata(1:para/2),seldata20];
seldata22=[seldata20,seldata(para/2+1:para)];
%******************* Ifft************************
y21=ifft(seldata21); % ifft : built in function
y22=ifft(seldata22); % ifft : built in function
Vloop=2.^V;
B2=zeros(Vloop,V);
for vvv=1:1:Vloop
B2(vvv,:)=2*(rand(1,V)>0.5)-1 ;
ypts=B2(vvv,1)*y21+B2(vvv,2)*y22;
mma2(vvv)=max(abs(ypts).^2);
end
[mmioa2,idx2]=min(mma2);
b2=B2(idx2,:);
b2
yptsV2=b2(1)*y21+b2(2)*y22;
%************************* Sub-block Partition ***************************
V=4;
seldata40=zeros(1,para/4);
seldata41=[seldata(1:para/4),seldata40,seldata40,seldata40];
seldata42=[seldata40,seldata(para/4+1:para/2),seldata40,seldata40];
seldata43=[seldata40,seldata40,seldata(para/2+1:3*para/4),seldata40];
seldata44=[seldata40,seldata40,seldata40,seldata(3*para/4+1:para)];
%************************** Ifft*******************************
y41=ifft(seldata41); % ifft : built in function
y42=ifft(seldata42);
y43=ifft(seldata43);
y44=ifft(seldata44);
Vloop=2.^V;
B4=zeros(Vloop,V);
for vvv=1:1:Vloop
B4(vvv,:)=2*(rand(1,V)>0.5)-1 ;
ypts=B4(vvv,1)*y41+B4(vvv,2)*y42+B4(vvv,3)*y43+B4(vvv,4)*y44;
mma4(vvv)=max(abs(ypts).^2);
end
[mmioa4,idx4]=min(mma4);
b4=B4(idx4,:);
b4
yptsV4=b4(1)*y41+b4(2)*y42+b4(3)*y43+b4(4)*y44;
%************************* Sub-block Partition ***************************
V=8;
seldata80=zeros(1,para/8);
seldata81=[seldata(1:para/8),seldata80,seldata80,seldata80,seldata80,seldata80,seldata80,seldata80];
seldata82=[seldata80,seldata(para/8+1:para/4),seldata80,seldata80,seldata80,seldata80,seldata80,seldata80];
seldata83=[seldata80,seldata80,seldata(para/4+1:3*para/8),seldata80,seldata80,seldata80,seldata80,seldata80];
seldata84=[seldata80,seldata80,seldata80,seldata(3*para/8+1:para/2),seldata80,seldata80,seldata80,seldata80];
seldata85=[seldata80,seldata80,seldata80,seldata80,seldata(para/2+1:5*para/8),seldata80,seldata80,seldata80];
seldata86=[seldata80,seldata80,seldata80,seldata80,seldata80,seldata(5*para/8+1:3*para/4),seldata80,seldata80];
seldata87=[seldata80,seldata80,seldata80,seldata80,seldata80,seldata80,seldata(3*para/4+1:7*para/8),seldata80];
seldata88=[seldata80,seldata80,seldata80,seldata80,seldata80,seldata80,seldata80,seldata(7*para/8+1:para)];
%******************* Ifft************************
y81=ifft(seldata81); % ifft : built in function
y82=ifft(seldata82);
y83=ifft(seldata83);
y84=ifft(seldata84);
y85=ifft(seldata85);
y86=ifft(seldata86);
y87=ifft(seldata87);
y88=ifft(seldata88);
Vloop=2.^V;
B8=zeros(Vloop,V);
for vvv=1:1:Vloop
B8(vvv,:)=2*(rand(1,V)>0.5)-1 ;
ypts=B8(vvv,1)*y81+B8(vvv,2)*y82+B8(vvv,3)*y83+B8(vvv,4)*y84+B8(vvv,5)*y85+B8(vvv,6)*y86+B8(vvv,7)*y87+B8(vvv,8)*y88;
mma8(vvv)=max(abs(ypts).^2);
end
[mmioa8,idx8]=min(mma8);
b8=B8(idx8,:);
b8
yptsV8=b8(1)*y81+b8(2)*y82+b8(3)*y83+b8(4)*y84+b8(5)*y85+b8(6)*y86+b8(7)*y87+b8(8)*y88;
pr(iii)=papr(y);
pr1(iii)=papr(yptsV2);
pr2(iii)=papr(yptsV4);
pr3(iii)=papr(yptsV8);
end
Pprr=ccdf(pr);
Pprr1=ccdf(pr1);
Pprr2=ccdf(pr2);
Pprr3=ccdf(pr3);
papr0_in_dB=2.001:0.001:14;
figure(20);
semilogy(papr0_in_dB,Pprr);hold on;
semilogy(papr0_in_dB,Pprr1,'r');
semilogy(papr0_in_dB,Pprr2,'g--');
semilogy(papr0_in_dB,Pprr3,'m:');
hold off;
axis([2 14 1e-003 1e000]) ;
ylabel('Pr(PAPR>PAPR0)');
xlabel('PAPR0/dB');
title('performance' );
legend('b,primary OFDM','r,PTS V=2','g--,PTS V=4','m:,PTS V=8');
grid;
gtext('V=1');
gtext('V=2');
gtext('V=4');
gtext('V=8');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -