clear all
close all
clc
%Parameter setting
ifftn =128; %子载波数
symbol_length=1e2; %OFDM采样点数
symbol_total=ifftn*symbol_length;
%data producing
mod_object = modem.pskmod(4);
mod_object1 = modem.qammod(16);
%demod_object = modem.pskdemod('2',M, 'SymbolOrder','gray');
msgint=randint(1,symbol_total,2); % bit generation
p = modulate(mod_object,msgint);
p1=modulate(mod_object1,msgint);
p(find(p<0.5))=-1;
p(find(p>0.5))=1;
p1(find(p<0.5))=-1;
p1(find(p>0.5))=1;
k=reshape(p,ifftn,symbol_length);%s/p change 串并转换
k1=reshape(p1,ifftn,symbol_length);
% PARPSK Control SLM
M_n = 4; % 序列数
P = zeros(ifftn,M_n);
for nn = 1:M_n
P_temp = rand(ifftn,1);
for jj=1:ifftn
if P_temp(jj,1) <= 0.25
P_temp(jj,1) = -j;
elseif P_temp(jj,1) <= 0.5 && P_temp(jj,1) > 0.25
P_temp(jj,1) = -1;
elseif P_temp(jj,1) <= 0.75 && P_temp(jj,1) > 0.5
P_temp(jj,1) = 1;
elseif P_temp(jj,1) <= 1 && P_temp(jj,1) > 0.75
P_temp(jj,1) = j;
end
end
P(:,nn) = P_temp;
end
% PARQAM Control SLM
P1 = zeros(ifftn,M_n);
for nn1 = 1:M_n
P_temp1 = rand(ifftn,1);
for jj=1:ifftn
if P_temp1(jj,1) <= 0.25
P_temp1(jj,1) = -j;
elseif P_temp1(jj,1) <= 0.5 && P_temp1(jj,1) > 0.25
P_temp(jj,1) = -1;
elseif P_temp1(jj,1) <= 0.75 && P_temp1(jj,1) > 0.5
P_temp1(jj,1) = 1;
elseif P_temp1(jj,1) <= 1 && P_temp1(jj,1) > 0.75
P_temp1(jj,1) = j;
end
end
P1(:,nn1) = P_temp1;
end
%%
for ii = 1:symbol_length
for mm = 1:M_n
k(:,ii) = k(:,ii).*P(:,mm);
k1(:,ii) = k1(:,ii).*P1(:,mm);
ifft_out(:,ii) = sqrt(ifftn)*ifft(k(:,ii)); %IFFT
ifft_out1(:,ii) = sqrt(ifftn)*ifft(k1(:,ii));
%PAPR
arverage_pwr = ifft_out(:,ii)'*ifft_out(:,ii)/ifftn;
arverage_pwr1 = ifft_out1(:,ii)'*ifft_out1(:,ii)/ifftn;
max_value = max(abs(ifft_out(:,ii)));
max_value1 = max(abs(ifft_out1(:,ii)));
PAPR(1,mm) = max_value^2/arverage_pwr;
PAPR1(1,mm) = max_value1^2/arverage_pwr1;
end
plotPAPR(ii) = 10*log10(min(PAPR));
plotPAPR1(ii) = 10*log10(min(PAPR1));
end
% figure;
% plot(plotPAPR,'-r','linewidth',1.5) ;
% hold on;
% plot(plotPAPR1,'-b','linewidth',1.2);
% legend('psk signal','qam signal','location', 'NorthEast')
% xlabel('采样点');
% ylabel('PAPR');
% grid on
% hold off;
% figure;
CCDF = zeros(1,12);
xx=1:.1:10;
for jj = 1:91
PAR_temp = zeros(1,symbol_length);
PAR_temp(find(plotPAPR >xx( jj))) = 1;
CCDF(jj) = sum(PAR_temp)/symbol_length
end
CCDF2 = zeros(1,12);
for dd = 1:91
PAR_temp1 = zeros(1,symbol_length);
PAR_temp1(find(plotPAPR1 > xx( dd))) = 1;
CCDF2(dd) = sum(PAR_temp1)/symbol_length;
end
semilogy(xx,CCDF,'r-','linewidth',1.5)
hold on;
semilogy(xx,CCDF2,'b-','linewidth',1.5);
xlabel('papr')
ylabel('ccdf')
axis([0 12 10^-3 1])
legend('psk signal','qam signal','location', 'NorthEast')
grid on
% hold off;