您好,欢迎访问三七文档
1选择性映射(SLM)PAPR减小方法失真程序功能:采用SLM方法减小OFDM符号PAPR程序代码:Clearall;clc;closeall;N=128;%FFT长度,即OFDM信号子载波个数M=5;%M-1为SLM选择支路数Base_MOD_Set=[1-1j-j];%星座映射为4PSKBase_MOD_Set=[1+j-1+j1-j-1-j3+j-3-j3-j-3-j1+3j…-1+3j1-3j-1-3j3+3j-3+3j3-3j-3-3j];%星座映射为16QAMPhase_Set=[1-1j-j];%4种随机相位选择Phase_Set=[1-1];%2种随机相位选择MAX_SYMBOLS=le5;%循环数,参数MAX_SYMBOLS个OFDM符号,求PAPR供统计用PAPR_Orignal=zeros(1,MAX_SYMBOLS);%存放每个循环中的原OFDM符号PAPRPAPR_SLM=zeros(1,MAX_SYMBOLS);%存放每个循环中SLM后的OFDM符号PAPRX=zeros(M,N);%存放星座映射后的发送数据,可以理解为频域信号Index=zeros(M,N);%存放在Base_MOD_Set和Phase_Set中进行随机星座映射和产生随机相位的索引fornSymbol=1:MAX_SYMBOLSIndex(1,:)=randint(1,N,length(Base_MOD_Set))+1;%产生星座映射索引Index(2,M,:)=randint(M-1,N,length(Phase_Set))+1;%产生随机相位索引X(1,:)=Base_MOD_Set(Index(1,:));%进行星座映射Phase_Rot=Phase_Set(Index(2,M,:));%产生随机相位序列X(2,M,:)=repmat(X(1,:),M-1,1).*Phase_Rot;%进行星座映射后的数据与随机相位序列矢量点乘。X中的第一行是原数据,第二行至M%行是经过相位旋转的数据x=ifft(X,[],2);%进行OFDM调制,得到时域信号。第一行为原OFDM符号,第二行至M行是SLM中各个%支路OFDM符号,在其中挑选PAPR最小的发送Signal_Power=abs(x.^2);%计算OFDM信号的功率Peak_Power=max(Signal_Power,[],2);%计算功率最大值Mean_Power=mean(Signal_Power,2);%计算平均功率PAPR_temp=10*log10(Peak_Power./Mean_Power);%计算PAPRPAPR_Orignal(nSymbol)=PAPR_temp(1);%从第一行提取原OFDM信号的PAPRPAPR_SLM(nSymbol)=min(PAPR_temp(2:M));%在各个支路OFDM信号的PAPR中选择最小值,发射端对应发送PAPR最小的OFDM%符号end[cdf1,PAPR1]=ecdf(PAPR_Orignal);%统计原OFDM符号PAPR的概率密度函数[OrignalOFDMPAPR1]=hist(PAPR_Orignal,[1:0.1:18]);cdf1=cumsum(OFDMPAPR)/MAX_SYMBOLS;%统计原OFDM符号PAPR的概率密度函数。可以在两种统计方法中选择一种[cdf2,PAPR2]=ecdf(PAPR_SLM);%统计SLM-OFDM符号PAPR的概率密度函数[SLMOFDMPAPR2]=hist(PAPR_SLM,[1:0.1:18]);cdf2=cumsum(SLMOFDM)/MAX_SYMBOLS;%统计SLM-OFDM符号PAPR的概率密度函数。可以在两种统计方法中选择一种Semilogy(PAPR1,1-cdf1,’-b’,PAPR2,1-cdf2,’-r’)%画原OFDM符号与SLM-OFDM符号PAPR的CCDF(累积误差函数)Legend(‘Orignal’,’SLM’)Title(‘选择支路数为4’)Xlabel(‘PAPR0’[dB]’);Ylabel(‘CCDF(pr[PAPRPAPR0])’);GridonData=[PAPR2;1-cdf2];SavePAPR_SLM16.amdata-ascii;%存储在各种状态下的仿真结果,以备比较2部分传输序列(PTS)PAPR减小方法仿真程序功能:利用PTS方法减小OFDM系统PAPR仿真Clearall;clc;closeall;N=128;%子载波数或IFFT长度V=4;%PTS方法分组数,可选择2组,4组,8组,若16组需相应修改程序MAX_SYMBOLS=1e4;%循环数,也就是OFDM符号个数M_ary=4;%星座映射进制数Phase_Num=4;%旋转相位的相位数%产生旋转相位矩阵Fori=1:Phase_NumPhase_Set=exp(j*2*pi/Phase_Num);EndPhase=[];%存旋转相位所有可能组合%分两组时,旋转相位所有可能组合。若旋转相位数为4,则共有16个组合。当V=4时使Forb1=1:length(Phase_Set)Forb2=1:length(phase_Set)Phase=[Phase;[Phase_Set(b1)Phase_Set(b2)]];EndEnd%分四组时,旋转相位所有可能组合。若旋转相位数为4,则共有4^4个组合。当V=4时使用。Forb1=1:length(Phase_Set)Forb2=1:length(Phase_Set)Forb3=1:length(Phase_Set)Forb4=1:length(Phase_Set)Phase=[Phase;[Phase_Set(b1)Phase_Set(b2)Phase_Set(b3)Phase_Set(b4)]];EndEndEndEndEnd%分八组时,旋转相位所有可能组合。若旋转相位数为4,则共有4^8个组合。当V=8时使用。Forb1=1:length(Phase_Set)Forb2=1:length(Phase_Set)Forb3=1:length(Phase_Set)Forb4=1:length(Phase_Set)Forb5=1:length(Phase_Set)Forb6=1:length(Phase_Set)Forb7=1:length(Phase_Set)Forb8=1:length(Phase_Set)Phase=[Phase;[Phase_Set(b1)Phase_Set(b2)Phase_Set(b3)Phase_Set(b4)...Phase_Set(b5)Phase_Set(b6)Phase_Set(b7)Phase_Set(b8)]];EndEndEndEndEndEndEndEnd%MAX_SYMBOLS个OFDM符号频域数据产生length_data=N*MAX_SYMBOLS;%发送的总数据符号数,每个数据符号可以是4PSK或16QAMBase_MOD_Set=[];%存放星座映射后的数据source_data=randint(length_data,log2(M_ary));%随机产生log2(M_ary)二进制数symbols=bi2de(source_data);%将log2(M_ary)二进制数合并成多进制数MOD_Symbol=dmodce(symbols,1,1,’qask’,M_ary);%进行星座映射%将N*MAX_SYMBOLS个串行数据转换为MAX_SYMBNOLS个N点并行数据,作为%MAX_SYMBOLS个OFDM符号的频域数据m=0;Fori=0;MAX_SYMBOLS-1;MOD_tem=[];Forn=1:N;MOD_tem=[MOD_tem,MOD_Symbol(i*N+n)];end;Base_MOD_Set=[Base_MOD_Set;MOD_tem];ClearMOD_tem;end;%进行原OFDM符号与经PTS后的OFDM符号PAPR的CCDF(累积误差函数)统计Choose_Len=length(Phase_Set)^V;%旋转相位相位所有组合数PAPR_Orignal=zeros(1,MAX_SYMBOLS);%存放原OFDM信号所有循环的PAPRPAPR_PTS=zeros(1,MAX_SYMBOLS);%存放原PTS-OFDM信号所有循环的PAPRFornSymbol=1:MAX_SYMBOLS%循环开始%对原始OFDM符号X=Base_MOD_Set(nSymbol,:);X=ifft(X,[],2);%OFDM调制Signal_Power=abs(x.^2);%计算功率Peak_Power=max(Signal_Power,[],2);%计算峰值功率Mean_Power=mean(Signal_Power,2);%计算平均功率PAPR_Orignal(nSymbol)=10*log10(Peak_Power./Mean_Power);%计算PAPR%计算PAPR%对经过PTS后的OFDM符号A=zeros(V,N);%交织分组方式forv=1:VA(v,v:V:N)=X(v:V:N);end%顺序分组方式forv=1:VA(v,1+(v-1)*N/V):(N/V+(v-1)*N/V))=...X((1+(v-1)*N/V):(N/V+(v-1)*N/V));End%随机分组方式Index=randperm(N);forv=1:VA(v,Index(v:V:N))=X(Index(v:V:N));enda=ifft(A,[],2);%OFDM调制min_value=10;%分组后的数据进行OFDM调制后与旋转相位相乘,按全举法搜索最优旋转相位组合forn=1:Choose_Lentemp_phase=Phase(n,:).';temp_max=max(abs(sum(a.*repmat(temp_phase,1,N))));iftemp_maxmin_valuemin_value=temp_max;Best_n=n;endend%发送最优相位组合信号并计算其PAPRaa=sum(a.*repmat(Phase(Best_n,:).',1,N));Signal_Power=abs(aa.^2);Peak_Power=max(Signal_Power,[],2);Mean_power=mean(Signal_Power,2);PAPR_PTS(nSymbol)=10*log10(Peak_Power./Mean_Power);end%统计原OFDM符号与PTS-OFDM符号的CCDF,并画出其曲线[cdf1,PAPR1]=ecdf(PAPR_Orignal);[cdf2,PAPR2]=ecdf(PAPR_PTS);semilogy(PAPR1,1-cdf1,'-b*',PAPR2,1-cdf2,'-r+')legend('Orignal','PTS')title('V=4')xlabel('PAPRO[dB]');ylabel('CCDF(Pr[PAPRPAPR0])');gridon%存储各种状态下的数据,以备比较data=[PAPR1;1-cdf1];savePTS_PAPR_.amdata-ascii;仿真结果如图6-156-166-176-18所示。3限幅法减小OFDM符号的PAPR仿真程序功能:利用限幅法降低OFDM符号的PAPR。程序代码:clearall;clc;closeall;K=128;%OFDM符号子载波数IF=2;%过采样因子N=K*IF;%过采样后一个OFDM符号数据个数,也即FFT或IFFT长度CR=4;%剪切率(CR=4即剪切率为6dB)QPSK_Set=[1-1j-j];%星座隐射为4PSKITERATE_NUM=4;MAX_SYMBOLS=le4;PAPR_Orignal=zeros
本文标题:PAPR减小方法
链接地址:https://www.777doc.com/doc-4557922 .html