adptive_bitpow_allocate_systems.c

来自「好东西」· C语言 代码 · 共 1,150 行 · 第 1/5 页

C
1,150
字号
             * end
             * total_bit_num=total_bit_num+sum(bit_num_ofdmsig);
             * 
             * 
             * ofdm_modulation_out=sqrt(N_carrier)*ifft(map_out1,N_carrier);%作64点逆FFT运算,完成ofdm调制,前面乘系数sqtr(64)是为了保持ifft前后的符号能量不变
             * 
             * ofdm_cp_out=insert_cp(ofdm_modulation_out,cp_length);%插入循环前缀 
             * %%%%%%%%以下计算噪声方差%%%%%%%%%%
             * 
             * map_flag=sum(bit_num_ofdmsig)/(N_carrier*ofdm_symbol_num);
             * % sgma=sqrt(spow1/(2*snr)/map_flag);
             * if map_flag==0
             * sgma=sqrt(spow1/(2*snr));
             * else
             * %sgma=sqrt(spow1/(2*snr)/map_flag);%sgma如何计算,与当前SNR和信号平均能量有关系
             * sgma=sqrt(spow1/(2*snr));
             * end
             * 
             * 
             * [passchan_ofdm_symbol,Hk]=multipath_chann(ofdm_cp_out,num,var_pow,delay,fd,t_interval,counter,count_begin,cp_length);
             * 
             * passnoise_ofdm_symbol=add_noise(sgma,passchan_ofdm_symbol);%加入随机高斯白噪声,receive_ofdm_symbol为最终接收机收到的ofdm符号块
             * 
             * 
             * cutcp_ofdm_symbol=cut_cp(passnoise_ofdm_symbol,cp_length);%去除循环前缀
             * 
             * ofdm_demodulation_out=fft(cutcp_ofdm_symbol,N_carrier)/sqrt(N_carrier);%作128点FFT运算,完成ofdm解调
             * %receive_ofdm_symbol=ofdm_demodulation_out;
             * receive_ofdm_symbol=ofdm_demodulation_out./HHk;
             * receive_ofdm_symbol1=zeros(size(receive_ofdm_symbol));
             * for nn=1:ofdm_symbol_num
             * for v=1:groupnumber
             * if poweralloctpower(v,nn)~=0
             * for w=1:groupsize
             * receive_ofdm_symbol1((v-1)*groupsize+w,nn)=receive_ofdm_symbol((v-1)*groupsize+w,nn)/sqrt(poweralloctpower(v,nn));    
             * end
             * end
             * end
             * end
             * receive_bit_sig=de_map_module_adp(receive_ofdm_symbol1,bitalloctvector,groupsize,groupnumber,bit_num_ofdmsig);
             * 
             * 
             * %以下过程统计接收信号中的错误比特数
             * [mn,nn]=size(bit_source);
             * err_num=sum(sum(rem(bit_source+receive_bit_sig,2)));
             * error_bit_ofdm=error_bit_ofdm+err_num;
             * %%%%%%%%%以上为不做二次功率分配,原参考文献方法%%%%%%%%%%%%         
             * 
             * 
             * 
             * 
             * 
             * 
             * %%%%%%%%%%%以下为做功率二次分配的方法%%%%%%%%%%%%%%%%
             * [poweralloctpower,bitalloctvector,gama]=bitandpoweralloct2(N_carrier,groupnumber,HHk,snr,Pe,ofdm_symbol_num);%自适应分配比特和功率
             * %[poweralloctpower,bitalloctvector,gama]=reallocat_power(N_carrier,groupnumber,HHk,snr,Pe,ofdm_symbol_num);%做功率二次分配
             * bit_maxnum_ofdmsig=groupsize*max(sum(bitalloctvector));
             * bit_source=zeros(bit_maxnum_ofdmsig,ofdm_symbol_num);
             * bit_num_ofdmsig=zeros(1,ofdm_symbol_num);
             * map_out=zeros(N_carrier,ofdm_symbol_num);
             * 
             * for nn=1:ofdm_symbol_num
             * for v=1:1:groupnumber
             * map_flag=bitalloctvector(v,nn);
             * sourcebit=zeros(1,bitalloctvector(v,nn)*groupsize);
             * for w=1:1:groupsize
             * if bitalloctvector(v,nn)>6
             * input=zeros(1,bitalloctvector(v,nn));
             * elseif bitalloctvector(v,nn)<1
             * input=[];
             * else
             * input=(rand(1,bitalloctvector(v,nn)))>0.5;
             * end
             * sourcebit(1,1+(w-1)*bitalloctvector(v,nn):(w-1)*bitalloctvector(v,nn)+bitalloctvector(v,nn))=input;
             * %按照map_flag指示完成各种星座映射,input为输入比特块
             * end
             * 
             * bit_source((v-1)*groupsize*map_flag+1:(v-1)*groupsize*map_flag+groupsize*map_flag,nn)=sourcebit';
             * bit_num_ofdmsig(nn)=bit_num_ofdmsig(nn)+bitalloctvector(v,nn)*groupsize;
             * if length(sourcebit)==0
             * map_out((v-1)*groupsize+1:(v-1)*groupsize+groupsize,nn)=zeros(groupsize,1);
             * else
             * %map_out((v-1)*groupsize+1:(v-1)*groupsize+groupsize,nn)=sqrt(poweralloctpower(v,nn))*map_module(sourcebit',bitalloctvector(v,nn));
             * map_out((v-1)*groupsize+1:(v-1)*groupsize+groupsize,nn)=map_module_adp(sourcebit',bitalloctvector(v,nn));
             * end
             * end
             * end
             * map_out1=zeros(size(map_out));
             * %%%%%%%%以下根据功率分配值做分配功率%%%%%%%%%%
             * for nn=1:ofdm_symbol_num
             * for v=1:groupnumber
             * if poweralloctpower(v,nn)~=0
             * for w=1:groupsize
             * map_out1((v-1)*groupsize+w,nn)=sqrt(poweralloctpower(v,nn))*map_out((v-1)*groupsize+w,nn);    
             * end
             * end
             * end
             * end
             * total_bit_num1=total_bit_num1+sum(bit_num_ofdmsig);
             * 
             * 
             * ofdm_modulation_out=sqrt(N_carrier)*ifft(map_out1,N_carrier);%作64点逆FFT运算,完成ofdm调制,前面乘系数sqtr(64)是为了保持ifft前后的符号能量不变
             * ofdm_cp_out=insert_cp(ofdm_modulation_out,cp_length);%插入循环前缀 
             * %%%%%%%%以下计算噪声方差%%%%%%%%%%
             * 
             * map_flag=sum(bit_num_ofdmsig)/(N_carrier*ofdm_symbol_num);
             * % sgma=sqrt(spow1/(2*snr)/map_flag);
             * if map_flag==0
             * sgma=sqrt(spow1/(2*snr));
             * else
             * %sgma=sqrt(spow1/(2*snr)/map_flag);%sgma如何计算,与当前SNR和信号平均能量有关系
             * sgma=sqrt(spow1/(2*snr));
             * end
             * 
             * 
             * 
             * [passchan_ofdm_symbol,Hk]=multipath_chann(ofdm_cp_out,num,var_pow,delay,fd,t_interval,counter,count_begin,cp_length);
             * 
             * passnoise_ofdm_symbol=add_noise(sgma,passchan_ofdm_symbol);%加入随机高斯白噪声,receive_ofdm_symbol为最终接收机收到的ofdm符号块
             * 
             * 
             * cutcp_ofdm_symbol=cut_cp(passnoise_ofdm_symbol,cp_length);%去除循环前缀
             * 
             * ofdm_demodulation_out=fft(cutcp_ofdm_symbol,N_carrier)/sqrt(N_carrier);%作128点FFT运算,完成ofdm解调
             * %receive_ofdm_symbol=ofdm_demodulation_out;
             * receive_ofdm_symbol=ofdm_demodulation_out./HHk;
             * receive_ofdm_symbol1=zeros(size(receive_ofdm_symbol));
             * for nn=1:ofdm_symbol_num
             * for v=1:groupnumber
             * if poweralloctpower(v,nn)~=0
             * for w=1:groupsize
             * receive_ofdm_symbol1((v-1)*groupsize+w,nn)=receive_ofdm_symbol((v-1)*groupsize+w,nn)/sqrt(poweralloctpower(v,nn));    
             * end
             * end
             * end
             * end
             * receive_bit_sig=de_map_module_adp(receive_ofdm_symbol1,bitalloctvector,groupsize,groupnumber,bit_num_ofdmsig);
             * 
             * 
             * %以下过程统计接收信号中的错误比特数
             * [mn,nn]=size(bit_source);
             * err_num=sum(sum(rem(bit_source+receive_bit_sig,2)));
             * error_bit_ofdm1=error_bit_ofdm1+err_num;
             * %%%%%%%%%%%以上为做功率二次分配的方法%%%%%%%%%%%%%%%%                                  
             * end%for l=1:loop_num
             * 
             * ber_snr_persjr_ofdm(kk,i)=error_bit_ofdm/total_bit_num;
             * ber_snr_reallocatpow(kk,i)=error_bit_ofdm1/total_bit_num1;
             * fre_eff_persnr(kk,i)=total_bit_num/(loop_num*ofdm_symbol_num*(1/bandwidth)*N_carrier)/bandwidth;
             * fre_eff_persnr_reallocatpow(kk,i)=total_bit_num1/(loop_num*ofdm_symbol_num*(1/bandwidth)*N_carrier)/bandwidth;
             * 
             * save bitalloc_data.mat ber_snr_persjr_ofdm ber_snr_reallocatpow fre_eff_persnr fre_eff_persnr_reallocatpow;
             * end%for i=1:length(SNR_dB)
             * 
             * end %for kk
             */
            for (; ; ) {
                mlfAssign(
                  &groupsize,
                  mclMrdivide(
                    mclVv(N_carrier, "N_carrier"),
                    mclIntArrayRef1(mclVv(groupnumber1, "groupnumber1"), v_)));
                mlfAssign(
                  &groupnumber,
                  mclIntArrayRef1(mclVv(groupnumber1, "groupnumber1"), v_));
                {
                    int v_0 = mclForIntStart(1);
                    int e_0 = mclLengthInt(mclVv(SNR_dB, "SNR_dB"));
                    if (v_0 > e_0) {
                        mlfAssign(&i, _mxarray10_);
                    } else {
                        for (; ; ) {
                            mlfAssign(
                              &snr,
                              mclMpower(
                                _mxarray6_,
                                mclMrdivide(
                                  mclIntArrayRef1(mclVv(SNR_dB, "SNR_dB"), v_0),
                                  _mxarray6_)));
                            mlfAssign(&error_bit_ofdm, _mxarray11_);
                            mlfAssign(&total_bit_num, _mxarray11_);
                            mlfAssign(&error_bit_ofdm1, _mxarray11_);
                            mlfAssign(&total_bit_num1, _mxarray11_);
                            mlfAssign(&loop_num, _mxarray6_);
                            {
                                int v_1 = mclForIntStart(1);
                                int e_1
                                  = mclForIntEnd(mclVv(loop_num, "loop_num"));
                                if (v_1 > e_1) {
                                    mlfAssign(&l, _mxarray10_);
                                } else {
                                    for (; ; ) {
                                        mlfAssign(
                                          &ofdm_symbol_num, _mxarray12_);
                                        mlfAssign(&num, _mxarray13_);
                                        mlfAssign(&delay, _mxarray14_);
                                        mlfAssign(&trms, _mxarray16_);
                                        mlfAssign(
                                          &var_pow,
                                          mclMtimes(
                                            _mxarray6_,
                                            mlfLog10(
                                              mlfExp(
                                                mclMrdivide(
                                                  mclUminus(
                                                    mclVv(delay, "delay")),
                                                  mclVv(trms, "trms"))))));
                                        mlfAssign(&fd, _mxarray17_);
                                        mlfAssign(&counter, _mxarray4_);
                                        mlfAssign(
                                          &count_begin,
                                          mclMtimes(
                                            mlfScalar(
                                              svDoubleScalarTimes(
                                                (double) (v_1 - 1 + 100000000),
                                                5.0)),
                                            mclVv(counter, "counter")));
                                        mlfAssign(
                                          &map_out1,
                                          mclGt(
                                            mlfNRand(
                                              1,
                                              mclMtimes(
                                                _mxarray18_,
                                                mclVv(N_carrier, "N_carrier")),
                                              mclVv(
                                                ofdm_symbol_num,
                                                "ofdm_symbol_num"),
                                              NULL),
                                            _mxarray19_));

⌨️ 快捷键说明

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