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