📄 papr_analysis.asv
字号:
clear allclchold on%Parameter settingfftn = 128; %FFT点数CP_length = fftn/8; %循环前缀长度symbol_num = 1e2; %OFDM符号数M = 1; %调制阶数(1——BPSK)?????????data_length = fftn*symbol_num*M; %数据长度%Data generatingdata_source = bingen(data_length);%OFDM modulatedata4ifft = reshape(data_source,fftn,symbol_num); %S/Pifft_out = sqrt(fftn)*ifft(data4ifft); %ifft 为什么求iff的sqrt???ifft_out_temp1 = ifft_out; %%%%%%%% PAR Control %%%%%%%%%%%% 限幅 MaxPAR = 3; %dB,PAR门限 for ii = 1:symbol_num xn = ifft_out(:,ii); arverage_pwr = norm(xn)^2/fftn; for kk = 1:fftn if (abs(xn(kk)))^2/arverage_pwr > 10^(MaxPAR/10)%?????????? xn(kk) = xn(kk)*sqrt(10^(MaxPAR/10)*arverage_pwr)/abs(xn(kk));%?????????? end ifft_out(kk,ii) = xn(kk); end end %压缩扩展变换% u = 3; %变换因子% A = max(max(abs(ifft_out)));% for ii = 1:symbol_num% xn = ifft_out(:,ii);% av_p = xn'*xn/fftn;% for kk = 1:fftn% temp = ifft_out(kk,ii);% ifft_out(kk,ii) = A*temp*log(1+u*abs(temp)/A)/(log(1+u)*abs(temp));% end% av_p1 = ifft_out(:,ii)'*ifft_out(:,ii)/fftn;% ifft_out(:,ii) = av_p*ifft_out(:,ii)/av_p1;% end %CCDF计算 plotPAPR = zeros(1,symbol_num); for ii = 1:symbol_num xn1 = ifft_out(:,ii); arverage_pwr = xn1'*xn1/fftn;%(平均功率是这样计算的:求每一个样值的功率在求和然后求平均) max_value = max(abs(xn1)); PAPR = max_value^2/arverage_pwr;%计算发送信号的PAPR及平均功率 plotPAPR(ii) = 10*log10(PAPR); end CCDF = zeros(1,13); for jj = 1:13 PAR_temp = zeros(1,symbol_num); PAR_temp(find(plotPAPR > jj-1)) = 1;%?????????? CCDF(jj) = sum(PAR_temp)/symbol_num; end PAR_max = 0:1:12;%(门限值) semilogy(PAR_max,CCDF,'g+-') grid on % %Add CP% % %P/S% s = reshape(ifft_out,size(data_source));% % %Transmit% EbNo = 0:1:10;% No = 1;% noise = sqrt(1/2)*(randn(1,data_length)+1i*randn(1,data_length));% error = zeros(1,length(EbNo));% for E_N = 1:length(EbNo)% Eb = No*10^(EbNo(E_N)/10);% s_tr = sqrt(Eb)*s;% % %AWGN channel% % %Receive% s_re = s_tr+noise;% % %Remove CP% % %OFDM demodulate% data4fft = reshape(s_re,size(data4ifft)); %S/P% % fft_out = fft(data4fft)/sqrt(fftn); %FFT% % data2decid = reshape(fft_out,size(data_source));% % %Decide% data_receive(find(real(data2decid) < 0)) = -1;% data_receive(find(real(data2decid) >= 0)) = 1;% % error(1,E_N) = (sum(abs(data_receive-data_source))/2)/data_length;% end% % semilogy(EbNo,error,'mx-')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -