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

📄 multipath_chann.c

📁 好东西
💻 C
📖 第 1 页 / 共 2 页
字号:
                ++v_;
            }
            mlfAssign(&k, mlfScalar(v_));
        }
    }
    /*
     * %以下计算信道频率响应值,行数与载波数相同,列数与符号个数相同
     * N_carrier=nl-cp_n;
     */
    mlfAssign(&N_carrier, mclMinus(mclVv(nl, "nl"), mclVa(cp_n, "cp_n")));
    /*
     * N_ofdm=l;
     */
    mlfAssign(&N_ofdm, mclVv(l, "l"));
    /*
     * selec_ray_channew=zeros(num,chann_l+N_ofdm*(N_carrier+cp_n));
     */
    mlfAssign(
      &selec_ray_channew,
      mlfZeros(
        mclVa(num, "num"),
        mclPlus(
          mclVv(chann_l, "chann_l"),
          mclMtimes(
            mclVv(N_ofdm, "N_ofdm"),
            mclPlus(mclVv(N_carrier, "N_carrier"), mclVa(cp_n, "cp_n")))),
        NULL));
    /*
     * selec_ray_channew(:,1:chann_l)=selec_ray_chan;
     */
    mclArrayAssign2(
      &selec_ray_channew,
      mclVv(selec_ray_chan, "selec_ray_chan"),
      mlfCreateColonIndex(),
      mlfColon(_mxarray1_, mclVv(chann_l, "chann_l"), NULL));
    /*
     * Hk=zeros(N_carrier,N_ofdm);
     */
    mlfAssign(
      Hk,
      mlfZeros(mclVv(N_carrier, "N_carrier"), mclVv(N_ofdm, "N_ofdm"), NULL));
    /*
     * for kk=1:N_ofdm
     */
    {
        int v_ = mclForIntStart(1);
        int e_ = mclForIntEnd(mclVv(N_ofdm, "N_ofdm"));
        if (v_ > e_) {
            mlfAssign(&kk, _mxarray2_);
        } else {
            /*
             * for ii=1:N_carrier
             * sum1=0;
             * for ll=1:num
             * sum1=sum1+selec_ray_channew(ll,(kk-1)*(N_carrier+cp_n)+cp_n+ii+t_shift(ll))*exp(-sqrt(-1)*2*pi*(ii-1)*t_shift(ll)/N_carrier);
             * end
             * Hk(ii,kk)=sum1;
             * end
             * end
             */
            for (; ; ) {
                int v_0 = mclForIntStart(1);
                int e_0 = mclForIntEnd(mclVv(N_carrier, "N_carrier"));
                if (v_0 > e_0) {
                    mlfAssign(&ii, _mxarray2_);
                } else {
                    for (; ; ) {
                        mlfAssign(&sum1, _mxarray3_);
                        {
                            int v_1 = mclForIntStart(1);
                            int e_1 = mclForIntEnd(mclVa(num, "num"));
                            if (v_1 > e_1) {
                                mlfAssign(&ll, _mxarray2_);
                            } else {
                                for (; ; ) {
                                    mlfAssign(
                                      &sum1,
                                      mclPlus(
                                        mclVv(sum1, "sum1"),
                                        mclMtimes(
                                          mclArrayRef2(
                                            mclVv(
                                              selec_ray_channew,
                                              "selec_ray_channew"),
                                            mlfScalar(v_1),
                                            mclPlus(
                                              mclPlus(
                                                mclPlus(
                                                  mclMtimes(
                                                    mlfScalar(v_ - 1),
                                                    mclPlus(
                                                      mclVv(
                                                        N_carrier, "N_carrier"),
                                                      mclVa(cp_n, "cp_n"))),
                                                  mclVa(cp_n, "cp_n")),
                                                mlfScalar(v_0)),
                                              mclIntArrayRef1(
                                                mclVv(t_shift, "t_shift"),
                                                v_1))),
                                          mlfExp(
                                            mclMrdivide(
                                              mclMtimes(
                                                mclMtimes(
                                                  mclMtimes(
                                                    mclMtimes(
                                                      mclUminus(
                                                        mlfSqrt(_mxarray4_)),
                                                      _mxarray5_),
                                                    _mxarray6_),
                                                  mlfScalar(v_0 - 1)),
                                                mclIntArrayRef1(
                                                  mclVv(t_shift, "t_shift"),
                                                  v_1)),
                                              mclVv(
                                                N_carrier, "N_carrier"))))));
                                    if (v_1 == e_1) {
                                        break;
                                    }
                                    ++v_1;
                                }
                                mlfAssign(&ll, mlfScalar(v_1));
                            }
                        }
                        mclIntArrayAssign2(Hk, mclVv(sum1, "sum1"), v_0, v_);
                        if (v_0 == e_0) {
                            break;
                        }
                        ++v_0;
                    }
                    mlfAssign(&ii, mlfScalar(v_0));
                }
                if (v_ == e_) {
                    break;
                }
                ++v_;
            }
            mlfAssign(&kk, mlfScalar(v_));
        }
    }
    /*
     * % N_carrier=nl-cp_n;
     * % N_ofdm=l;
     * % Hk=zeros(N_carrier,N_ofdm);
     * % for kk=1:N_ofdm-1
     * %     for ii=1:N_carrier
     * %         sum1=0;
     * %         for ll=1:num
     * %             sum1=sum1+selec_ray_chan(ll,(kk-1)*(N_carrier+cp_n)+cp_n+ii+t_shift(ll))*exp(-sqrt(-1)*2*pi*(ii-1)*t_shift(ll)/N_carrier);
     * %         end
     * %         Hk(ii,kk)=sum1;
     * %     end
     * % end
     * 
     * for k=1:l
     */
    {
        int v_ = mclForIntStart(1);
        int e_ = mclForIntEnd(mclVv(l, "l"));
        if (v_ > e_) {
            mlfAssign(&k, _mxarray2_);
        } else {
            /*
             * input_sig_serial(((k-1)*nl+1):k*nl)=input_sig(:,k).';%输入信号矩阵转变成串行序列
             * end
             */
            for (; ; ) {
                mclArrayAssign1(
                  &input_sig_serial,
                  mlfTranspose(
                    mclArrayRef2(
                      mclVa(input_sig, "input_sig"),
                      mlfCreateColonIndex(),
                      mlfScalar(v_))),
                  mlfColon(
                    mclPlus(
                      mclMtimes(mlfScalar(v_ - 1), mclVv(nl, "nl")),
                      _mxarray1_),
                    mclMtimes(mlfScalar(v_), mclVv(nl, "nl")),
                    NULL));
                if (v_ == e_) {
                    break;
                }
                ++v_;
            }
            mlfAssign(&k, mlfScalar(v_));
        }
    }
    /*
     * delay_sig=zeros(num,chann_l);%初始化延时后的送入各径的信号,每径所含符号数为chann_l
     */
    mlfAssign(
      &delay_sig, mlfZeros(mclVa(num, "num"), mclVv(chann_l, "chann_l"), NULL));
    /*
     * %以下for循环为各径的输入信号做延迟处理
     * for f=1:num
     */
    {
        int v_ = mclForIntStart(1);
        int e_ = mclForIntEnd(mclVa(num, "num"));
        if (v_ > e_) {
            mlfAssign(&f, _mxarray2_);
        } else {
            /*
             * if t_shift(f)~=0
             * delay_sig(f,1:t_shift(f))=zeros(1,t_shift(f));
             * end
             * delay_sig(f,(t_shift(f)+1):chann_l)= input_sig_serial(1:(chann_l-t_shift(f)));
             * end
             */
            for (; ; ) {
                if (mclNeBool(
                      mclIntArrayRef1(mclVv(t_shift, "t_shift"), v_),
                      _mxarray3_)) {
                    mclArrayAssign2(
                      &delay_sig,
                      mlfZeros(
                        _mxarray1_,
                        mclIntArrayRef1(mclVv(t_shift, "t_shift"), v_),
                        NULL),
                      mlfScalar(v_),
                      mlfColon(
                        _mxarray1_,
                        mclIntArrayRef1(mclVv(t_shift, "t_shift"), v_),
                        NULL));
                }
                mclArrayAssign2(
                  &delay_sig,
                  mclArrayRef1(
                    mclVv(input_sig_serial, "input_sig_serial"),
                    mlfColon(
                      _mxarray1_,
                      mclMinus(
                        mclVv(chann_l, "chann_l"),
                        mclIntArrayRef1(mclVv(t_shift, "t_shift"), v_)),
                      NULL)),
                  mlfScalar(v_),
                  mlfColon(
                    mclPlus(
                      mclIntArrayRef1(mclVv(t_shift, "t_shift"), v_),
                      _mxarray1_),
                    mclVv(chann_l, "chann_l"),
                    NULL));
                if (v_ == e_) {
                    break;
                }
                ++v_;
            }
            mlfAssign(&f, mlfScalar(v_));
        }
    }
    /*
     * output_sig_serial=zeros(1,chann_l);%初始化输出信号串行序列
     */
    mlfAssign(
      &output_sig_serial,
      mlfZeros(_mxarray1_, mclVv(chann_l, "chann_l"), NULL));
    /*
     * %得到各径叠加后的输出信号序列
     * for f=1:num
     */
    {
        int v_ = mclForIntStart(1);
        int e_ = mclForIntEnd(mclVa(num, "num"));
        if (v_ > e_) {
            mlfAssign(&f, _mxarray2_);
        } else {
            /*
             * output_sig_serial= output_sig_serial+selec_ray_chan(f,:).*delay_sig(f,:);
             * end
             */
            for (; ; ) {
                mlfAssign(
                  &output_sig_serial,
                  mclPlus(
                    mclVv(output_sig_serial, "output_sig_serial"),
                    mclTimes(
                      mclArrayRef2(
                        mclVv(selec_ray_chan, "selec_ray_chan"),
                        mlfScalar(v_),
                        mlfCreateColonIndex()),
                      mclArrayRef2(
                        mclVv(delay_sig, "delay_sig"),
                        mlfScalar(v_),
                        mlfCreateColonIndex()))));
                if (v_ == e_) {
                    break;
                }
                ++v_;
            }
            mlfAssign(&f, mlfScalar(v_));
        }
    }
    /*
     * for k=1:l
     */
    {
        int v_ = mclForIntStart(1);
        int e_ = mclForIntEnd(mclVv(l, "l"));
        if (v_ > e_) {
            mlfAssign(&k, _mxarray2_);
        } else {
            /*
             * output_sig(:,k)=output_sig_serial(((k-1)*nl+1):k*nl).';%输出信号串行序列转变成与输入信号相同的矩阵形式,做为本函数输出
             * end
             */
            for (; ; ) {
                mclArrayAssign2(
                  &output_sig,
                  mlfTranspose(
                    mclArrayRef1(
                      mclVv(output_sig_serial, "output_sig_serial"),
                      mlfColon(
                        mclPlus(
                          mclMtimes(mlfScalar(v_ - 1), mclVv(nl, "nl")),
                          _mxarray1_),
                        mclMtimes(mlfScalar(v_), mclVv(nl, "nl")),
                        NULL))),
                  mlfCreateColonIndex(),
                  mlfScalar(v_));
                if (v_ == e_) {
                    break;
                }
                ++v_;
            }
            mlfAssign(&k, mlfScalar(v_));
        }
    }
    mclValidateOutput(output_sig, 1, nargout_, "output_sig", "multipath_chann");
    mclValidateOutput(*Hk, 2, nargout_, "Hk", "multipath_chann");
    mxDestroyArray(t_shift);
    mxDestroyArray(nl);
    mxDestroyArray(l);
    mxDestroyArray(chann_l);
    mxDestroyArray(selec_ray_chan);
    mxDestroyArray(pow_per_channel);
    mxDestroyArray(total_pow_allchan);
    mxDestroyArray(k);
    mxDestroyArray(atts);
    mxDestroyArray(N_carrier);
    mxDestroyArray(N_ofdm);
    mxDestroyArray(selec_ray_channew);
    mxDestroyArray(kk);
    mxDestroyArray(ii);
    mxDestroyArray(sum1);
    mxDestroyArray(ll);
    mxDestroyArray(input_sig_serial);
    mxDestroyArray(delay_sig);
    mxDestroyArray(f);
    mxDestroyArray(output_sig_serial);
    mxDestroyArray(cp_n);
    mxDestroyArray(count_begin);
    mxDestroyArray(counter);
    mxDestroyArray(t_interval);
    mxDestroyArray(fd);
    mxDestroyArray(delay);
    mxDestroyArray(var_pow);
    mxDestroyArray(num);
    mxDestroyArray(input_sig);
    mclSetCurrentLocalFunctionTable(save_local_function_table_);
    return output_sig;
    /*
     * %注意,在本函数中没有为信号叠加白噪声
     */
}

⌨️ 快捷键说明

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