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

📄 adptive_bitpow_allocate_systems.c

📁 好东西
💻 C
📖 第 1 页 / 共 5 页
字号:
    mxArray * bit_source = NULL;
    mxArray * bit_maxnum_ofdmsig = NULL;
    mxArray * gama = NULL;
    mxArray * bitalloctvector = NULL;
    mxArray * poweralloctpower = NULL;
    mxArray * spow1 = NULL;
    mxArray * b = NULL;
    mxArray * k = NULL;
    mxArray * spow2 = NULL;
    mxArray * mm = NULL;
    mxArray * nn = NULL;
    mxArray * HHk = NULL;
    mxArray * ofdm_demodulation_out1 = NULL;
    mxArray * sig_temp = NULL;
    mxArray * Hk = NULL;
    mxArray * passchan_ofdm_symbol1 = NULL;
    mxArray * ofdm_cp_out1 = NULL;
    mxArray * ofdm_modulation_out1 = NULL;
    mxArray * map_out1 = NULL;
    mxArray * count_begin = NULL;
    mxArray * counter = NULL;
    mxArray * fd = NULL;
    mxArray * var_pow = NULL;
    mxArray * trms = NULL;
    mxArray * delay = NULL;
    mxArray * num = NULL;
    mxArray * ofdm_symbol_num = NULL;
    mxArray * l = NULL;
    mxArray * loop_num = NULL;
    mxArray * total_bit_num1 = NULL;
    mxArray * error_bit_ofdm1 = NULL;
    mxArray * total_bit_num = NULL;
    mxArray * error_bit_ofdm = NULL;
    mxArray * snr = NULL;
    mxArray * i = NULL;
    mxArray * groupnumber = NULL;
    mxArray * groupsize = NULL;
    mxArray * kk = NULL;
    mxArray * ber_snr_reallocatpow = NULL;
    mxArray * ber_snr_persjr_ofdm = NULL;
    mxArray * groupnumber1 = NULL;
    mxArray * Pe = NULL;
    mxArray * SNR_dB = NULL;
    mxArray * delta_f = NULL;
    mxArray * t_interval = NULL;
    mxArray * bandwidth = NULL;
    mxArray * N_carrier = NULL;
    mxArray * cp_length = NULL;
    mxArray * t0 = NULL;
    mxArray * ans = NULL;
    mclCopyArray(&m);
    /*
     * %%%新方案,接收端先进行合并,将受到jamming影响的子载波去除
     * % clear all
     * % clc
     * format long
     */
    mlfFormat(_mxarray0_, NULL);
    /*
     * %本次仿真载频为2GHz,带宽1MHz,子载波数64个,cp为8
     * %子载波间隔为15.625kHz
     * %一个ofdm符号长度为64us,cp长度为8us
     * %系统调制级别定为QPSK
     * %最大doppler频率为50Hz,信道是慢变的
     * %多径信道为4径,功率延迟谱服从负指数分布~exp(-t/trms),trms=(1/5)*tmax=1.2us时长,各径延迟取为delay=[0 3e-6 6e-6]
     * t0=clock;
     */
    mlfAssign(&t0, mlfClock());
    /*
     * cp_length=16;%cp长度为16
     */
    mlfAssign(&cp_length, _mxarray2_);
    /*
     * N_carrier=64;%OFDM子载波个数
     */
    mlfAssign(&N_carrier, _mxarray3_);
    /*
     * bandwidth=1000000;%系统带宽为1MHz
     */
    mlfAssign(&bandwidth, _mxarray4_);
    /*
     * t_interval=(1/bandwidth)*N_carrier/(cp_length+N_carrier);%采样间隔64/72us,加上循环前缀后,采样率增加
     */
    mlfAssign(
      &t_interval,
      mclMrdivide(
        mclMtimes(
          mclMrdivide(_mxarray5_, mclVv(bandwidth, "bandwidth")),
          mclVv(N_carrier, "N_carrier")),
        mclPlus(mclVv(cp_length, "cp_length"), mclVv(N_carrier, "N_carrier"))));
    /*
     * delta_f=bandwidth/N_carrier;%Hz
     */
    mlfAssign(
      &delta_f,
      mclMrdivide(
        mclVv(bandwidth, "bandwidth"), mclVv(N_carrier, "N_carrier")));
    /*
     * % SNR_dB=[0 4 8 12 16 20 24 28 32 35];%Eb/N0
     * % SJR_dB=[-10 -5 -3 0 3 5 10 15 20 25];%符号信干比
     * %SNR_dB=[8 12 16 20 24 28 32 35];
     * SNR_dB=[10];
     */
    mlfAssign(&SNR_dB, _mxarray6_);
    /*
     * Pe=1e-3;
     */
    mlfAssign(&Pe, _mxarray7_);
    /*
     * groupnumber1=[4 16 32];
     */
    mlfAssign(&groupnumber1, _mxarray8_);
    /*
     * ber_snr_persjr_ofdm=zeros(length(groupnumber1),length(SNR_dB)); 
     */
    mlfAssign(
      &ber_snr_persjr_ofdm,
      mlfZeros(
        mlfScalar(mclLengthInt(mclVv(groupnumber1, "groupnumber1"))),
        mlfScalar(mclLengthInt(mclVv(SNR_dB, "SNR_dB"))),
        NULL));
    /*
     * ber_snr_reallocatpow=zeros(length(groupnumber1),length(SNR_dB)); 
     */
    mlfAssign(
      &ber_snr_reallocatpow,
      mlfZeros(
        mlfScalar(mclLengthInt(mclVv(groupnumber1, "groupnumber1"))),
        mlfScalar(mclLengthInt(mclVv(SNR_dB, "SNR_dB"))),
        NULL));
    /*
     * for kk=1:length(groupnumber1)
     */
    {
        int v_ = mclForIntStart(1);
        int e_ = mclLengthInt(mclVv(groupnumber1, "groupnumber1"));
        if (v_ > e_) {
            mlfAssign(&kk, _mxarray10_);
        } else {
            /*
             * groupsize=N_carrier/groupnumber1(kk);
             * groupnumber=groupnumber1(kk);
             * for i=1:length(SNR_dB)%每个SNR点上仿真若干次
             * snr=10^(SNR_dB(i)/10);
             * error_bit_ofdm=0;
             * total_bit_num=0;%发送总比特数统计
             * error_bit_ofdm1=0;%for 二次功率分配
             * total_bit_num1=0;%for 二次功率分配
             * loop_num=10; %共仿真1000次
             * 
             * for l=1:loop_num
             * ofdm_symbol_num=120;%每次仿真产生10个ofdm符号,则每次仿真共有200×64个星座映射符号;QPSK调制下,1个星座映射符号包含2个bit
             * %%%%信道参数%%%%%%
             * num=6;
             * 
             * delay=[0 1e-6 2e-6 3e-6 4e-6 6e-6];
             * trms=1.5e-6;
             * var_pow=10*log10(exp(-delay/trms));%各径功率衰减,以dB形式给出
             * fd=50;%最大doppler频率为50Hz
             * %t_interval=0.8889e-6;%采样间隔64/72us,加上循环前缀后,采样率增加
             * counter=1000000;%200000000;%各径信道的采样点间隔,应该大于信道采样点数。由以上条件现在信道采样点数
             * count_begin=(l-1+100000000)*5*counter;%每次仿真信道采样的开始位置
             * %%%%%%以上为信道参数%%%%%%
             * %%%%以下过程为了得到准确的信道信息%%%%%%
             * map_out1=rand(2*N_carrier,ofdm_symbol_num)>0.5;
             * map_out1=map_module(map_out1,2);
             * ofdm_modulation_out1=sqrt(N_carrier)*ifft(map_out1,N_carrier);
             * ofdm_cp_out1=insert_cp(ofdm_modulation_out1,cp_length);
             * [passchan_ofdm_symbol1,Hk]=multipath_chann(ofdm_cp_out1,num,var_pow,delay,fd,t_interval,counter,count_begin,cp_length);
             * sig_temp=cut_cp(passchan_ofdm_symbol1,cp_length);
             * ofdm_demodulation_out1=fft(sig_temp,N_carrier)/sqrt(N_carrier);
             * HHk=ofdm_demodulation_out1./map_out1;
             * [nn,mm]=size(ofdm_cp_out1);
             * spow2=0;
             * for k=1:nn
             * for b=1:mm
             * spow2=spow2+real(ofdm_cp_out1(k,b))^2+imag(ofdm_cp_out1(k,b))^2;
             * end
             * end
             * %spow1=spow2/(nn*mm);%信号平均能量
             * spow1=1;
             * %%%%以上过程为了得到准确的信道信息%%%%%%
             * 
             * 
             * 
             * 
             * %%%%%%%%%以下为不做二次功率分配,原参考文献方法%%%%%%%%%%%%
             * [poweralloctpower,bitalloctvector,gama]=bitandpoweralloct2(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

⌨️ 快捷键说明

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