📄 func_findthres.m
字号:
% find threshold%% yy, 01-july-2007function [ts,ber_u,ber_c,fer_u,fer_c,se_u,se_c,... POST_SNR_bin_centers,blk_err_c_rate,bit_err_c_rate] = ... func_findthres(state,fd,t_rms,subN,F_LA,Nframe,cdrt,M,... misnr,stp,mxsnr,targetFER,... Ptotal,BO_dB,use_HPA_flg,... chnums,sampling_rate,flg_offset,flg_csi_err,... N,cp_l,BW,Nsymbol,dirname,allow_load_oldres,Root_path)DELAY=0;P_use = 10.^(-BO_dB/10);stbc = 1;T_Symbol = (N+cp_l)/(BW*sampling_rate);sys = {'SISO','MRC1x2','Alt2x1','EGC1x2','AS2x1','ALT2x2','AS2x2'};T_n=[1,1,2,1,2,2,2]; %Transmitter diversity branches [SIMO,MRC,MISO,EGC,MISO-AS]R_n=[1,2,1,2,1,2,2]; %Receiver diversity branches [SIMO,MRC,MISO,EGC,MISO-AS]T_div=T_n(state); %Specify transmitter diversity branchesR_div=R_n(state); %specify receiver diversity branchesch = channelgenerator2(t_rms,fd,sampling_rate,N,cp_l,BW,chnums + F_LA * Nsymbol + DELAY,T_div*R_div);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%filename = ['f',num2str(fd),'_t',num2str(t_rms),'_N',num2str(subN),'_L',num2str(F_LA),... '_M',num2str(M),'F',num2str(round(10*cdrt)),'_E',num2str(flg_csi_err),... 'c',num2str(flg_offset),'D',num2str(DELAY),'BO',num2str(BO_dB),'HPA',num2str(use_HPA_flg),'.mat'];dirname = [Root_path,'/sys_link_result/link_lv_result/',dirname];filepath = [dirname,'/',filename];if allow_load_oldres && exist(filepath,'file'), load(filepath);else %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% rdstate = 4831; snr_ix = 0; Num_grp=floor(N/subN); blk_err_c=nan(length(misnr:stp:mxsnr),floor(Nframe/F_LA),Num_grp); bit_err_u=nan(length(misnr:stp:mxsnr),floor(Nframe/F_LA),Num_grp); bit_tot_u=nan(length(misnr:stp:mxsnr),floor(Nframe/F_LA),Num_grp); bit_err_c=nan(length(misnr:stp:mxsnr),floor(Nframe/F_LA),Num_grp); bit_tot_c=nan(length(misnr:stp:mxsnr),floor(Nframe/F_LA),Num_grp); for snr=misnr:stp:mxsnr %%%%%%%%%%%%%%%%%%% snr_ix=snr_ix+1; frame_ix = 0; noisePowPerSubC = 1/10^(snr/10)/N; for la_ix=1:floor(Nframe/F_LA) rnd = randint(1,1,chnums) + 1; index = (rnd: rnd + F_LA * Nsymbol-1 ) + DELAY; h = ch(:,index,:); H = func_add_csi_err(h,N,flg_csi_err); [H_comb,H_LA,ps]=selectAntenna2(H,N,subN,state,T_div); B=log2(M)*ones(floor(N/subN),1); P = Ptotal * P_use/N/T_div*ones(floor(N/subN),1); % power per subCarrier if state == 5 || state == 7, P = P*T_div; end %[g_subN] = FixP_rx_subN_gain(H_comb,H_LA,N,subN,state,T_div,R_div); code_rate = cdrt*ones(floor(N/subN),1); [T_mod,T_sent,coded,intleav,fact1,real_len,raw_len,t] = ... T_mod_cod_intlv(N,subN,B,P,Nsymbol,code_rate,rdstate,T_div,ps,state); tf(snr_ix,la_ix) = sum(B~=0)*F_LA;%length(find(B~=0))*F_LA; % should be N/subN * F_LA tb_u(snr_ix,la_ix) = sum(B)*subN*Nsymbol*F_LA; tb_c(snr_ix,la_ix) = sum(raw_len)*F_LA; %for pa_ix = 1:F_LA/F_PA % index2 = (pa_ix-1)*F_PA*Nsymbol+1; % H_PA = squeeze(H_comb(:,index2,:)); % % %hp = squeeze(h(:,index2,:)); % if F_PA~=F_LA, % P_old = P; [P,gp_subN] = b_func_adaptP(state,P,H_PA,g_subN,N,subN,T_div,R_div); % g_subN = gp_subN; % [T_mod,fact1] =b_adjust_sigPower(T_mod,fact1,P_old,P,N,subN); % end if stbc == 1, T_trans=BT_alamouti(T_mod,Nsymbol,state); else T_trans=BT_alamouti2(T_mod,state,N); end for nf = 1:F_LA%F_PA % frame index within each PA window frame_ix = frame_ix + 1; g_multiSymbols = FixP_rx_subN_gain(H_comb,H_LA,N,subN,state,T_div,R_div,NaN); Post_SNR_meas(snr_ix,frame_ix,1:Num_grp)=g_multiSymbols.*P/noisePowPerSubC; index3 = ((nf-1)*Nsymbol+1:nf*Nsymbol); %index3 = index2-1+((nf-1)*Nsymbol+1:nf*Nsymbol); h2=h(:,index3+DELAY,:); % only in the channel part, and combining part, no delay R_dfs=BTR_ofdm(h2,N,cp_l,T_trans,snr,T_div,R_div,Nsymbol,flg_offset,fd,BW,sampling_rate,noisePowPerSubC); H2 = H_comb(:,index3+DELAY,:); % here, use H at the receiver, no delay if stbc == 1, R_comb=BR_combiner(R_dfs,H2,state); else R_comb=BR_combiner2(R_dfs,H2,state); end %sdnr_measured_each_frame(snr_ix,frame_ix)=mean(mean(abs(T_mod).^2))/(mean(mean(abs(T_mod-R_comb).^2))); [blk_err_c(snr_ix,frame_ix,1:Num_grp),blk_tot_c(snr_ix,frame_ix,1:Num_grp),bit_err_u(snr_ix,frame_ix,1:Num_grp),bit_tot_u(snr_ix,frame_ix,1:Num_grp),bit_err_c(snr_ix,frame_ix,1:Num_grp),bit_tot_c(snr_ix,frame_ix,1:Num_grp),wb_u(snr_ix,frame_ix),wb_c(snr_ix,frame_ix),tp_uu(snr_ix,frame_ix),tp_cc(snr_ix,frame_ix),wf_u(snr_ix,frame_ix),wf_c(snr_ix,frame_ix)]... = R_mod_cod_intlv(N,subN,R_comb,fact1,B,rdstate,code_rate,real_len,t,coded,T_sent,intleav); end end disp(['SNR= ',num2str(snr),'dB finished']); end %% calculate results ber_u = sum(wb_u,2)./sum(tb_u,2); ber_c = sum(wb_c,2)./sum(tb_c,2); fer_u = sum(wf_u,2)./sum(tf,2); fer_c = sum(wf_c,2)./sum(tf,2); se_u = sum(tp_uu,2)./Nframe'/Nsymbol/T_Symbol/BW; se_c = sum(tp_cc,2)./Nframe'/Nsymbol/T_Symbol/BW; %POST SNR CALCULATIONS %COLLECT POST SNRs Post_SNR_meas=10*log10(Post_SNR_meas(:)); blk_tot_c=blk_tot_c(:); blk_err_c=blk_err_c(:); bit_err_c=bit_err_c(:); bit_tot_c=bit_tot_c(:); [sort_Post_SNR_meas,post_snr_idx]=sort(Post_SNR_meas); blk_tot_c=blk_tot_c(post_snr_idx); blk_err_c=blk_err_c(post_snr_idx); bit_err_c=bit_err_c(post_snr_idx); bit_tot_c=bit_tot_c(post_snr_idx); POST_SNR_stp=1; POST_SNR_bin_centers=0:POST_SNR_stp:sort_Post_SNR_meas(end); [num_occurance]=hist(sort_Post_SNR_meas,POST_SNR_bin_centers); cnt_num1=1; cnt_num2=1; for lp_post_snr_bins=1:length(POST_SNR_bin_centers) cnt_num2=cnt_num2+num_occurance(lp_post_snr_bins)-1; blk_tot_c_collected(lp_post_snr_bins)=sum(blk_tot_c(cnt_num1:cnt_num2)); blk_err_c_collected(lp_post_snr_bins)=sum(blk_err_c(cnt_num1:cnt_num2)); bit_err_c_collected(lp_post_snr_bins)=sum(bit_err_c(cnt_num1:cnt_num2)); bit_tot_c_collected(lp_post_snr_bins)=sum(bit_tot_c(cnt_num1:cnt_num2)); cnt_num1=cnt_num2; end blk_err_c_rate=blk_err_c_collected./blk_tot_c_collected; bit_err_c_rate=bit_err_c_collected./bit_tot_c_collected; ts=func_res5(blk_err_c_rate,POST_SNR_bin_centers(1),POST_SNR_stp,targetFER); if ~exist(dirname,'dir'), mkdir(dirname); end; desp = [sys{state},filename]; save(filepath,'desp','ber_u','fer_u','ber_c','fer_c','se_u','se_c','misnr','stp','mxsnr','ts','targetFER','POST_SNR_bin_centers','blk_err_c_rate','bit_err_c_rate','BO_dB','use_HPA_flg','fd');end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -