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

📄 c3_std5.c

📁 mmo 信道估计算法 matlab 仿真 实现了无线信道环境下的信道估计
💻 C
📖 第 1 页 / 共 5 页
字号:
  /*   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,-75);
  sf_debug_symbol_scope_pop();
}

static real_T c3_abs(creal_T c3_x)
{
  return c3_eml_dlapy2(c3_x.re, c3_x.im);
}

static real_T c3_eml_dlapy2(real_T c3_x1, real_T c3_x2)
{
  real_T c3_a;
  real_T c3_b;
  real_T c3_x;
  real_T c3_b_y;
  real_T c3_b_x;
  real_T c3_c_y;
  c3_a = fabs(c3_x1);
  c3_b = fabs(c3_x2);
  if(c3_a == 0.0) {
    return c3_b;
  } else if(c3_b == 0.0) {
    return c3_a;
  } else if(c3_a == c3_b) {
    return c3_a * 1.4142135623730951E+000;
  } else if(c3_b > c3_a) {
    c3_x = c3_a;
    c3_b_y = c3_b;
    c3_a = c3_x / c3_b_y;
    return c3_b * sqrt(1.0 + c3_a * c3_a);
  } else {
    c3_b_x = c3_b;
    c3_c_y = c3_a;
    c3_b = c3_b_x / c3_c_y;
    return c3_a * sqrt(1.0 + c3_b * c3_b);
  }
}

static void c3_b_abs(creal_T *c3_x, real_T *c3_y)
{
  int32_T c3_i28;
  real_T c3_k;
  real_T c3_b_k;
  for(c3_i28 = 0; c3_i28 < 128; c3_i28 = c3_i28 + 1) {
    c3_y[c3_i28] = 0.0;
  }
  for(c3_k = 1.0; c3_k <= 128.0; c3_k = c3_k + 1.0) {
    c3_b_k = c3_k;
    c3_y[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("y",
     (int32_T)_SFD_INTEGER_CHECK("k", c3_b_k), 1, 128, 1) - 1] =
      c3_eml_dlapy2(c3_x[(
      int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("x", (int32_T)_SFD_INTEGER_CHECK("k",
       c3_b_k), 1, 128, 1) - 1].re, c3_x[(int32_T)
     _SFD_EML_ARRAY_BOUNDS_CHECK("x", (int32_T)_SFD_INTEGER_CHECK("k", c3_b_k),
      1, 128, 1) - 1].im);
  }
}

static void c3_sum(real_T *c3_x, real_T *c3_y)
{
  int32_T c3_i29;
  real_T c3_b_x[128];
  int32_T c3_i30;
  real_T c3_c_x[128];
  int32_T c3_i31;
  for(c3_i29 = 0; c3_i29 < 128; c3_i29 = c3_i29 + 1) {
    c3_b_x[c3_i29] = c3_x[c3_i29];
  }
  for(c3_i30 = 0; c3_i30 < 128; c3_i30 = c3_i30 + 1) {
    c3_c_x[c3_i30] = c3_b_x[c3_i30];
  }
  for(c3_i31 = 0; c3_i31 < 128; c3_i31 = c3_i31 + 1) {
    c3_y[c3_i31] = c3_c_x[c3_i31];
  }
}

static void c3_max(real_T *c3_x, real_T *c3_maxval, real_T *c3_indx)
{
  int32_T c3_i32;
  real_T c3_b_x[128];
  int32_T c3_i33;
  real_T c3_c_x[128];
  real_T c3_extremum;
  int32_T c3_itmp;
  int32_T c3_ix;
  int32_T c3_k;
  int32_T c3_b_k;
  int32_T c3_a;
  real_T c3_d_x;
  boolean_T c3_b;
  real_T c3_e_x;
  boolean_T c3_b_b;
  real_T c3_b_maxval;
  int32_T c3_b_itmp;
  real_T c3_b_indx;
  for(c3_i32 = 0; c3_i32 < 128; c3_i32 = c3_i32 + 1) {
    c3_b_x[c3_i32] = c3_x[c3_i32];
  }
  for(c3_i33 = 0; c3_i33 < 128; c3_i33 = c3_i33 + 1) {
    c3_c_x[c3_i33] = c3_b_x[c3_i33];
  }
  c3_extremum = c3_c_x[0];
  c3_itmp = 1;
  c3_ix = 1;
  for(c3_k = 2; c3_k < 129; c3_k = c3_k + 1) {
    c3_b_k = c3_k;
    c3_a = c3_ix;
    c3_ix = c3_a + 1;
    c3_d_x = c3_c_x[_SFD_EML_ARRAY_BOUNDS_CHECK("x", _SFD_INTEGER_CHECK("ix",
      (real_T)c3_ix), 1, 128, 1) - 1];
    c3_b = rtIsNaN(c3_d_x);
    if(!c3_b) {
      c3_e_x = c3_extremum;
      c3_b_b = rtIsNaN(c3_e_x);
      if(c3_b_b) {
      } else if(c3_c_x[_SFD_EML_ARRAY_BOUNDS_CHECK("x", _SFD_INTEGER_CHECK("ix",
         (real_T)c3_ix), 1, 128, 1) - 1] > c3_extremum) {
      } else {
        goto label_1;
      }
      c3_extremum = c3_c_x[_SFD_EML_ARRAY_BOUNDS_CHECK("x",
       _SFD_INTEGER_CHECK("ix", (real_T)c3_ix), 1, 128, 1) - 1];
      c3_itmp = c3_b_k;
      label_1:;
    }
  }
  c3_b_maxval = c3_extremum;
  c3_b_itmp = c3_itmp;
  c3_b_indx = (real_T)c3_b_itmp;
  *c3_maxval = c3_b_maxval;
  *c3_indx = c3_b_indx;
}

static creal_T c3_mrdivide(creal_T c3_A, real_T c3_B)
{
  creal_T c3_y;
  creal_T c3_x;
  real_T c3_b_y;
  creal_T c3_b_x;
  real_T c3_c_y;
  creal_T c3_xk;
  real_T c3_yk;
  real_T c3_ar;
  real_T c3_ai;
  real_T c3_br;
  real_T c3_cr;
  real_T c3_ci;
  c3_x.re = c3_A.re;
  c3_x.im = c3_A.im;
  c3_b_y = c3_B;
  c3_b_x.re = c3_x.re;
  c3_b_x.im = c3_x.im;
  c3_c_y = c3_b_y;
  c3_xk.re = c3_b_x.re;
  c3_xk.im = c3_b_x.im;
  c3_yk = c3_c_y;
  c3_ar = c3_xk.re;
  c3_ai = c3_xk.im;
  c3_br = c3_yk;
  if(c3_ai == 0.0) {
    c3_cr = c3_ar / c3_br;
    c3_ci = 0.0;
  } else {
    c3_ci = c3_ai / c3_br;
    c3_cr = c3_ar / c3_br;
  }
  c3_y.re = c3_cr;
  c3_y.im = c3_ci;
  return c3_y;
}

static void c3_exp(creal_T *c3_x, creal_T *c3_b_x)
{
  int32_T c3_i34;
  real_T c3_k;
  real_T c3_b_k;
  creal_T c3_xk;
  real_T c3_r;
  for(c3_i34 = 0; c3_i34 < 1000; c3_i34 = c3_i34 + 1) {
    c3_b_x[c3_i34].re = c3_x[c3_i34].re;
    c3_b_x[c3_i34].im = c3_x[c3_i34].im;
  }
  for(c3_k = 1.0; c3_k <= 1000.0; c3_k = c3_k + 1.0) {
    c3_b_k = c3_k;
    c3_xk.re = c3_b_x[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("x",
     (int32_T)_SFD_INTEGER_CHECK("k", c3_b_k), 1, 1000, 1) - 1].re;
    c3_xk.im = c3_b_x[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("x",
     (int32_T)_SFD_INTEGER_CHECK("k", c3_b_k), 1, 1000, 1) - 1].im;
    c3_r = exp(c3_xk.re);
    c3_b_x[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("x",
     (int32_T)_SFD_INTEGER_CHECK("k", c3_b_k), 1, 1000, 1) - 1].re = c3_r *
      cos(c3_xk.im
      );
    c3_b_x[(int32_T)_SFD_EML_ARRAY_BOUNDS_CHECK("x",
     (int32_T)_SFD_INTEGER_CHECK("k", c3_b_k), 1, 1000, 1) - 1].im = c3_r *
      sin(c3_xk.im
      );
  }
}

static const mxArray *c3_sf_marshall(void *c3_chartInstance, void *c3_u)
{
  const mxArray *c3_y = NULL;
  int32_T c3_i35;
  creal_T c3_b_u[1000];
  const mxArray *c3_b_y = NULL;
  c3_y = NULL;
  for(c3_i35 = 0; c3_i35 < 1000; c3_i35 = c3_i35 + 1) {
    c3_b_u[c3_i35].re = (*(creal_T (*)[1000])c3_u)[c3_i35].re;
    c3_b_u[c3_i35].im = (*(creal_T (*)[1000])c3_u)[c3_i35].im;
  }
  c3_b_y = NULL;
  sf_mex_assign(&c3_b_y, sf_mex_create(&c3_b_u, "y", 0, 1U, 1U, 1, 1000));
  sf_mex_assign(&c3_y, c3_b_y);
  return c3_y;
}

static const mxArray *c3_b_sf_marshall(void *c3_chartInstance, void *c3_u)
{
  const mxArray *c3_y = NULL;
  creal_T c3_b_u;
  const mxArray *c3_b_y = NULL;
  c3_y = NULL;
  c3_b_u.re = ((creal_T *)c3_u)->re;
  c3_b_u.im = ((creal_T *)c3_u)->im;
  c3_b_y = NULL;
  sf_mex_assign(&c3_b_y, sf_mex_create(&c3_b_u, "y", 0, 1U, 0U, 0));
  sf_mex_assign(&c3_y, c3_b_y);
  return c3_y;
}

static const mxArray *c3_c_sf_marshall(void *c3_chartInstance, void *c3_u)
{
  const mxArray *c3_y = NULL;
  int32_T c3_i36;
  creal_T c3_b_u[128];
  const mxArray *c3_b_y = NULL;
  c3_y = NULL;
  for(c3_i36 = 0; c3_i36 < 128; c3_i36 = c3_i36 + 1) {
    c3_b_u[c3_i36].re = (*(creal_T (*)[128])c3_u)[c3_i36].re;
    c3_b_u[c3_i36].im = (*(creal_T (*)[128])c3_u)[c3_i36].im;
  }
  c3_b_y = NULL;
  sf_mex_assign(&c3_b_y, sf_mex_create(&c3_b_u, "y", 0, 1U, 1U, 1, 128));
  sf_mex_assign(&c3_y, c3_b_y);
  return c3_y;
}

static const mxArray *c3_d_sf_marshall(void *c3_chartInstance, void *c3_u)
{
  const mxArray *c3_y = NULL;
  int32_T c3_i37;
  real_T c3_b_u[320];
  const mxArray *c3_b_y = NULL;
  c3_y = NULL;
  for(c3_i37 = 0; c3_i37 < 320; c3_i37 = c3_i37 + 1) {
    c3_b_u[c3_i37] = (*(real_T (*)[320])c3_u)[c3_i37];
  }
  c3_b_y = NULL;
  sf_mex_assign(&c3_b_y, sf_mex_create(&c3_b_u, "y", 0, 0U, 1U, 1, 320));
  sf_mex_assign(&c3_y, c3_b_y);
  return c3_y;
}

static const mxArray *c3_e_sf_marshall(void *c3_chartInstance, void *c3_u)
{
  const mxArray *c3_y = NULL;
  int32_T c3_i38;
  real_T c3_b_u[320];
  const mxArray *c3_b_y = NULL;
  c3_y = NULL;
  for(c3_i38 = 0; c3_i38 < 320; c3_i38 = c3_i38 + 1) {
    c3_b_u[c3_i38] = (*(real_T (*)[320])c3_u)[c3_i38];
  }
  c3_b_y = NULL;
  sf_mex_assign(&c3_b_y, sf_mex_create(&c3_b_u, "y", 0, 0U, 1U, 1, 320));
  sf_mex_assign(&c3_y, c3_b_y);
  return c3_y;
}

static const mxArray *c3_f_sf_marshall(void *c3_chartInstance, void *c3_u)
{
  const mxArray *c3_y = NULL;
  real_T c3_b_u;
  const mxArray *c3_b_y = NULL;
  c3_y = NULL;
  c3_b_u = *(real_T *)c3_u;
  c3_b_y = NULL;
  sf_mex_assign(&c3_b_y, sf_mex_create(&c3_b_u, "y", 0, 0U, 0U, 0));
  sf_mex_assign(&c3_y, c3_b_y);
  return c3_y;
}

static const mxArray *c3_g_sf_marshall(void *c3_chartInstance, void *c3_u)
{
  const mxArray *c3_y = NULL;
  real_T c3_b_u;
  const mxArray *c3_b_y = NULL;
  c3_y = NULL;
  c3_b_u = *(real_T *)c3_u;
  c3_b_y = NULL;
  sf_mex_assign(&c3_b_y, sf_mex_create(&c3_b_u, "y", 0, 0U, 0U, 0));
  sf_mex_assign(&c3_y, c3_b_y);
  return c3_y;
}

static const mxArray *c3_h_sf_marshall(void *c3_chartInstance, void *c3_u)
{
  const mxArray *c3_y = NULL;
  int32_T c3_i39;
  creal_T c3_b_u[128];
  const mxArray *c3_b_y = NULL;
  c3_y = NULL;
  for(c3_i39 = 0; c3_i39 < 128; c3_i39 = c3_i39 + 1) {
    c3_b_u[c3_i39].re = (*(creal_T (*)[128])c3_u)[c3_i39].re;
    c3_b_u[c3_i39].im = (*(creal_T (*)[128])c3_u)[c3_i39].im;
  }
  c3_b_y = NULL;
  sf_mex_assign(&c3_b_y, sf_mex_create(&c3_b_u, "y", 0, 1U, 1U, 2, 1, 128));

⌨️ 快捷键说明

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