HE/PSD_plot.m

126 lines
4.6 KiB
Mathematica
Raw Normal View History

2024-03-30 16:35:40 +08:00
%% 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