Пример #1
0
static VALUE t_left_shift(VALUE self, VALUE obj) {
  Cmat *M = r2cmat(obj);
  LogCompressor *lc;
  VALUE lcv = rb_iv_get(self, "@log_compressor");
  Data_Get_Struct(lcv, LogCompressor, lc);
  Cmat *N = log_compressor_apply(lc, M);
  VALUE result = cmat2r(N);
  cmat_free(N);
  cmat_free(M);
  return result;
}
Пример #2
0
static VALUE t_left_shift(VALUE self, VALUE obj) {
  Cmat *M = r2cmat(obj);
  HammingWindow *hw;
  VALUE hwv = rb_iv_get(self, "@hw");
  Data_Get_Struct(hwv, HammingWindow, hw);
  Cmat *N = hamming_window_apply(hw, M);
  VALUE result = cmat2r(N);
  cmat_free(N);
  cmat_free(M);
  return result;
}
Пример #3
0
static VALUE t_left_shift(VALUE self, VALUE obj) {
  Carr *M = r2carr(obj);
  VALUE mfcc_16x8 = rb_iv_get(self, "@mfcc_16x8");
  Mfcc16x8 *s;
  Data_Get_Struct(mfcc_16x8, Mfcc16x8, s);
  Cmat *N = mfcc_16x8_apply(s, M);
  VALUE result = cmat2r(N);
  cmat_free(N);
  carr_free(M);
  return result;
}
Пример #4
0
Cmat *power_spectrum_apply(PowerSpectrum *self, Cmat *data) {
  Cmat *ps = cmat_new(data->rows, self->n_uniq_fft_points);
  int i,j;
  for (i=0;i<data->rows;++i) {
      Cmat * ffts = dft(data->data[i], data->cols, self->nfft);
      for (j=0;j<self->n_uniq_fft_points;++j) {
          ps->data[i][j] = pow(ffts->data[0][j],2) + pow(ffts->data[1][j],2);
      }
      cmat_free(ffts);
  } 
  return ps;
}
Пример #5
0
static VALUE t_left_shift(VALUE self, VALUE obj) {
  Cmat *M = r2cmat(obj);
  VALUE mel_filter = rb_iv_get(self, "@mel_filter");
  MelFilter *s;
  Data_Get_Struct(mel_filter, MelFilter, s);
  Cmat *d = mel_filter_apply(s, M);
  cmat_free(M);

  if (d) {
    VALUE result = rb_ary_new2(d->rows);
    int i,j;
    for (i=0;i<d->rows;++i) {
      VALUE row = rb_ary_new2(d->cols);
      rb_ary_store(result, i, row);
      for (j=0;j<d->cols;++j) {
        rb_ary_store(row, j, rb_float_new(d->data[i][j]));
      }
    }
    cmat_free(d);
    return result;
  }
  return Qnil;
}
Пример #6
0
static VALUE t_make_bank_parameters(VALUE self, VALUE srate, VALUE nfft,
                                    VALUE nfilt, VALUE lowerf, VALUE upperf) {
  Cmat *d = make_bank_parameters(NUM2INT(srate), NUM2INT(nfft),
                NUM2INT(nfilt), NUM2INT(lowerf), NUM2INT(upperf)); 
  if (d) {
    VALUE result = rb_ary_new2(d->rows);
    int i,j;
    for (i=0;i<d->rows;++i) {
      VALUE row = rb_ary_new2(d->cols);
      rb_ary_store(result, i, row);
      for (j=0;j<d->cols;++j) {
        rb_ary_store(row, j, rb_float_new(d->data[i][j]));
      }
    }
    cmat_free(d);
    return result;
  }
  return Qnil;
}
Пример #7
0
/**
 @brief      逆反復法で行列Aの固有ベクトルXを1個のみ計算.
 @param[in]  n      行列サイズ.
 @param[in]  A      固有値計算をする(n,n)型行列.
 @param[in]  LDA    Aの第1次元.
 @param[in]  lambda 計算済みの固有値.
 @param[in]  x      初期化済みのn次ベクトル.
 @param[out] x      計算された固有ベクトル.
 @param[in]  debug  デバッグ.
 */
void ceig_ii_1pair(int n, cmulti **x, cmulti **A, int LDA, cmulti *lambda, int debug)
{
  int prec=53,*p=NULL,info,i;
  cmulti **B=NULL;
  rmulti *eps=NULL;
  // allocate
  p=ivec_allocate(n);
  prec=cvec_get_prec_max(n,x);
  B=cmat_allocate_prec(n,n,prec);
  // LU decomposition
  info=1; i=0;
  while(info){
    // B=A-diag(lambda)
    cmat_diag_sub_c(n,n,B,n,A,LDA,lambda);
    // B=B+diag(i*eps)
    eps=rmepsilon(prec);
    rmul_si(eps,eps,i);
    cmat_diag_add_r(n,n,B,n,B,n,eps);
    eps=rfree(eps);
    // B=L*U
    csolve_lu_decomp(n,B,n,p,&info);
    // next
    if(debug>=1){ printf("[%s] LU: step=%02d\n",NAME_CEIGII_1PAIR,i); }
    i++;
  };
  // compute
  cvec_set_rand(n,x,2,-1);
  cvec_normalize_sgn(n,x,x);
  for(i=0; i<2; i++){
    csolve_lu_backsubs(n,1,x,n,B,n,p);
    cvec_normalize_sgn(n,x,x);
    if(debug>=1){ printf("[%s] II: step=%02d\n",NAME_CEIGII_1PAIR,i); }
  }
  // done
  p=ivec_free(p);
  B=cmat_free(n,n,B);
}