cv_misc.c

来自「LastWave」· C语言 代码 · 共 1,147 行 · 第 1/2 页

C
1,147
字号
  assert (signal_size > 0);  i = 0;  j = part_begin_in_signal;  /*   * Left border.   */  if (j < 0) {    tmp_n = -j;    k = signal_size + j;    _real_copy_ (signal_part + i, signal_data + k, 0, tmp_n - 1);    i += tmp_n;    j += tmp_n;  }  /*   * Middle.   */  tmp_n = min (part_size - i, signal_size - j);  _real_copy_ (signal_part + i, signal_data + j, 0, tmp_n - 1);  i += tmp_n;  j += tmp_n;  /*   * Right border.   */  while (i < part_size) {    tmp_n = min (part_size - i, signal_size);    _real_copy_ (signal_part + i, signal_data, 0, tmp_n - 1);    i += tmp_n;    j += tmp_n;  }  assert (i == part_size);  assert (j == part_size+part_begin_in_signal);  return;}void_get_part_r_mi_ (real *signal_part,		 int  part_size,		 real *signal_data,		 int  signal_size,		 int  part_begin_in_signal){  int i;	/* Index for signal_part. */  int j;	/* Index for signal_data. */  int k;  int tmp_n;  assert (signal_part != 0);  assert (signal_data != 0);  assert (part_size > 0);  assert (signal_size > 0);  i = 0;  j = part_begin_in_signal;  /*   * Left border.   */  while (j < 0) {    signal_part[i] = signal_data[-j];    i++;    j++;  }  /*   * Middle.   */  tmp_n = min (part_size - i, signal_size - j);  _real_copy_ (signal_part + i, signal_data + j, 0, tmp_n - 1);  i += tmp_n;  j += tmp_n;  /*   * Right border.   */  while (i < part_size) {    /*     * Mirrored signal     */    tmp_n = min (part_size - i, signal_size);    for (k = signal_size - 1; k >= signal_size - tmp_n; k--, i++, j++) {      signal_part[i] = signal_data[k];    }    /*     * Normal signal.     */    if (i < part_size) {      tmp_n = min (part_size - i, signal_size);      _real_copy_ (signal_part + i, signal_data + j, 0, tmp_n - 1);    }  }  assert (i == part_size);  assert (j == part_size+part_begin_in_signal);  return;}void_get_part_r_pa_ (real *signal_part,		 int  part_size,		 real *signal_data,		 int  signal_size,		 int  part_begin_in_signal){  int i;	/* Index for signal_part. */  int j;	/* Index for signal_data. */  int tmp_n;  assert (signal_part != 0);  assert (signal_data != 0);  assert (part_size > 0);  assert (signal_size > 0);  i = 0;  j = part_begin_in_signal;  /*   * Left border.   */  while (j < 0) {    signal_part[i] = signal_data[0];    i++;    j++;  }  /*   * Middle.   */  tmp_n = min (part_size - i, signal_size - j);  _real_copy_ (signal_part + i,	       signal_data + j, 0, tmp_n - 1);  i += tmp_n;  j += tmp_n;  /*   * Right border.   */  while (i < part_size) {    signal_part[i] = signal_data[signal_size - 1];    i++;    j++;  }  assert (i == part_size);  assert (j == part_size+part_begin_in_signal);  return;}void_get_part_r_0p_ (real *signal_part,		 int  part_size,		 real *signal_data,		 int  signal_size,		 int  part_begin_in_signal){  int i;	/* Index for signal_part. */  int j;	/* Index for signal_data. */  int tmp_n;  assert (signal_part != 0);  assert (signal_data != 0);  assert (part_size > 0);  assert (signal_size > 0);  i = 0;  j = part_begin_in_signal;  /*   * Left border.   */  while (j < 0) {    signal_part[i] = 0.0;    i++;    j++;  }  /*   * Middle.   */  tmp_n = min (part_size - i, signal_size - j);  _real_copy_ (signal_part + i,	       signal_data + j, 0, tmp_n - 1);  i += tmp_n;  j += tmp_n;  /*   * Right border.   */  while (i < part_size) {    signal_part[i] = 0.0;    i++;    j++;  }  assert (i == part_size);  assert (j == part_size+part_begin_in_signal);  return;}voidcv_get_part_r_ (real *signal_part,		int  part_size,		real *signal_data,		int  signal_size,		int  part_begin_in_signal,		int  border_effect){  assert (signal_part != 0);  assert (signal_data != 0);  assert (part_size > 0);  assert (signal_size > 0);  switch (border_effect) {  case CV_PERIODIC:    _get_part_r_pe_ (signal_part, part_size,		     signal_data, signal_size,		     part_begin_in_signal);    break;  case CV_MIRROR:    _get_part_r_mi_ (signal_part, part_size,		     signal_data, signal_size,		     part_begin_in_signal);    break;  case CV_PADDING:    _get_part_r_pa_ (signal_part, part_size,		     signal_data, signal_size,		     part_begin_in_signal);    break;  case CV_0_PADDING:    _get_part_r_0p_ (signal_part, part_size,		     signal_data, signal_size,		     part_begin_in_signal);    break;  }}void_get_part_c_pe_ (complex *signal_part,		 int     part_size,		 complex *signal_data,		 int     signal_size,		 int     part_begin_in_signal){  int i;	/* Index for signal_part. */  int j;	/* Index for signal_data. */  int k;  int tmp_n;  assert (signal_part != 0);  assert (signal_data != 0);  assert (part_size > 0);  assert (signal_size > 0);  i = 0;  j = part_begin_in_signal;  /*   * Left border.   */  if (j < 0) {    tmp_n = -j;    k = signal_size + j;    _cplx_copy_ (signal_part + i, signal_data + k, 0, tmp_n - 1);    i += tmp_n;    j += tmp_n;  }  /*   * Middle.   */  tmp_n = min (part_size - i, signal_size - j);  _cplx_copy_ (signal_part + i, signal_data + j, 0, tmp_n - 1);  i += tmp_n;  j += tmp_n;  /*   * Right border.   */  while (i < part_size) {    tmp_n = min (part_size - i, signal_size);    _cplx_copy_ (signal_part + i, signal_data, 0, tmp_n - 1);    i += tmp_n;    j += tmp_n;  }  assert (i == part_size);  assert (j == part_size+part_begin_in_signal);  return;}void_get_part_c_mi_ (complex *signal_part,		 int     part_size,		 complex *signal_data,		 int     signal_size,		 int     part_begin_in_signal){  int i;	/* Index for signal_part. */  int j;	/* Index for signal_data. */  int k;  int tmp_n;  assert (signal_part != 0);  assert (signal_data != 0);  assert (part_size > 0);  assert (signal_size > 0);  i = 0;  j = part_begin_in_signal;  /*   * Left border.   */  while (j < 0) {    signal_part[i] = signal_data[-j];    i++;    j++;  }  /*   * Middle.   */  tmp_n = min (part_size - i, signal_size - j);  _cplx_copy_ (signal_part + i, signal_data + j, 0, tmp_n - 1);  i += tmp_n;  j += tmp_n;  /*   * Right border.   */  while (i < part_size) {    /*     * Mirrored signal     */    tmp_n = min (part_size - i, signal_size);    for (k = signal_size - 1; k >= signal_size - tmp_n; k--, i++, j++) {      signal_part[i] = signal_data[k];    }    /*     * Normal signal.     */    if (i < part_size) {      tmp_n = min (part_size - i, signal_size);      _cplx_copy_ (signal_part + i, signal_data + j, 0, tmp_n - 1);    }  }  assert (i == part_size);  assert (j == part_size+part_begin_in_signal);  return;}void_get_part_c_pa_ (complex *signal_part,		 int     part_size,		 complex *signal_data,		 int     signal_size,		 int     part_begin_in_signal){  int i;	/* Index for signal_part. */  int j;	/* Index for signal_data. */  int tmp_n;  assert (signal_part != 0);  assert (signal_data != 0);  assert (part_size > 0);  assert (signal_size > 0);  i = 0;  j = part_begin_in_signal;  /*   * Left border.   */  while (j < 0) {    signal_part[i] = signal_data[0];    i++;    j++;  }  /*   * Middle.   */  tmp_n = min (part_size - i, signal_size - j);  _cplx_copy_ (signal_part + i,	       signal_data + j, 0, tmp_n - 1);  i += tmp_n;  j += tmp_n;  /*   * Right border.   */  while (i < part_size) {    signal_part[i] = signal_data[signal_size - 1];    i++;    j++;  }  assert (i == part_size);  assert (j == part_size+part_begin_in_signal);  return;}void_get_part_c_0p_ (complex *signal_part,		 int     part_size,		 complex *signal_data,		 int     signal_size,		 int     part_begin_in_signal){  int i;	/* Index for signal_part. */  int j;	/* Index for signal_data. */  int tmp_n;  assert (signal_part != 0);  assert (signal_data != 0);  assert (part_size > 0);  assert (signal_size > 0);  i = 0;  j = part_begin_in_signal;  /*   * Left border.   */  while (j < 0) {    signal_part[i].real = 0.0;    signal_part[i].imag = 0.0;    i++;    j++;  }  /*   * Middle.   */  tmp_n = min (part_size - i, signal_size - j);  _cplx_copy_ (signal_part + i,	       signal_data + j, 0, tmp_n - 1);  i += tmp_n;  j += tmp_n;  /*   * Right border.   */  while (i < part_size) {    signal_part[i].real = 0.0;    signal_part[i].imag = 0.0;    i++;    j++;  }  assert (i == part_size);  assert (j == part_size+part_begin_in_signal);  return;}voidcv_get_part_c_ (complex *signal_part,		int     part_size,		complex *signal_data,		int     signal_size,		int     part_begin_in_signal,		int     border_effect){  assert (signal_part != 0);  assert (signal_data != 0);  assert (part_size > 0);  assert (signal_size > 0);  switch (border_effect) {  case CV_PERIODIC:    _get_part_c_pe_ (signal_part, part_size,		     signal_data, signal_size,		     part_begin_in_signal);    break;  case CV_MIRROR:    _get_part_c_mi_ (signal_part, part_size,		     signal_data, signal_size,		     part_begin_in_signal);    break;  case CV_PADDING:    _get_part_c_pa_ (signal_part, part_size,		     signal_data, signal_size,		     part_begin_in_signal);    break;  case CV_0_PADDING:    _get_part_c_0p_ (signal_part, part_size,		     signal_data, signal_size,		     part_begin_in_signal);    break;  }}/* */voidset_f_l_exact (int *first_exact_ptr,	       int *last_exact_ptr){  int i_begin;  int i_end;  switch (flt_def) {  case ANALYTICAL:    if (flt_scale == CV_NO_SCALE) {      i_begin = (int) floor (flt_d_begin);      i_end   = (int) ceil  (flt_d_end);    } else {      i_begin = (int) floor (flt_d_begin*flt_scale);      i_end   = (int) ceil  (flt_d_end*flt_scale);    }    *first_exact_ptr = (int) i_end;    *last_exact_ptr  = sig_n + (int) i_begin - 1;    break;  case NUMERICAL:    *first_exact_ptr = (int) flt_d_end;    *last_exact_ptr  = sig_n + (int) flt_d_begin - 1;    break;  }}

⌨️ 快捷键说明

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