⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 func_findthres.m

📁 基于OFDM的无线宽带系统仿真It contains mainly two parts, i.e. link-level simulator and system-level simulator.
💻 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 + -