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

📄 c5_std5.c

📁 mmo 信道估计算法 matlab 仿真 实现了无线信道环境下的信道估计
💻 C
📖 第 1 页 / 共 4 页
字号:
      c5_c_ref_pilots.im = c5_b_ref_pilots.re * c5_b_channel_est1.im +
        c5_b_ref_pilots.im * c5_b_channel_est1.re;
      c5_dcv8[c5_i28 + (c5_i27 << 2)].re = c5_c_ref_pilots.re;
      c5_dcv8[c5_i28 + (c5_i27 << 2)].im = c5_c_ref_pilots.im;
    }
  }
  c5_sum((creal_T *)c5_dcv8, (creal_T *)c5_dcv9);
  for(c5_i29 = 0; c5_i29 < 2; c5_i29 = c5_i29 + 1) {
    c5_dcv10[c5_i29].re = c5_dcv9[c5_i29].re;
    c5_dcv10[c5_i29].im = c5_dcv9[c5_i29].im;
  }
  c5_angle((creal_T *)c5_dcv10, (creal_T *)c5_dcv11);
  for(c5_i30 = 0; c5_i30 < 2; c5_i30 = c5_i30 + 1) {
    c5_phase_error_est[c5_i30].re = c5_dcv11[c5_i30].re;
    c5_phase_error_est[c5_i30].im = c5_dcv11[c5_i30].im;
  }
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,25);
  for(c5_i31 = 0; c5_i31 < 2; c5_i31 = c5_i31 + 1) {
    for(c5_i32 = 0; c5_i32 < 48; c5_i32 = c5_i32 + 1) {
      c5_correction_phases[c5_i32 + 48 * c5_i31].re = 0.0;
      c5_correction_phases[c5_i32 + 48 * c5_i31].im = 0.0;
    }
  }
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,26);
  for(c5_i33 = 0; c5_i33 < 2; c5_i33 = c5_i33 + 1) {
    c5_dcv12[c5_i33].re = c5_phase_error_est[c5_i33].re;
    c5_dcv12[c5_i33].im = c5_phase_error_est[c5_i33].im;
  }
  c5_b_repmat((creal_T *)c5_dcv12, (creal_T *)c5_dcv13);
  for(c5_i34 = 0; c5_i34 < 2; c5_i34 = c5_i34 + 1) {
    for(c5_i35 = 0; c5_i35 < 48; c5_i35 = c5_i35 + 1) {
      c5_correction_phases[c5_i35 + 48 * c5_i34].re = c5_dcv13[c5_i35 + 48 *
        c5_i34].re;
      c5_correction_phases[c5_i35 + 48 * c5_i34].im = c5_dcv13[c5_i35 + 48 *
        c5_i34].im;
    }
  }
  /*  correct symbol using the phase estimate of this one OFDM symbol, */
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,29);
  for(c5_i36 = 0; c5_i36 < 2; c5_i36 = c5_i36 + 1) {
    for(c5_i37 = 0; c5_i37 < 48; c5_i37 = c5_i37 + 1) {
      c5_dcv14[c5_i37 + 48 * c5_i36].re = 0.0 * c5_correction_phases[c5_i37 + 48
        * c5_i36].re - -1.0 * c5_correction_phases[c5_i37 + 48 *
        c5_i36].im;
      c5_dcv14[c5_i37 + 48 * c5_i36].im = 0.0 * c5_correction_phases[c5_i37 + 48
        * c5_i36].im + -1.0 * c5_correction_phases[c5_i37 + 48 *
        c5_i36].re;
    }
  }
  c5_exp((creal_T *)c5_dcv14, (creal_T *)c5_dcv15);
  for(c5_i38 = 0; c5_i38 < 2; c5_i38 = c5_i38 + 1) {
    for(c5_i39 = 0; c5_i39 < 48; c5_i39 = c5_i39 + 1) {
      c5_b_corrected_syms[c5_i39 + 48 * c5_i38].re = c5_dcv15[c5_i39 + 48 *
        c5_i38].re * c5_b_freq_data_syms[c5_i39 + 48 * c5_i38].re -
        c5_dcv15[c5_i39 + 48 * c5_i38].im * c5_b_freq_data_syms[c5_i39 + 48 *
        c5_i38].im;
      c5_b_corrected_syms[c5_i39 + 48 * c5_i38].im = c5_dcv15[c5_i39 + 48 *
        c5_i38].re * c5_b_freq_data_syms[c5_i39 + 48 * c5_i38].im +
        c5_dcv15[c5_i39 + 48 * c5_i38].im * c5_b_freq_data_syms[c5_i39 + 48 *
        c5_i38].re;
    }
  }
  /*  search_win = 320; */
  /*  D = 16; */
  /*  delay_xcorr=rx_signal; */
  /*  ma_M=rx_signal; */
  /*  for i=1:search_win */
  /*    delay_xcorr(i)=rx_signal(i)*conj(rx_signal(D+i)); */
  /*  end */
  /*   */
  /*  for n=1:search_win */
  /*   */
  /*  sum_delay_xcorr=complex(0); */
  /*  for ii=1:2*D */
  /*    sum_delay_xcorr=sum_delay_xcorr+delay_xcorr(ii+n-1);   */
  /*  end */
  /*   sum_delay_xcorr2=abs(sum_delay_xcorr)^2; */
  /*    */
  /*    */
  /*   p=0; */
  /*   for iii=1:2*D */
  /*      pwr=abs(rx_signal(n+iii+D-1))^2; */
  /*      p=p+pwr; */
  /*   end */
  /*  p2=p^2; */
  /*   */
  /*  ma_M(n)=sum_delay_xcorr2/p2; */
  /*   */
  /*  end */
  /*  detected_packet = ma_M; */
  /*     rx_len = length(rx_signal); */
  /*      */
  /*     % Calculate the delayd correlation */
  /*     delay_xcorr = rx_signal(:,1:search_win+2*D).*conj(rx_signal(:,1*D+1:search_win+3*D)); */
  /*         */
  /*     % Moving average of the delayed correlation */
  /*     ma_delay_xcorr = abs(filter(ones(1,2*D), 1, delay_xcorr, [], 2)); */
  /*      */
  /*     % Moving average of received power */
  /*     ma_rx_pwr = filter(ones(1,2*D), 1, abs(rx_signal(:,1*D+1:search_win+3*D)).^2,[], 2); */
  /*      */
  /*     % The decision variable */
  /*     delay_len = length(ma_delay_xcorr); */
  /*     ma_M = ma_delay_xcorr(:,1:delay_len)./ma_rx_pwr(:,1:delay_len); */
  /*            */
  /*     % remove delay samples */
  /*     ma_M(:,1:2*D) = []; */
  /*      */
  /*     % combine antennas, if rx diversity is used */
  /*     ma_M = sum(ma_M, 1); */
  /*      */
  /*     if ~sim_options.UseRxDiv */
  /*        threshold = 0.75; */
  /*     else */
  /*        threshold = 1.5; */
  /*     end */
  /*      */
  /*     thres_idx = find(ma_M > threshold); */
  /*     if isempty(thres_idx) */
  /*        thres_idx = 1; */
  /*     else */
  /*        thres_idx = thres_idx(1); */
  /*     end */
  /*      */
  /*  else */
  /*     thres_idx = sim_consts.ExtraNoiseSamples; */
  /*  end; */
  /*   */
  /*  % check if the packet has been detected too late,  */
  /*  % > sim_consts.extra_noise_samples + 35 index  */
  /*  % is out of range of the fine timing algorithm */
  /*  % This prevents simulation error for code running out samples */
  /*  if thres_idx > sim_consts.ExtraNoiseSamples + 35 */
  /*     thres_idx = 1; */
  /*  end */
  /*   */
  /*  detected_packet = rx_signal(:,thres_idx:length(rx_signal)); */
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,-29);
  sf_debug_symbol_scope_pop();
}

static void c5_repmat(creal_T *c5_a, creal_T *c5_b)
{
  int32_T c5_i40;
  int32_T c5_i41;
  int32_T c5_ib;
  real_T c5_jtilecol;
  int32_T c5_ia;
  real_T c5_k;
  int32_T c5_b_a;
  int32_T c5_c_a;
  for(c5_i40 = 0; c5_i40 < 2; c5_i40 = c5_i40 + 1) {
    for(c5_i41 = 0; c5_i41 < 4; c5_i41 = c5_i41 + 1) {
      c5_b[c5_i41 + (c5_i40 << 2)].re = 0.0;
      c5_b[c5_i41 + (c5_i40 << 2)].im = 0.0;
    }
  }
  c5_ib = 1;
  for(c5_jtilecol = 1.0; c5_jtilecol <= 2.0; c5_jtilecol = c5_jtilecol + 1.0) {
    c5_ia = 1;
    for(c5_k = 1.0; c5_k <= 4.0; c5_k = c5_k + 1.0) {
      c5_b[_SFD_EML_ARRAY_BOUNDS_CHECK("b", _SFD_INTEGER_CHECK("ib",
        (real_T)c5_ib), 1, 8, 1) - 1].re = c5_a[_SFD_EML_ARRAY_BOUNDS_CHECK(
        "a", _SFD_INTEGER_CHECK("ia", (real_T)c5_ia), 1, 4, 1) - 1].re;
      c5_b[_SFD_EML_ARRAY_BOUNDS_CHECK("b", _SFD_INTEGER_CHECK("ib",
        (real_T)c5_ib), 1, 8, 1) - 1].im = c5_a[_SFD_EML_ARRAY_BOUNDS_CHECK(
        "a", _SFD_INTEGER_CHECK("ia", (real_T)c5_ia), 1, 4, 1) - 1].im;
      c5_b_a = c5_ia;
      c5_ia = c5_b_a + 1;
      c5_c_a = c5_ib;
      c5_ib = c5_c_a + 1;
    }
  }
}

static void c5_squeeze(creal_T *c5_a, creal_T *c5_b)
{
  int32_T c5_i42;
  int32_T c5_i43;
  creal_T c5_x[8];
  int32_T c5_i44;
  int32_T c5_i45;
  int32_T c5_i46;
  real_T c5_y[8];
  int32_T c5_i47;
  int32_T c5_iv1[8];
  int32_T c5_i48;
  for(c5_i42 = 0; c5_i42 < 2; c5_i42 = c5_i42 + 1) {
    for(c5_i43 = 0; c5_i43 < 4; c5_i43 = c5_i43 + 1) {
      c5_x[c5_i43 + (c5_i42 << 2)].re = c5_a[c5_i43 + (c5_i42 << 2)].re;
      c5_x[c5_i43 + (c5_i42 << 2)].im = c5_a[c5_i43 + (c5_i42 << 2)].im;
    }
  }
  for(c5_i44 = 0; c5_i44 < 2; c5_i44 = c5_i44 + 1) {
    for(c5_i45 = 0; c5_i45 < 4; c5_i45 = c5_i45 + 1) {
      c5_b[c5_i45 + (c5_i44 << 2)].re = 0.0;
      c5_b[c5_i45 + (c5_i44 << 2)].im = 0.0;
    }
  }
  for(c5_i46 = 0; c5_i46 < 8; c5_i46 = c5_i46 + 1) {
    c5_y[c5_i46] = 1.0 + (real_T)c5_i46;
  }
  for(c5_i47 = 0; c5_i47 < 8; c5_i47 = c5_i47 + 1) {
    c5_iv1[c5_i47] = (int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("y",
     (int32_T)_SFD_INTEGER_CHECK("", c5_y[c5_i47]), 1, 8, 1) - 1;
  }
  for(c5_i48 = 0; c5_i48 < 8; c5_i48 = c5_i48 + 1) {
    c5_b[c5_iv1[c5_i48]].re = c5_x[c5_i48].re;
    c5_b[c5_iv1[c5_i48]].im = c5_x[c5_i48].im;
  }
}

static void c5_sum(creal_T *c5_x, creal_T *c5_y)
{
  int32_T c5_i49;
  int32_T c5_i50;
  creal_T c5_b_x[8];
  int32_T c5_i51;
  creal_T c5_c_x[2];
  int32_T c5_i52;
  int32_T c5_ix;
  int32_T c5_iy;
  int32_T c5_i;
  int32_T c5_ixstart;
  int32_T c5_a;
  creal_T c5_d_x;
  creal_T c5_s;
  real_T c5_k;
  int32_T c5_b_a;
  creal_T c5_e_x;
  creal_T c5_r;
  int32_T c5_c_a;
  for(c5_i49 = 0; c5_i49 < 2; c5_i49 = c5_i49 + 1) {
    for(c5_i50 = 0; c5_i50 < 4; c5_i50 = c5_i50 + 1) {
      c5_b_x[c5_i50 + (c5_i49 << 2)].re = c5_x[c5_i50 + (c5_i49 << 2)].re;
      c5_b_x[c5_i50 + (c5_i49 << 2)].im = c5_x[c5_i50 + (c5_i49 << 2)].im;
    }
  }
  for(c5_i51 = 0; c5_i51 < 2; c5_i51 = c5_i51 + 1) {
    c5_c_x[c5_i51].re = 0.0;
    c5_c_x[c5_i51].im = 0.0;
  }
  for(c5_i52 = 0; c5_i52 < 2; c5_i52 = c5_i52 + 1) {
    c5_y[c5_i52].re = c5_c_x[c5_i52].re;
    c5_y[c5_i52].im = c5_c_x[c5_i52].im;
  }
  c5_ix = 0;
  c5_iy = 0;
  for(c5_i = 1; c5_i < 3; c5_i = c5_i + 1) {
    c5_ixstart = c5_ix;
    c5_a = c5_ixstart;
    c5_ixstart = c5_a + 1;
    c5_ix = c5_ixstart;
    c5_d_x.re = c5_b_x[_SFD_EML_ARRAY_BOUNDS_CHECK("x", _SFD_INTEGER_CHECK("ix",
      (real_T)c5_ix), 1, 8, 1) - 1].re;
    c5_d_x.im = c5_b_x[_SFD_EML_ARRAY_BOUNDS_CHECK("x", _SFD_INTEGER_CHECK("ix",
      (real_T)c5_ix), 1, 8, 1) - 1].im;
    c5_s.re = c5_d_x.re;
    c5_s.im = c5_d_x.im;
    for(c5_k = 2.0; c5_k <= 4.0; c5_k = c5_k + 1.0) {
      c5_b_a = c5_ix;
      c5_ix = c5_b_a + 1;
      c5_e_x.re = c5_b_x[_SFD_EML_ARRAY_BOUNDS_CHECK("x",
       _SFD_INTEGER_CHECK("ix", (real_T)c5_ix), 1, 8, 1) - 1].re;
      c5_e_x.im = c5_b_x[_SFD_EML_ARRAY_BOUNDS_CHECK("x",
       _SFD_INTEGER_CHECK("ix", (real_T)c5_ix), 1, 8, 1) - 1].im;
      c5_r.re = c5_e_x.re;
      c5_r.im = c5_e_x.im;
      c5_s.re = c5_s.re + c5_r.re;
      c5_s.im = c5_s.im + c5_r.im;
    }
    c5_c_a = c5_iy;
    c5_iy = c5_c_a + 1;
    c5_y[_SFD_EML_ARRAY_BOUNDS_CHECK("y", _SFD_INTEGER_CHECK("iy",
      (real_T)c5_iy), 1, 2, 1) - 1].re = c5_s.re;
    c5_y[_SFD_EML_ARRAY_BOUNDS_CHECK("y", _SFD_INTEGER_CHECK("iy",
      (real_T)c5_iy), 1, 2, 1) - 1].im = c5_s.im;
  }
}

static void c5_angle(creal_T *c5_x, creal_T *c5_b_x)
{
  int32_T c5_i53;
  int32_T c5_i54;
  real_T c5_Y[2];
  int32_T c5_i55;
  real_T c5_X[2];
  int32_T c5_i56;
  real_T c5_R[2];
  real_T c5_k;
  real_T c5_b_k;
  real_T c5_yk;
  real_T c5_xk;
  real_T c5_y;
  real_T c5_c_x;
  real_T c5_d_x;
  boolean_T c5_b;
  real_T c5_e_x;
  boolean_T c5_b_b;
  real_T c5_r;
  real_T c5_f_x;
  boolean_T c5_c_b;
  real_T c5_g_x;
  boolean_T c5_d_b;
  real_T c5_h_x;
  real_T c5_i_x;
  real_T c5_b_xk;
  real_T c5_j_x;
  boolean_T c5_e_b;
  real_T c5_k_x;
  real_T c5_l_x;
  real_T c5_c_xk;
  real_T c5_m_x;
  boolean_T c5_f_b;
  real_T c5_n_x;
  real_T c5_o_x;
  int32_T c5_i57;
  for(c5_i53 = 0; c5_i53 < 2; c5_i53 = c5_i53 + 1) {
    c5_b_x[c5_i53].re = c5_x[c5_i53].re;
    c5_b_x[c5_i53].im = c5_x[c5_i53].im;
  }
  for(c5_i54 = 0; c5_i54 < 2; c5_i54 = c5_i54 + 1) {
    c5_Y[c5_i54] = c5_b_x[c5_i54].im;
  }
  for(c5_i55 = 0; c5_i55 < 2; c5_i55 = c5_i55 + 1) {
    c5_X[c5_i55] = c5_b_x[c5_i55].re;
  }
  for(c5_i56 = 0; c5_i56 < 2; c5_i56 = c5_i56 + 1) {
    c5_R[c5_i56] = 0.0;
  }
  for(c5_k = 1.0; c5_k <= 2.0; c5_k = c5_k + 1.0) {
    c5_b_k = c5_k;
    c5_yk = c5_Y[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("Y",
     (int32_T)_SFD_INTEGER_CHECK("k", c5_b_k), 1, 2, 1) - 1];
    c5_xk = c5_X[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("X",
     (int32_T)_SFD_INTEGER_CHECK("k", c5_b_k), 1, 2, 1) - 1];
    c5_y = c5_yk;
    c5_c_x = c5_xk;
    c5_d_x = c5_c_x;
    c5_b = rtIsNaN(c5_d_x);
    if(c5_b) {
      goto label_1;
    } else {
      c5_e_x = c5_y;
      c5_b_b = rtIsNaN(c5_e_x);
      if(c5_b_b) {
        goto label_1;
      } else {
        c5_f_x = c5_y;
        c5_c_b = rtIsInf(c5_f_x);
        if(c5_c_b) {
          c5_g_x = c5_c_x;
          c5_d_b = rtIsInf(c5_g_x);
          if(c5_d_b) {
            c5_h_x = c5_c_x;
            c5_i_x = c5_h_x;
            c5_b_xk = c5_i_x;
            c5_j_x = c5_b_xk;
            c5_e_b = rtIsNaN(c5_j_x);
            if(c5_e_b) {
              c5_i_x = rtNaN;
            } else if(c5_b_xk > 0.0) {
              c5_i_x = 1.0;
            } else if(c5_b_xk < 0.0) {
              c5_i_x = -1.0;
            }
            c5_k_x = c5_y;
            c5_l_x = c5_k_x;
            c5_c_xk = c5_l_x;
            c5_m_x = c5_c_xk;
            c5_f_b = rtIsNaN(c5_m_x);
            if(c5_f_b) {
              c5_l_x = rtNaN;
            } else if(c5_c_xk > 0.0) {
              c5_l_x = 1.0;
            } else if(c5_c_xk < 0.0) {
              c5_l_x = -1.0;
            }
            c5_n_x = atan2(c5_l_x, c5_i_x);
            c5_r = c5_n_x;

⌨️ 快捷键说明

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