📄 slmsubcarriers.m
字号:
clear; close all;
K=8; % 用户数
M=[8 16 32 64]; % 每个用户bit数
L=8; % 扩频增益
KK=1e3;
PAPR_SLM=zeros(4,KK);
for kk=1:1:KK
for m=1:1:4
userdata=round(rand(K,M(m))); % 生成数据
lp=find(userdata<1);
userdata(lp)=-1;
% 生成walsh码
walsh=hadamard(L);
% 扩频
afterspreading=zeros(K,M(m)*L);
for k=1:1:K
afterspreading(k,:)=kron(userdata(k,:),walsh(k,:));
end
% 复合
mux=zeros(1,M(m)*L);
mux=sum(afterspreading);
% SLM
N=M(m)*L;
U=16;
Phase_sequence=round(rand(U,N));
symbol=zeros(U,N);
for u=1:1:U
symbol(u,:)=Phase_sequence(u,:).*mux;
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');
PAPR=10*log10(SLM_peak./SLM_average);
PAPR_SLM(m,kk)=min(PAPR);
end
end
% CCDF
[cdf1,PAPR1]=ecdf(PAPR_SLM(1,:));
[cdf2,PAPR2]=ecdf(PAPR_SLM(2,:));
[cdf3,PAPR3]=ecdf(PAPR_SLM(3,:));
[cdf4,PAPR4]=ecdf(PAPR_SLM(4,:));
semilogy(PAPR1,1-cdf1,PAPR2,1-cdf2,PAPR3,1-cdf3,PAPR4,1-cdf4);
gtext('N=64');
gtext('N=128');
gtext('N=256');
gtext('N=512');
xlabel('PAPR0[dB]');
ylabel('CCDF(pr[PAPR>PAPR0])');
grid on
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -