📄 ptsslmcomparision.m
字号:
clear; close all;
K=8; % 用户数
M=32; % 每个用户bit数
L=8; % 扩频增益
V=4;
U=4;
KK=1e3;
PAPR_Orignal=zeros(1,KK);
PAPR_PTS1=zeros(1,KK);
PAPR_PTS2=zeros(1,KK);
PAPR_SLM=zeros(1,KK);
for kk=1:1:KK
userdata=round(rand(K,M)); % 生成数据
lp=find(userdata<1);
userdata(lp)=-1;
% 生成walsh码
walsh=hadamard(L);
% 扩频
afterspreading=zeros(K,M*L);
for k=1:1:K
afterspreading(k,:)=kron(userdata(k,:),walsh(k,:));
end
% 复合
X=zeros(1,M*L);
X=sum(afterspreading);
% ifft
signal=ifft(X,M*L);
power=(abs(signal)).^2;
peak=max(power);
average=mean(power);
PAPR_Orignal(kk)=10*log10(peak/average);
% PTS
N=length(X);
A=zeros(V,N);
for v=1:1:V
A(v,v:V:N)=X(v:V:N);
end
a=zeros(V,N);
a=ifft(A,[],2);
% 系数最优化
b=ones(1,V);
symbol=zeros(V,N);
clear v;
for v=1:1:V
symbol(v,:)=a(v,:)*b(v);
end
x=sum(symbol);
power=(abs(x)).^2;
peak=max(power);
average=mean(power);
PAPR0(kk)=10*log10(peak/average);
index=1;
while index<V+1
b(index)=-1;
clear v;
for v=1:1:V
symbol(v,:)=a(v,:)*b(v);
end
x=sum(symbol);
power=(abs(x)).^2;
peak=max(power);
average=mean(power);
PAPR(kk)=10*log10(peak/average);
if PAPR(kk)>PAPR0(kk)
b(index)=1;
else
PAPR0(kk)=PAPR(kk);
end
index=index+1;
end
% 计算PTS方法的PAPR
clear v;
for v=1:1:V
symbol(v,:)=a(v,:)*b(v);
end
x=sum(symbol);
power=(abs(x)).^2;
peak=max(power);
average=mean(power);
PAPR_PTS1(kk)=10*log10(peak/average);
% PTS
N=length(X);
A=zeros(V,N);
for v=1:1:V
A(v,(N/V)*(v-1)+1:(N/V)*v)=X((N/V)*(v-1)+1:(N/V)*v)
end
a=zeros(V,N);
a=ifft(A,[],2);
% 系数最优化
b=ones(1,V);
symbol=zeros(V,N);
clear v;
for v=1:1:V
symbol(v,:)=a(v,:)*b(v);
end
x=sum(symbol);
power=(abs(x)).^2;
peak=max(power);
average=mean(power);
PAPR0(kk)=10*log10(peak/average);
index=1;
while index<V+1
b(index)=-1;
clear v;
for v=1:1:V
symbol(v,:)=a(v,:)*b(v);
end
x=sum(symbol);
power=(abs(x)).^2;
peak=max(power);
average=mean(power);
PAPR(kk)=10*log10(peak/average);
if PAPR(kk)>PAPR0(kk)
b(index)=1;
else
PAPR0(kk)=PAPR(kk);
end
index=index+1;
end
% 计算PTS方法的PAPR
clear v;
for v=1:1:V
symbol(v,:)=a(v,:)*b(v);
end
x=sum(symbol);
power=(abs(x)).^2;
peak=max(power);
average=mean(power);
PAPR_PTS2(kk)=10*log10(peak/average);
% SLM
Phase_sequence=round(rand(U,N));
symbol=zeros(U,N);
for u=1:1:U
symbol(u,:)=Phase_sequence(u,:).*X;
end
SLM_signal=zeros(U,N);
clear u;
for u=1:1:U
SLM_signal(u,:)=ifft(symbol(u,:),N);
end
SLM_power=(abs(SLM_signal)).^2;
SLM_peak=max(SLM_power');
SLM_average=mean(SLM_power');
SLM_PAPR=10*log10(SLM_peak./SLM_average);
PAPR_SLM(kk)=min(SLM_PAPR);
end
% CCDF
[cdf1,PAPR1]=ecdf(PAPR_Orignal);
[cdf2,PAPR2]=ecdf(PAPR_PTS1);
[cdf3,PAPR3]=ecdf(PAPR_PTS2);
[cdf4,PAPR4]=ecdf(PAPR_SLM);
semilogy(PAPR1,1-cdf1,'k-',PAPR2,1-cdf2,'k-*',PAPR3,1-cdf3,'k:',PAPR4,1-cdf4,'k-+');
legend('Orignal','交织分割PTS','相邻分割PTS','SLM');
xlabel('PAPR0[dB]');
ylabel('CCDF(pr[PAPR>PAPR0])');
grid on
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -