下边是SLM算法的代码
需要用最小PAPR的那组时域信号,怎么求
K = 1024; % SIZE OF fft
N = 8; % NUMBER OF SELECTIONS
QPSK_Set = [1 -1 1i -1i];
Phase_Set = [1 -1];
MAX_SYMBOLS = 1e4;
PAR_Orignal = zeros(1,MAX_SYMBOLS);
PAR_SLM = zeros(3,MAX_SYMBOLS);
X = zeros(N,K);
Index = zeros(N,K);
for nSymbol=1:MAX_SYMBOLS
%Index(1,:) = randint(1,K,length(QPSK_Set))+1;
%Index(2:N,:) = randint(N-1,K,length(Phase_Set))+1;
Index(1,:) = randi([0,length(QPSK_Set)-1],1,K)+1;
Index(2:N,:) = randi([0,length(Phase_Set)-1],N-1,K)+1;
X(1,:)=QPSK_Set(Index(1,:)); % Orignal Frequency domain signal
Phase_Rot = Phase_Set(Index(2:N,:));
X(2:N,:)=repmat(X(1,:),N-1,1).*Phase_Rot; % Phase roated Frequency domain signal
x=ifft(X,[],2); % Time domain signal
Signal_Power = abs(x.^2);
Peak_Power = max(Signal_Power,[],2);
Mean_Power = mean(Signal_Power,2);
PAR_temp = 10*log10(Peak_Power./Mean_Power);
PAR_Orignal(nSymbol) = PAR_temp(1);
PAR_SLM(1,nSymbol) = min(PAR_temp(1:2));
PAR_SLM(2,nSymbol) = min(PAR_temp(1:4));
PAR_SLM(3,nSymbol) =min(PAR_temp(1:8));
end
[cdf1, PAR1] = ecdf(PAR_Orignal);
[cdf2, PAR2] = ecdf(PAR_SLM(1,:));
[cdf3, PAR3] = ecdf(PAR_SLM(2,:));
[cdf4, PAR4] = ecdf(PAR_SLM(3,:));
semilogy(PAR1,1-cdf1,'-k',PAR2,1-cdf2,'-r',PAR3,1-cdf3,'-b',PAR4,1-cdf4,'-m')
legend('Orignal (N=1)','SLM (N=2)', 'SLM (N=4)', 'SLM (N=8)')
xlabel('PAR0 [dB]');
ylabel('CCDF (Pr[PAR>PAR0])');
grid on