?? 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 + -