您现在的位置:首页 >> 通信 >> 内容

基于PSO优化的OFDM系统PAPR抑制PTS算法MATLAB仿真

时间:2023/3/7 20:08:32 点击:

  核心提示:A464,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJaUm5hr

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览



3.算法概述

       部分传输序列(Partial Transmit Sequence , PTS)由于其不受载波数量限制,并且能够有效的,无失真的降低OFDM信号峰均比,而受到广泛关注。部分传输序列算法(PTS)最初是由S.H.Muller和J.B.Huber于1997年提出。PTS算法的核心思想是将具有N个符号的输入序列按照一定的分割方式分割成V个子数据块,并且保持每个子数据块仍含有N个符号。然后对V个子数据块进行相位加权与合并处理,选择具有最小PAPR的一组符号进行传输,达到降低OFDM信号PAPR的目的。传统的PTS算法理论比较多,现成的资料也比较多,这里就不多做介绍了,通过仿真,对比PTS和没有PTS下。目前OFDM的PAPR主要算法有信号预畸变,信号扰码,编码三个方向来解决。

4.部分源码

................................................................

%子载波数量

NsubCarrier    = 1024;    

%符号数量

NSymb          = 1e3;                  

%QPSK

mod_idx        = 2;       

%subblocks 

Nsub_blk       = [2 4 8 16 32];           

%over sample rate

OverSampleRate = 4;          

%1 -> adjacency partition;2 -> interlaced partition

Partition      = 1;      

%weighting factor

W              = 1;                          

%PSO粒子群数量

Npso           = 20;      

%PSO迭代次数

Iters          = 50;                        

c1             = 2; 

c2             = 2;   

Vmax           = 0.2;                    

wmax           = 0.9;                     

wmin           = 0.4;        

 

w              = wmax-(wmax-wmin)/Iters*(1:Iters); 

v_min          = -Vmax;  

v_max          = Vmax;

...........................................................

 

%PAPR

for n = 1:1:NSymb

    

    Datatx    = floor(rand(Length_data,1)*(2^mod_idx));

    DataMap   = MapSymb(Datatx+1);

    Symbol_tx = Initial_Pattern;

    Symbol_tx(Position_pilot) = round(rand(Length_pilot,1));

    Symbol_tx(Position_data)  = DataMap;

    

    %PAPR without PTS

    Symbol_ifft    = ifft([Symbol_tx(1:NsubCarrier/2);zeros(NsubCarrier*(OverSampleRate-1),1);Symbol_tx(NsubCarrier/2+1:end)]);

    PowerPerBit    = abs(Symbol_ifft).^2;

    PowerMean      = mean(PowerPerBit);

    PowerMax       = max(PowerPerBit);

    

    PAPRNoPTS(1,n) = PowerMax/PowerMean;

....................................................................................

    end

    n

end

 

PAPRNoPTS = 10*log10(PAPRNoPTS);

PAPR_PSO  = 10*log10(PAPR_PSO);

 

for k = 1:1:length(PAPR0)

    CntNoPTS(k) = sum( PAPRNoPTS > PAPR0(k) );

    for ii = 1:1:length(Nsub_blk)

        Cnt_PSO(ii,k) = sum( PAPR_PSO(ii,:) > PAPR0(k) );

    end

end

 

CntNoPTS = CntNoPTS./NSymb;

Cnt_PSO  = Cnt_PSO./NSymb;

 

 

figure

plot(papr_gbest2);

xlabel('PSO优化迭代次数');

ylabel('PAPR');

 

 

figure

semilogy(PAPR0,CntNoPTS,'-bs',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.9,0.0,0.0]);

hold on

semilogy(PAPR0,Cnt_PSO(1,:),'-mo',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.5,0.9,0.0]);

hold on;

semilogy(PAPR0,Cnt_PSO(2,:),'-b^',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.2,0.9,0.5]);

hold on;

semilogy(PAPR0,Cnt_PSO(3,:),'-r>',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.9,0.9,0.0]);

hold on;

semilogy(PAPR0,Cnt_PSO(4,:),'-k<',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.9,0.3,0.3]);

hold on;

semilogy(PAPR0,Cnt_PSO(4,:),'-r<',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.3,0.9,0.3]);

 

grid on;

legend('without PTS','V = 2','V = 4','V = 8','V = 16','V = 32');

xlabel('PAPR0(dB)');

ylabel('Pr(PAPR>PAPR0)');

xlim([5 12]);

hold off

a464

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168