Example #1
0
/*--------------------------------------------------------------------*/
void source_estim_GG_from_histo (vec pdf, vec symbols, double *palpha,
				 double *pbeta)
{
  double step_alpha, step_beta;
  double dK, last_dK;
  int  i;

  /* derivatives of the Kullback distance on alpha and beta */
  double derdK_alpha, derdK_beta;
  vec  pdf_GG, pdf_GGbisalpha, pdf_GGbisbeta;

  /* Kind of a gradient descent with the derivative of kullback distance.   */
  step_alpha = *palpha / 10;
  step_beta = *pbeta / 10;
  last_dK = 666;

  /* Initial Kullback distance */
  pdf_GG = source_pdf_GG (symbols, *palpha, *pbeta);
  dK = vec_distance_kullback_leibler (pdf, pdf_GG);
  vec_delete (pdf_GG);

  /* "Geometric" decreasing of the convergence step */
  for (i = 0; i < 5; i++) {
    do {
      pdf_GGbisalpha = source_pdf_GG (symbols, *palpha + IT_EPSILON, *pbeta);
      derdK_alpha =
	(vec_distance_kullback_leibler (pdf, pdf_GGbisalpha) -
	 dK) / IT_EPSILON;
      vec_delete (pdf_GGbisalpha);

      pdf_GGbisbeta = source_pdf_GG (symbols, *palpha, *pbeta + IT_EPSILON);
      derdK_beta =
	(vec_distance_kullback_leibler (pdf, pdf_GGbisbeta) -
	 dK) / IT_EPSILON;
      vec_delete (pdf_GGbisbeta);

      *palpha = *palpha - derdK_alpha * step_alpha;
      *pbeta = *pbeta - derdK_beta * step_beta;

      last_dK = dK;

      pdf_GG = source_pdf_GG (symbols, *palpha, *pbeta);
      dK = vec_distance_kullback_leibler (pdf, pdf_GG);
      vec_delete (pdf_GG);
      //              printf( "alpha = %f, beta = %f, dK = %f\n", *palpha, *pbeta, dK );
    }
    while (dK + IT_EPSILON * 1e3 < last_dK);

    step_alpha *= 0.5;
    step_beta *= 0.5;
  }
}
Example #2
0
File: main.c Project: Flyswat/wmmp
void print_dist(mat Y, mat Y_attack, double wcr)
{
	uint i;

	for (i=0; i < mat_width(Y); i++)
	{
		vec 	y = mat_get_col(Y,i),
			ya = mat_get_col(Y_attack,i);

		printf("%f, %f;\n", wcr,vec_norm(ya,1.0)/vec_norm(y,1.0));
		vec_delete( y );
		vec_delete( ya );
	}
}
Example #3
0
int exe_xDestroy(sqlite3_vtab *pVTab) {
    exe_table_t* table = (exe_table_t*) pVTab;
    vec_delete_elems(table->content,exe_release);
    vec_delete(table->content);
    free(pVTab);
    return SQLITE_OK;
}
Example #4
0
File: main.c Project: Flyswat/wmmp
mat make_Y(uint Nv, uint Ns, uint Nc, mat U, double wcr)
{
	uint i;
	mat Y = mat_new(Nv,Ns);
	it_randomize();
	for (i=0; i < Ns; i++) {
		vec x, y, w;
		bvec m;

		x = make_x( Nv );
		m = make_m( Nc );
		w = make_w( U, m );

		y = make_y( x, w, wcr );
		mat_set_col(Y,i,y);

		vec_delete( x );
		vec_delete( w );
		vec_delete( y );
		bvec_delete( m );
	}

	return Y;
}
Example #5
0
/*
 * Convert a key sequence string into a key code sequence.
 */
int keystrtovec(char *key, size_t **keys)
{
    vector *v = vec_new(sizeof(size_t));
    size_t size;

    for (size = 0; *key != '\0'; size++) {
        size_t len, code = strtochord(key, &len);
        vec_item(v, size, size_t) = code;
        if ((vec_item(v, size, size_t) = code) == KBD_NOKEY) {
            vec_delete(v);
            return -1;
        }
        key += len;
    }

    *keys = vec_toarray(v);
    return size;
}
Example #6
0
File: svmdb.c Project: ajvoniq/vpp
static void
notify_value (svmdb_value_t * v, svmdb_action_t a)
{
  int i;
  int rv;
  union sigval sv;
  u32 value;
  u32 *dead_registrations = 0;

  svmdb_notify_t *np;

  for (i = 0; i < vec_len (v->notifications); i++)
    {
      np = vec_elt_at_index (v->notifications, i);
      if (np->action == a)
	{
	  value = (np->action << 28) | (np->opaque);
	  sv.sival_ptr = (void *) (uword) value;
	  do
	    {
	      rv = 0;
	      if (sigqueue (np->pid, np->signum, sv) == 0)
		break;
	      rv = errno;
	    }
	  while (rv == EAGAIN);
	  if (rv == 0)
	    continue;
	  vec_add1 (dead_registrations, i);
	}
    }

  for (i = 0; i < vec_len (dead_registrations); i++)
    {
      np = vec_elt_at_index (v->notifications, dead_registrations[i]);
      clib_warning ("dead reg pid %d sig %d action %d opaque %x",
		    np->pid, np->signum, np->action, np->opaque);
      vec_delete (v->notifications, 1, dead_registrations[i]);
    }
  vec_free (dead_registrations);
}
int main ()
{
  it_wavelet_t *wavelet;
  it_wavelet2D_t *wavelet2D;
  it_separable2D_t *separable;
  const char *image_in = "../data/test.pgm";
  const char *image_out = "out.pgm";
  const char *sound_in = "../data/test.wav";
  const char *sound_out = "out.wav";
  char pnm_type, comments[1000];
  int  width, height, maxval;
  int  levels;
  int  length, channels, srate, depth;
  mat  m, mt;
  vec  v, vt;

  levels = 4;

  /* Read the sound */
  if (!wav_info (sound_in, &channels, &srate, &depth, &length)) {
    fprintf (stderr, "unable to open file %s\n", sound_in);
    return (1);
  }
  printf
    ("file name = %s\nchannels = %d\nsampling rate = %d\ndepth = %d\nlength = %d samples/channel\n",
     sound_in, channels, srate, depth, length);

  m = mat_wav_read (sound_in);
  v = m[0];			/* consider only the first channel */

  /* Transform the sound */
  vt = it_dwt (v, it_wavelet_lifting_53, levels);
  vec_delete (v);

  /* Write down the coefficients */
  v = vec_new_eval (vt, rescale_sound, NULL);
  m[0] = v;
  mat_wav_write ("wavelet.wav", m, srate, depth);
  vec_delete (v);

  /* Reconstruct the sound */
  v = it_idwt (vt, it_wavelet_lifting_53, levels);
  vec_delete (vt);

  m[0] = v;
  mat_wav_write (sound_out, m, srate, depth);
  mat_delete (m);

  /* Test the separable transform */
  /* Warning: note that for the wavelet with more than 1 level of   */
  /* decomposition, the transform obtained by applying the wavelet  */
  /* on the rows, then on the columns of the image is *not* what is */
  /* usually called the separable wavelet. See this example:        */
  /* separable(wavelet1D)                   wavelet2D               */
  /*                                                                */
  /*   +------+------+------+               +------+------+------+  */
  /*   | L1L1 | L1H1 | L1H0 |               | L1L1 | LH1  |      |  */
  /*   +------+------+------+               +------+------+  LH0 |  */
  /*   | H1L1 | H1H1 | H1H0 |               | HL1  | HH1  |      |  */
  /*   +------+------+------+               +------+------+------+  */
  /*   |      |      |      |               |             |      |  */
  /*   | H0L1 | H0H1 | H0H0 |               |    HL0      |  HH0 |  */
  /*   +------+------+------+               +-------------+------+  */

  m = mat_pgm_read (image_in);
  printf ("PGM %dx%d\n", mat_height (m), mat_width (m));

  levels = 1;

  /* create a 1D wavelet object */
  wavelet = it_wavelet_new (it_wavelet_lifting_97, levels);
  /* create a separable transform out of the wavelet */
  separable = it_separable2D_new (wavelet);

  /* Transform the image */
  mt = (mat) it_transform2D (separable, m);
  mat_delete (m);

  /* Write down the coefficients (shifted & saturated) */
  m = mat_new_eval (mt, rescale_image, NULL);
  mat_pgm_write ("wavelet_separable.pgm", m);
  mat_delete (m);

  /* Reconstruct the image */
  m = (mat) it_itransform2D (separable, mt);
  mat_delete (mt);

  it_delete (separable);
  it_delete (wavelet);

  mat_pgm_write ("separable.pgm", m);
  mat_delete (m);

  /* Read the image */
  pnm_info (image_in, &pnm_type, &width, &height, &maxval, comments, 1000);
  printf ("file name = %s\npnm type = %c\n%dx%d -> maxval=%d\ncomments=%s\n",
	  image_in, pnm_type, width, height, maxval, "");

  m = mat_pgm_read (image_in);

  printf
    ("height(m) = %d\tmaxheight(m) = %d\nwidth(m) = %d\tmaxwidth(m) = %d\n",
     mat_height (m), mat_height_max (m), mat_width (m), mat_width_max (m));

  levels = 5;

  /* create a 2D wavelet object */
  wavelet2D = it_wavelet2D_new (it_wavelet_lifting_97, levels);

  /* Transform the image */
  mt = it_wavelet2D_transform (wavelet2D, m);
  mat_delete (m);

  /* Write down the coefficients (shifted & saturated) */
  m = mat_new_eval (mt, rescale_image, NULL);
  mat_pgm_write ("wavelet.pgm", m);
  mat_delete (m);

  /* Reconstruct the image */
  m = it_wavelet2D_itransform (wavelet2D, mt);
  mat_delete (mt);

  it_delete (wavelet2D);

  mat_pgm_write (image_out, m);
  mat_delete (m);

  return 0;
}
Example #8
0
File: svmdb.c Project: ajvoniq/vpp
int
svmdb_local_add_del_notification (svmdb_client_t * client,
				  svmdb_notification_args_t * a)
{
  uword *h;
  void *oldheap;
  hash_pair_t *hp;
  svmdb_shm_hdr_t *shm;
  u8 *dummy_value = 0;
  svmdb_value_t *value;
  svmdb_notify_t *np;
  int i;
  int rv = 0;

  ASSERT (a->elsize);

  region_lock (client->db_rp, 18);
  shm = client->shm;
  oldheap = svm_push_data_heap (client->db_rp);

  h = shm->namespaces[a->nspace];

  hp = hash_get_pair_mem (h, a->var);
  if (hp == 0)
    {
      local_set_variable_nolock (client, a->nspace, (u8 *) a->var,
				 dummy_value, a->elsize);
      /* might have moved */
      h = shm->namespaces[a->nspace];
      hp = hash_get_pair_mem (h, a->var);
      ASSERT (hp);
    }

  value = pool_elt_at_index (shm->values, hp->value[0]);

  for (i = 0; i < vec_len (value->notifications); i++)
    {
      np = vec_elt_at_index (value->notifications, i);
      if ((np->pid == client->pid)
	  && (np->signum == a->signum)
	  && (np->action == a->action) && (np->opaque == a->opaque))
	{
	  if (a->add_del == 0 /* delete */ )
	    {
	      vec_delete (value->notifications, 1, i);
	      goto out;
	    }
	  else
	    {			/* add */
	      clib_warning
		("%s: ignore dup reg pid %d signum %d action %d opaque %x",
		 a->var, client->pid, a->signum, a->action, a->opaque);
	      rv = -2;
	      goto out;
	    }
	}
    }
  if (a->add_del == 0)
    {
      rv = -3;
      goto out;
    }

  vec_add2 (value->notifications, np, 1);
  np->pid = client->pid;
  np->signum = a->signum;
  np->action = a->action;
  np->opaque = a->opaque;

out:
  svm_pop_heap (oldheap);
  region_unlock (client->db_rp);
  return rv;
}