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

📄 func_findmarg.m

📁 基于OFDM的无线宽带系统仿真It contains mainly two parts, i.e. link-level simulator and system-level simulator.
💻 M
字号:
% find margin%% yy, 01-july-2007function [runtime_BLER,runtime_marg] = ...    func_findmarg(state,fd,t_rms,subN,F_LA,F_PA,Nframe,cdrt,M,...    misnr,stp,mxsnr,targetFER,...    Ptotal,BO_dB,use_HPA_flg,LA_thres,LA_marg,deltMG,buffer_length,...    chnums,sampling_rate,flg_offset,flg_csi_err,DELAY,...    N,cp_l,BW,Nsymbol,dirname,allow_load_oldres,Root_path)threshold = LA_thres + LA_marg;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 = ['MG_','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),'marg',num2str(LA_marg),'.mat'];dirname = [Root_path,'/sys_link_result/link_lv_result/',dirname];filepath = [dirname,'/',filename];if allow_load_oldres && exist(filepath,'file'),    load(filepath);else    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    update_idx = 0;    buffer_pointer = 0;    rdstate = 4831;    snr_ix = 0;    Num_grp=floor(N/subN);    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);            g_subN = FixP_rx_subN_gain(H_comb,H_LA,N,subN,state,T_div,R_div);            P_max = Ptotal * P_use/N/T_div*ones(floor(N/subN),1); % power per subCarrier            if state == 5 || state == 7,                P_mat = P_mat*T_div;            end            P_need = 10^((threshold)/10)  * noisePowPerSubC ./g_subN;            P = min(P_need,P_max);            B = log2(M) * (P_max>=P_need);            code_rate = cdrt * (P_max>=P_need);            [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;            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;                buffer_pointer = mod(buffer_pointer,buffer_length) + 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);                %save yytmp index3                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);                [blk_err_c(buffer_pointer,1:Num_grp),blk_tot_c(buffer_pointer,1:Num_grp)]...                    = R_mod_cod_intlv(N,subN,R_comb,fact1,B,rdstate,code_rate,real_len,t,coded,T_sent,intleav);                if buffer_pointer == buffer_length % update margin                    BLER =  sum(sum(blk_err_c)) / sum(sum(blk_tot_c));                    if BLER > 1.2 * targetFER                        threshold  = threshold + deltMG;                    elseif BLER < 0.8 * targetFER                        threshold  = threshold - deltMG;                    end                    disp(['BLER:',num2str(BLER),'; Instant_thres:',num2str(threshold),'dB; Margin:',num2str(threshold - LA_thres),'dB']);                    update_idx = update_idx + 1;                    runtime_BLER(update_idx) = BLER;                    runtime_marg(update_idx) = threshold - LA_thres;                                        end            end        end        disp(['SNR= ',num2str(snr),'dB finished']);    end    if ~exist(dirname,'dir'),        mkdir(dirname);    end;    desp = [sys{state},filename];    marg = threshold - LA_thres;    save(filepath,'desp','LA_thres','marg','runtime_marg','runtime_BLER');end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -