⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ptssubcarriers.m

📁 采用不同子载波时
💻 M
字号:
clear; close  all;
K=8;                       % 用户数
M=[8 16 32 64];            % 每个用户bit数
L=8;                       % 扩频增益
V=4;
KK=1e3;

PAPR_PTS=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
% 复合
X=zeros(1,M(m)*L);
X=sum(afterspreading);
% 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_PTS(m,kk)=10*log10(peak/average);
end

end
% CCDF

[cdf1,PAPR1]=ecdf(PAPR_PTS(1,:));
[cdf2,PAPR2]=ecdf(PAPR_PTS(2,:));
[cdf3,PAPR3]=ecdf(PAPR_PTS(3,:));
[cdf4,PAPR4]=ecdf(PAPR_PTS(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 + -