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

📄 c2_std5.c

📁 mmo 信道估计算法 matlab 仿真 实现了无线信道环境下的信道估计
💻 C
📖 第 1 页 / 共 4 页
字号:
  }
  CV_EML_FOR(0, 0, 0);
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,44);
  for(c2_i8 = 0; c2_i8 < 138; c2_i8 = c2_i8 + 1) {
    c2_dv0[c2_i8] = c2_ma_M1[32 + c2_i8];
  }
  c2_b_abs((real_T *)c2_dv0, (real_T *)c2_dv1);
  for(c2_i9 = 0; c2_i9 < 138; c2_i9 = c2_i9 + 1) {
    c2_dv2[c2_i9] = c2_ma_M2[32 + c2_i9];
  }
  c2_b_abs((real_T *)c2_dv2, (real_T *)c2_dv3);
  for(c2_i10 = 0; c2_i10 < 138; c2_i10 = c2_i10 + 1) {
    c2_dv4[c2_i10] = c2_dv1[c2_i10] - c2_dv3[c2_i10];
  }
  c2_b_abs((real_T *)c2_dv4, (real_T *)c2_dv5);
  for(c2_i11 = 0; c2_i11 < 138; c2_i11 = c2_i11 + 1) {
    c2_t[c2_i11] = c2_dv5[c2_i11];
  }
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,45);
  for(c2_i12 = 0; c2_i12 < 138; c2_i12 = c2_i12 + 1) {
    c2_dv6[c2_i12] = c2_t[c2_i12];
  }
  c2_max((real_T *)c2_dv6, &c2_b_max_peak_long, &c2_b_long_search_idx);
  c2_max_peak_long = c2_b_max_peak_long;
  c2_long_search_idx = c2_b_long_search_idx;
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,46);
  *c2_b_coarse_time_est = (c2_long_search_idx + 32.0) + 32.0;
  /* 161 */
  /*  Frequency error estimation and correction */
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,48);
  c2_phase.re = 0.0;
  c2_phase.im = 0.0;
  c2_iii = 1.0;
  for(c2_b_iii = 1.0; c2_b_iii <= 16.0; c2_b_iii = c2_b_iii + 1.0) {
    c2_iii = c2_b_iii;
    CV_EML_FOR(0, 2, 1);
    _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,52);
    c2_h_input_signal.re =
      c2_b_input_signal[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("input_signal",
     (int32_T)_SFD_INTEGER_CHECK("", (((
         c2_long_search_idx + 32.0) - c2_D) + c2_iii) - 1.0), 1, 480, 1) - 1].re;
    c2_h_input_signal.im =
      -c2_b_input_signal[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("input_signal",
     (int32_T)_SFD_INTEGER_CHECK("", (((
         c2_long_search_idx + 32.0) - c2_D) + c2_iii) - 1.0), 1, 480, 1) - 1].im;
    c2_i_input_signal.re =
      c2_b_input_signal[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("input_signal",
     (int32_T)_SFD_INTEGER_CHECK("", (((
         c2_long_search_idx + 32.0) - 2.0 * c2_D) + c2_iii) - 1.0), 1, 480, 1) -
    1].re * c2_h_input_signal.re - c2_b_input_signal[(int32_T)
    _SFD_EML_ARRAY_BOUNDS_CHECK("input_signal", (int32_T)_SFD_INTEGER_CHECK("",
      (((c2_long_search_idx + 32.0) - 2.0 * c2_D) + c2_iii) -
      1.0), 1, 480, 1) - 1].im * c2_h_input_signal.im;
    c2_i_input_signal.im =
      c2_b_input_signal[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("input_signal",
     (int32_T)_SFD_INTEGER_CHECK("", (((
         c2_long_search_idx + 32.0) - 2.0 * c2_D) + c2_iii) - 1.0), 1, 480, 1) -
    1].re * c2_h_input_signal.im + c2_b_input_signal[(int32_T)
    _SFD_EML_ARRAY_BOUNDS_CHECK("input_signal", (int32_T)_SFD_INTEGER_CHECK("",
      (((c2_long_search_idx + 32.0) - 2.0 * c2_D) + c2_iii) -
      1.0), 1, 480, 1) - 1].im * c2_h_input_signal.re;
    c2_phase.re = c2_phase.re + c2_i_input_signal.re;
    c2_phase.im = c2_phase.im + c2_i_input_signal.im;
  }
  CV_EML_FOR(0, 2, 0);
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,54);
  c2_e_x.re = c2_phase.re;
  c2_e_x.im = c2_phase.im;
  c2_f_x.re = c2_e_x.re;
  c2_f_x.im = c2_e_x.im;
  c2_Y = c2_f_x.im;
  c2_X = c2_f_x.re;
  c2_yk = c2_Y;
  c2_xk = c2_X;
  c2_g_y = c2_yk;
  c2_g_x = c2_xk;
  c2_h_x = c2_g_x;
  c2_b = rtIsNaN(c2_h_x);
  if(c2_b) {
    goto label_1;
  } else {
    c2_i_x = c2_g_y;
    c2_b_b = rtIsNaN(c2_i_x);
    if(c2_b_b) {
      goto label_1;
    } else {
      c2_j_x = c2_g_y;
      c2_c_b = rtIsInf(c2_j_x);
      if(c2_c_b) {
        c2_k_x = c2_g_x;
        c2_d_b = rtIsInf(c2_k_x);
        if(c2_d_b) {
          c2_l_x = c2_g_x;
          c2_m_x = c2_l_x;
          c2_b_xk = c2_m_x;
          c2_n_x = c2_b_xk;
          c2_e_b = rtIsNaN(c2_n_x);
          if(c2_e_b) {
            c2_m_x = rtNaN;
          } else if(c2_b_xk > 0.0) {
            c2_m_x = 1.0;
          } else if(c2_b_xk < 0.0) {
            c2_m_x = -1.0;
          }
          c2_o_x = c2_g_y;
          c2_p_x = c2_o_x;
          c2_c_xk = c2_p_x;
          c2_q_x = c2_c_xk;
          c2_f_b = rtIsNaN(c2_q_x);
          if(c2_f_b) {
            c2_p_x = rtNaN;
          } else if(c2_c_xk > 0.0) {
            c2_p_x = 1.0;
          } else if(c2_c_xk < 0.0) {
            c2_p_x = -1.0;
          }
          c2_r_x = atan2(c2_p_x, c2_m_x);
          c2_R = c2_r_x;
          goto label_2;
        }
      }
    }
  }
  if(c2_g_x == 0.0) {
    if(c2_g_y > 0.0) {
      c2_R = 1.5707963267948966E+000;
    } else if(c2_g_y < 0.0) {
      c2_R = -1.5707963267948966E+000;
    } else {
      c2_R = 0.0;
    }
  } else {
    c2_s_x = atan2(c2_g_y, c2_g_x);
    c2_R = c2_s_x;
  }
  goto label_2;
  label_1:;
  c2_R = rtNaN;
  label_2:;
  c2_f_x.re = c2_R;
  c2_f_x.im = 0.0;
  c2_t_x.re = -c2_f_x.re;
  c2_t_x.im = -c2_f_x.im;
  c2_u_x.re = c2_N * c2_t_x.re;
  c2_u_x.im = c2_N * c2_t_x.im;
  c2_freq_est = c2_mrdivide(c2_u_x, 1.0053096491487338E+002);
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,55);
  c2_b_freq_offset->re = 312500.0 * c2_freq_est.re;
  c2_b_freq_offset->im = 312500.0 * c2_freq_est.im;
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,56);
  c2_c_freq_offset.re = c2_b_freq_offset->re - 2.0E+005;
  c2_c_freq_offset.im = c2_b_freq_offset->im;
  *c2_b_coarse_errfre = c2_abs(c2_c_freq_offset);
  /* @f=312.5kHz */
  /*   detected_packet =input_signal(:,coarse_time_est:length(input_signal)); */
  /*  off_frequency bu chang */
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,62);
  for(c2_i13 = 0; c2_i13 < 480; c2_i13 = c2_i13 + 1) {
    c2_c_A[c2_i13] = (real_T)c2_i13;
  }
  for(c2_i14 = 0; c2_i14 < 480; c2_i14 = c2_i14 + 1) {
    c2_v_x[c2_i14] = c2_c_A[c2_i14];
  }
  for(c2_i15 = 0; c2_i15 < 480; c2_i15 = c2_i15 + 1) {
    c2_time_base1[c2_i15] = c2_v_x[c2_i15] / 2.0E+007;
  }
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,63);
  for(c2_i16 = 0; c2_i16 < 480; c2_i16 = c2_i16 + 1) {
    c2_dv7[c2_i16] = c2_time_base1[c2_i16];
  }
  for(c2_i17 = 0; c2_i17 < 480; c2_i17 = c2_i17 + 1) {
    c2_time_base2[c2_i17] = c2_dv7[c2_i17];
  }
  sf_mex_printf("%s =\\n", "time_base2");
  for(c2_i18 = 0; c2_i18 < 480; c2_i18 = c2_i18 + 1) {
    c2_u[c2_i18] = c2_dv7[c2_i18];
  }
  c2_h_y = NULL;
  sf_mex_assign(&c2_h_y, sf_mex_create(&c2_u, "y", 0, 0U, 1U, 1, 480));
  sf_mex_call("disp", 0U, 1U, 14, c2_h_y);
  /*  create phase_rotation vector */
  /*   phase_rotation1 = repmat(exp(1i*2*pi*freq_offset*time_base2),n_signals,1); */
  /*  phase_rotation2=ones(1,480); */
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,67);
  c2_dc0.re = 0.0 * c2_b_freq_offset->re - -6.2831853071795862E+000 *
    c2_b_freq_offset->im;
  c2_dc0.im = 0.0 * c2_b_freq_offset->im + -6.2831853071795862E+000 *
    c2_b_freq_offset->re;
  for(c2_i19 = 0; c2_i19 < 480; c2_i19 = c2_i19 + 1) {
    c2_dcv1[c2_i19].re = c2_time_base2[c2_i19] * c2_dc0.re;
    c2_dcv1[c2_i19].im = c2_time_base2[c2_i19] * c2_dc0.im;
  }
  c2_exp((creal_T *)c2_dcv1, (creal_T *)c2_dcv2);
  for(c2_i20 = 0; c2_i20 < 480; c2_i20 = c2_i20 + 1) {
    c2_phase_rotation2[c2_i20].re = c2_dcv2[c2_i20].re;
    c2_phase_rotation2[c2_i20].im = c2_dcv2[c2_i20].im;
  }
  /*  and apply it to the signal; */
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,69);
  for(c2_i21 = 0; c2_i21 < 480; c2_i21 = c2_i21 + 1) {
    c2_offset_sig[c2_i21].re = c2_b_input_signal[c2_i21].re *
      c2_phase_rotation2[c2_i21].re - c2_b_input_signal[c2_i21].im *
      c2_phase_rotation2[c2_i21].im;
    c2_offset_sig[c2_i21].im = c2_b_input_signal[c2_i21].re *
      c2_phase_rotation2[c2_i21].im + c2_b_input_signal[c2_i21].im *
      c2_phase_rotation2[c2_i21].re;
  }
  /*  syn = ma_M; */
  /*  coarse_time_est=long_search_idx+20+160; */
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,75);
  for(c2_i22 = 0; c2_i22 < 1000; c2_i22 = c2_i22 + 1) {
    c2_real_syble[c2_i22] = 0.0;
  }
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,76);
  for(c2_i23 = 0; c2_i23 < 1000; c2_i23 = c2_i23 + 1) {
    c2_imag_syble[c2_i23] = 0.0;
  }
  c2_c_coarse_time_est = *c2_b_coarse_time_est;
  c2_iii = c2_c_coarse_time_est;
  for(c2_c_iii = c2_c_coarse_time_est; c2_c_iii <= 480.0; c2_c_iii = c2_c_iii +
   1.0) {
    c2_iii = c2_c_iii;
    CV_EML_FOR(0, 3, 1);
    _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,78);
    c2_real_syble[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("real_syble",
     (int32_T)_SFD_INTEGER_CHECK("", (c2_iii - *c2_b_coarse_time_est) +
      1.0), 1, 1000, 1) - 1] =
      c2_offset_sig[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("offset_sig",
     (int32_T)_SFD_INTEGER_CHECK("iii", c2_iii)
     , 1, 480, 1) - 1].re;
    _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,79);
    c2_imag_syble[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("imag_syble",
     (int32_T)_SFD_INTEGER_CHECK("", (c2_iii - *c2_b_coarse_time_est) +
      1.0), 1, 1000, 1) - 1] =
      c2_offset_sig[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("offset_sig",
     (int32_T)_SFD_INTEGER_CHECK("iii", c2_iii)
     , 1, 480, 1) - 1].im;
  }
  CV_EML_FOR(0, 3, 0);
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,81);
  for(c2_i24 = 0; c2_i24 < 1000; c2_i24 = c2_i24 + 1) {
    c2_b_dreal_syble[c2_i24] = c2_real_syble[c2_i24];
  }
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,82);
  for(c2_i25 = 0; c2_i25 < 1000; c2_i25 = c2_i25 + 1) {
    c2_b_dimag_syble[c2_i25] = c2_imag_syble[c2_i25];
  }
  /*        */
  /*      */
  /*  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 = input_signal(:,thres_idx:length(input_signal)); */
  _SFD_EML_CALL(STATE_DURING_DURING_ACTION_TAG,0,-82);
  sf_debug_symbol_scope_pop();
}

static real_T c2_abs(creal_T c2_x)
{
  real_T c2_x1;
  real_T c2_x2;
  real_T c2_a;
  real_T c2_b;
  real_T c2_b_x;
  real_T c2_b_y;
  real_T c2_c_x;
  real_T c2_c_y;
  c2_x1 = c2_x.re;
  c2_x2 = c2_x.im;
  c2_a = fabs(c2_x1);
  c2_b = fabs(c2_x2);
  if(c2_a == 0.0) {
    return c2_b;
  } else if(c2_b == 0.0) {
    return c2_a;
  } else if(c2_a == c2_b) {
    return c2_a * 1.4142135623730951E+000;
  } else if(c2_b > c2_a) {
    c2_b_x = c2_a;
    c2_b_y = c2_b;
    c2_a = c2_b_x / c2_b_y;
    return c2_b * sqrt(1.0 + c2_a * c2_a);
  } else {
    c2_c_x = c2_b;
    c2_c_y = c2_a;
    c2_b = c2_c_x / c2_c_y;
    return c2_a * sqrt(1.0 + c2_b * c2_b);
  }
}

static real_T c2_mpower(real_T c2_a)
{
  real_T c2_b_a;
  real_T c2_ak;
  c2_b_a = c2_a;
  c2_ak = c2_b_a;
  return pow(c2_ak, 2.0);
}

static void c2_b_abs(real_T *c2_x, real_T *c2_y)
{
  int32_T c2_i26;
  real_T c2_k;
  real_T c2_b_k;
  for(c2_i26 = 0; c2_i26 < 138; c2_i26 = c2_i26 + 1) {
    c2_y[c2_i26] = 0.0;
  }
  for(c2_k = 1.0; c2_k <= 138.0; c2_k = c2_k + 1.0) {
    c2_b_k = c2_k;
    c2_y[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("y",
     (int32_T)_SFD_INTEGER_CHECK("k", c2_b_k), 1, 138, 1) - 1] =
      fabs(c2_x[(int32_T)
      _SFD_EML_ARRAY_BOUNDS_CHECK("x", (int32_T)_SFD_INTEGER_CHECK("k", c2_b_k),
      1, 138, 1) - 1]);
  }
}

static void c2_max(real_T *c2_x, real_T *c2_maxval, real_T *c2_indx)
{
  int32_T c2_i27;
  real_T c2_b_x[138];
  int32_T c2_i28;
  real_T c2_c_x[138];
  real_T c2_extremum;
  int32_T c2_itmp;
  int32_T c2_ix;
  int32_T c2_k;
  int32_T c2_b_k;
  int32_T c2_a;
  real_T c2_d_x;
  boolean_T c2_b;
  real_T c2_e_x;
  boolean_T c2_b_b;
  real_T c2_b_maxval;
  int32_T c2_b_itmp;
  real_T c2_b_indx;
  for(c2_i27 = 0; c2_i27 < 138; c2_i27 = c2_i27 + 1) {
    c2_b_x[c2_i27] = c2_x[c2_i27];
  }
  for(c2_i28 = 0; c2_i28 < 138; c2_i28 = c2_i28 + 1) {
    c2_c_x[c2_i28] = c2_b_x[c2_i28];
  }
  c2_extremum = c2_c_x[0];
  c2_itmp = 1;
  c2_ix = 1;
  for(c2_k = 2; c2_k < 139; c2_k = c2_k + 1) {
    c2_b_k = c2_k;
    c2_a = c2_ix;
    c2_ix = c2_a + 1;
    c2_d_x = c2_c_x[_SFD_EML_ARRAY_BOUNDS_CHECK("x", _SFD_INTEGER_CHECK("ix",
      (real_T)c2_ix), 1, 138, 1) - 1];
    c2_b = rtIsNaN(c2_d_x);
    if(!c2_b) {
      c2_e_x = c2_extremum;
      c2_b_b = rtIsNaN(c2_e_x);
      if(c2_b_b) {
      } else if(c2_c_x[_SFD_EML_ARRAY_BOUNDS_CHECK("x", _SFD_INTEGER_CHECK("ix",
         (real_T)c2_ix), 1, 138, 1) - 1] > c2_extremum) {
      } else {
        goto label_1;
      }
      c2_extremum = c2_c_x[_SFD_EML_ARRAY_BOUNDS_CHECK("x",
       _SFD_INTEGER_CHECK("ix", (real_T)c2_ix), 1, 138, 1) - 1];
      c2_itmp = c2_b_k;
      label_1:;
    }
  }
  c2_b_maxval = c2_extremum;
  c2_b_itmp = c2_itmp;
  c2_b_indx = (real_T)c2_b_itmp;
  *c2_maxval = c2_b_maxval;
  *c2_indx = c2_b_indx;
}

static creal_T c2_mrdivide(creal_T c2_A, real_T c2_B)
{
  creal_T c2_y;
  creal_T c2_x;
  real_T c2_b_y;
  creal_T c2_b_x;
  real_T c2_c_y;
  creal_T c2_xk;
  real_T c2_yk;
  real_T c2_ar;
  real_T c2_ai;
  real_T c2_br;
  real_T c2_cr;
  real_T c2_ci;
  c2_x.re = c2_A.re;
  c2_x.im = c2_A.im;
  c2_b_y = c2_B;
  c2_b_x.re = c2_x.re;
  c2_b_x.im = c2_x.im;
  c2_c_y = c2_b_y;
  c2_xk.re = c2_b_x.re;
  c2_xk.im = c2_b_x.im;
  c2_yk = c2_c_y;
  c2_ar = c2_xk.re;
  c2_ai = c2_xk.im;
  c2_br = c2_yk;
  if(c2_ai == 0.0) {
    c2_cr = c2_ar / c2_br;
    c2_ci = 0.0;
  } else {
    c2_ci = c2_ai / c2_br;
    c2_cr = c2_ar / c2_br;
  }
  c2_y.re = c2_cr;
  c2_y.im = c2_ci;
  return c2_y;
}

static void c2_exp(creal_T *c2_x, creal_T *c2_b_x)
{
  int32_T c2_i29;
  real_T c2_k;
  real_T c2_b_k;
  creal_T c2_xk;
  real_T c2_r;
  for(c2_i29 = 0; c2_i29 < 480; c2_i29 = c2_i29 + 1) {
    c2_b_x[c2_i29].re = c2_x[c2_i29].re;
    c2_b_x[c2_i29].im = c2_x[c2_i29].im;
  }
  for(c2_k = 1.0; c2_k <= 480.0; c2_k = c2_k + 1.0) {
    c2_b_k = c2_k;
    c2_xk.re = c2_b_x[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("x",
     (int32_T)_SFD_INTEGER_CHECK("k", c2_b_k), 1, 480, 1) - 1].re;
    c2_xk.im = c2_b_x[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("x",
     (int32_T)_SFD_INTEGER_CHECK("k", c2_b_k), 1, 480, 1) - 1].im;
    c2_r = exp(c2_xk.re);
    c2_b_x[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("x",
     (int32_T)_SFD_INTEGER_CHECK("k", c2_b_k), 1, 480, 1) - 1].re = c2_r *
      cos(c2_xk.im);
    c2_b_x[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("x",
     (int32_T)_SFD_INTEGER_CHECK("k", c2_b_k), 1, 480, 1) - 1].im = c2_r *
      sin(c2_xk.im);
  }

⌨️ 快捷键说明

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