126 lines
4.6 KiB
Mathematica
126 lines
4.6 KiB
Mathematica
![]() |
%% PSD Comparison of ADMM1, ADMM2, CFR and seperated OICF
|
|||
|
%%% <EFBFBD><EFBFBD><EFBFBD><EFBFBD>SSPA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱȽ<EFBFBD>
|
|||
|
clc;clear;
|
|||
|
%% System Parameter
|
|||
|
% load system_parameter.mat K1 K2 deltaK2 B N1 N2 G L Finv1 Finv2 F1 F2
|
|||
|
|
|||
|
global X1 X2 x_mixed
|
|||
|
% load Index4CCDF_Comparison.mat Index X1 X2 x_mixed
|
|||
|
|
|||
|
M = 4;
|
|||
|
modu = [0 0 1 1; 0 1 0 1];
|
|||
|
% load CCDF_Comparison_ADMM_P5_5000.mat zmixed_m_A1 zmixed_m_A2
|
|||
|
% load CCDF_Comparison_OICF_P5_5000.mat zmixed_m_O
|
|||
|
% load CCDF_Comparison_ICF_P5_5000.mat zmixed_m_R
|
|||
|
% save PSD_comparison.mat...
|
|||
|
% x_mixed zmixed_m_A1 zmixed_m_A2 zmixed_m_R zmixed_m_O
|
|||
|
% load PSD_comparison.mat...
|
|||
|
% x_mixed zmixed_m_A1 zmixed_m_A2 zmixed_m_R zmixed_m_O
|
|||
|
load(['TXPackets\rx_for_User' num2str(1) '.mat'],'rx'); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
x_mixed = rx;
|
|||
|
symNum = length(x_mixed);
|
|||
|
%% ȡ<EFBFBD><EFBFBD>PAPR<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
[PAPR_dex,MeanPower_Orignal] = calculate_PAPR(x_mixed);
|
|||
|
symNum = 1000;
|
|||
|
for i = 1:symNum
|
|||
|
[a(i),b(i)] = max(PAPR_dex);
|
|||
|
PAPR_dex(b(i)) = 0;
|
|||
|
end
|
|||
|
% b = randi([1 5000],1,symNum);
|
|||
|
x_mixed = x_mixed(:,b);[PAPR_dex,~] = calculate_PAPR(x_mixed);10*log10(mean(PAPR_dex));
|
|||
|
% zmixed_m_A1=zmixed_m_A1(:,b);[PAPR_dex,~] = calculate_PAPR(zmixed_m_A1);10*log10(mean(PAPR_dex))
|
|||
|
% zmixed_m_A2=zmixed_m_A2(:,b);[PAPR_dex,~] = calculate_PAPR(zmixed_m_A2);10*log10(mean(PAPR_dex))
|
|||
|
% zmixed_m_R=zmixed_m_R(:,b); [PAPR_dex,~] = calculate_PAPR(zmixed_m_R);10*log10(mean(PAPR_dex))
|
|||
|
% zmixed_m_O=zmixed_m_O(:,b); [PAPR_dex,~] = calculate_PAPR(zmixed_m_O);10*log10(mean(PAPR_dex))
|
|||
|
%% SSPA Model
|
|||
|
p = 3;IBO = 5;L=4;
|
|||
|
% Original symbol with SSPA
|
|||
|
x_origin_out = SSPA_model(p,IBO,x_mixed);
|
|||
|
[~,MeanPower] = calculate_PAPR(x_origin_out);
|
|||
|
x_origin_out = x_origin_out./sqrt(MeanPower*L);
|
|||
|
% % ADMM1 symbol with SSPA
|
|||
|
% x_A1_out = SSPA_model(p,IBO,zmixed_m_A1);
|
|||
|
% [~,MeanPower] = calculate_PAPR(x_A1_out);
|
|||
|
% x_A1_out = x_A1_out./sqrt(MeanPower*L);
|
|||
|
% % ADMM2 symbol with SSPA
|
|||
|
% x_A2_out = SSPA_model(p,IBO,zmixed_m_A2);
|
|||
|
% [~,MeanPower] = calculate_PAPR(x_A2_out);
|
|||
|
% x_A2_out = x_A2_out./sqrt(MeanPower*L);
|
|||
|
% % CFR symbol with SSPA
|
|||
|
% x_R_out = SSPA_model(p,IBO,zmixed_m_R);
|
|||
|
% [~,MeanPower] = calculate_PAPR(x_R_out);
|
|||
|
% x_R_out = x_R_out./sqrt(MeanPower*L);
|
|||
|
% % OICF symbol with SSPA
|
|||
|
% x_O_out = SSPA_model(p,IBO,zmixed_m_O);
|
|||
|
% [~,MeanPower] = calculate_PAPR(x_O_out);
|
|||
|
% x_O_out = x_O_out./sqrt(MeanPower*L);
|
|||
|
%% PSD plot
|
|||
|
mode = 1; % 1.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>periodogram 2.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2.<EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pwelch
|
|||
|
N = (512+36)*2;shift = -N/8;
|
|||
|
|
|||
|
[pxx,freq] = sprectrum(x_origin_out,mode,N);
|
|||
|
pxx = circshift(pxx,shift);
|
|||
|
plot(freq/pi,10*log10(pxx),'k','LineWidth',1);hold on;grid on
|
|||
|
|
|||
|
% [pxx,freq] = sprectrum(x_A1_out,mode,N);
|
|||
|
% pxx = circshift(pxx,shift);
|
|||
|
% plot(freq/pi,10*log10(pxx),'r','LineWidth',1);
|
|||
|
%
|
|||
|
% [pxx,freq] = sprectrum(x_A2_out,mode,N);
|
|||
|
% pxx = circshift(pxx,shift);
|
|||
|
% plot(freq/pi,10*log10(pxx),'b','LineWidth',1);
|
|||
|
%
|
|||
|
% [pxx,freq] = sprectrum(x_R_out,mode,N);
|
|||
|
% pxx = circshift(pxx,shift);
|
|||
|
% plot(freq/pi,10*log10(pxx),'.-r','LineWidth',1);
|
|||
|
%
|
|||
|
% [pxx,freq] = sprectrum(x_O_out,mode,N);
|
|||
|
% pxx = circshift(pxx,shift);
|
|||
|
% plot(freq/pi,10*log10(pxx),'g','LineWidth',1);
|
|||
|
%
|
|||
|
% xlim([-1 1]);ylim([-38 0.5])
|
|||
|
% legend('Origin','ADMM1','ADMM2','CFR','OICF')
|
|||
|
% xlabel('Normalized Frequency')
|
|||
|
% ylabel('PSD (dB)')
|
|||
|
|
|||
|
%% APPENDIX FUNCTIONS
|
|||
|
function [x_out] = SSPA_model(p,IBO,x)
|
|||
|
[~,Mean_Power] = calculate_PAPR(x);
|
|||
|
% PAPR_out_O = 10*log10(PAPR_dex);
|
|||
|
C = sqrt(Mean_Power)*10^(IBO/20);
|
|||
|
x_out = x./ (1+(abs(x)./C).^(2*p)).^(1/(2*p));
|
|||
|
end
|
|||
|
|
|||
|
function [pxx,freq] = sprectrum(x,mode,N)
|
|||
|
switch mode
|
|||
|
case 1
|
|||
|
[pxx,freq] = periodogram(x *sqrt(2*pi),[],N,'centered');
|
|||
|
case 2
|
|||
|
[pxx,freq] = periodogram(x *sqrt(2*pi),hamming(length(x(:,1))),N,'centered');
|
|||
|
case 3
|
|||
|
[pxx,freq] = pwelch(x *sqrt(2*pi),[],[],N,'centered');
|
|||
|
end
|
|||
|
pxx = mean(pxx,2);
|
|||
|
end
|
|||
|
|
|||
|
function [PAPR_dex,Mean_Power] = calculate_PAPR(x)
|
|||
|
% PAPR_dex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD>Ե<EFBFBD>PAPR
|
|||
|
% Mean_Power <EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Signal_Power = abs(x).^2;
|
|||
|
Peak_Power = max(Signal_Power,[],1); % norm(x,Inf)^2
|
|||
|
Mean_Power = mean(Signal_Power,1); % norm(x,2)^2/(K*IF)
|
|||
|
PAPR_dex = Peak_Power./Mean_Power;
|
|||
|
end
|
|||
|
|
|||
|
function [EVM1,EVM2,EVM3,EVM_sum] = calculate_EVM(s1,s2,s3,symNum)
|
|||
|
% <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD>Ե<EFBFBD>EVM
|
|||
|
global X1 X2_1 X2_2
|
|||
|
EVM1=zeros(1,symNum);EVM2=zeros(1,symNum);EVM3=zeros(1,symNum);EVM_sum=zeros(1,symNum);
|
|||
|
for i = 1:symNum
|
|||
|
EVM1(i) = norm(X1(:,i)-s1(:,i),2)/norm(X1(:,i),2);
|
|||
|
EVM2(i) = norm(X2_1(:,i)-s2(:,i),2)/norm(X2_1(:,i),2);
|
|||
|
EVM3(i) = norm(X2_2(:,i)-s3(:,i),2)/norm(X2_2(:,i),2);
|
|||
|
EVM_sum(i) = EVM1(i) + EVM2(i) + EVM3(i);
|
|||
|
end
|
|||
|
end
|