📄 slmvspts.m
字号:
% Program 2-4
% slmvspts.m
% Simulation program to realize SLM and PTS to reduct PAPR of OFDM
% programmed by phui
clc;
clear;
close all;
%********************** preparation part ***************************
para=32; % Number of parallel channel to transmit (points)
fftlen=32; % FFT length
%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);
Vloop=2.^V;
B2=zeros(Vloop,V);
for vvv=1:1:Vloop
a=rand(1,V);
B2(vvv,:)=(a<0.25)+j*(a>=0.25).*(a<0.5)-(a>=0.5).*(a<0.75)-j*(a>=0.75);
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
a=rand(1,V);
B4(vvv,:)=(a<0.25)+j*(a>=0.25).*(a<0.5)-(a>=0.5).*(a<0.75)-j*(a>=0.75);
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;
M=2;
Phase2=zeros(M,para);
Yslm2=zeros(M,para);
Seldata2=zeros(M,para);
for mmm=1:M
a=rand(1,para);
Phase2(mmm,:)=(a<0.25)+j*(a>=0.25).*(a<0.5)-(a>=0.5).*(a<0.75)-j*(a>=0.75);
Seldata2(mmm,:)=seldata.*Phase2(mmm,:);
Yslm2(mmm,:)=ifft(Seldata2(mmm,:)); % ifft : built in function
mmam2(mmm)=max(abs(Yslm2(mmm,:)).^2);
end
[mmioam2,idxm2]=min(mmam2);
P2=Phase2(idxm2,:);
P2;
yslm2=Yslm2(mmm,:);
M=4;
Phase4=zeros(M,para);
Yslm4=zeros(M,para);
Seldata4=zeros(M,para);
for mmm=1:M
a=rand(1,para);
Phase4(mmm,:)=(a<0.25)+j*(a>=0.25).*(a<0.5)-(a>=0.5).*(a<0.75)-j*(a>=0.75);
Seldata4(mmm,:)=seldata.*Phase4(mmm,:);
Ysl4(mmm,:)=ifft(Seldata4(mmm,:)); % ifft : built in function
mmam4(mmm)=max(abs(Yslm4(mmm,:)).^2);
end
[mmioam4,idxm4]=min(mmam4);
P4=Phase4(idxm4,:);
P4;
yslm4=Yslm4(mmm,:);
pr(iii)=papr(y);
pr1(iii)=papr(yptsV2);
pr2(iii)=papr(yptsV4);
pr3(iii)=papr(yslm2);
pr4(iii)=papr(yslm4);
warning off MATLAB:divideByZero;
end
Pprr=ccdf(pr);
Pprr1=ccdf(pr1);
Pprr2=ccdf(pr2);
Pprr3=ccdf(pr3);
Pprr4=ccdf(pr4);
papr0_in_dB=2.001:0.001:14;
figure(20);
semilogy(papr0_in_dB,Pprr,'k-.');hold on;
semilogy(papr0_in_dB,Pprr1,'r');
semilogy(papr0_in_dB,Pprr2,'g');
semilogy(papr0_in_dB,Pprr3,'m--');
semilogy(papr0_in_dB,Pprr4,'c--');
hold off;
axis([2 14 1e-003 1e000]) ;
ylabel('Pr(PAPR>PAPR0)');
xlabel('PAPR0/dB');
title('performance' );
legend('k-.,primary OFDM','r,PTS V=2','g,PTS V=4','m--,SLM M=2 ','c--,SLM M=4');
grid;
gtext('primary OFDM');
gtext('V=2');
gtext('V=4');
gtext('M=2');
gtext('M=4');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -