Exemplo n.º 1
0
void dwgs :: init(float f, float B, float inpos) 
{
  this->f = f;
  float deltot = Fs/f;
  int del1 = (int)(inpos*0.5*deltot);
  if(del1 < 2)
    del1 = 1;

  if(M==1) {
    thiriandispersion(B,f,M,&(dispersion[0]));	
  } else if(M==4) {
	for(int m=0;m<M;m++) {		
		thiriandispersion(B,f,M,&(dispersion[m]));
	}
  }
  float dispersiondelay = M*phasedelay(&(dispersion[0]),f,Fs);  
  float lowpassdelay = .002;
  int del2 = (int)(0.5*(deltot-2.0*del1)-dispersiondelay);
  int del3 = (int)(0.5*(deltot-2.0*del1)-lowpassdelay-5.0);
  if(del2 < 2)
    del2 = 1;
  if(del3 < 2)
    del3 = 1;
  
  float D = (deltot-(float)(del1+del1+del2+del3)-dispersiondelay-lowpassdelay);
  if(D<1) D=1;
  thirian(D,(int)D,&fracdelay);
   
  d[0]->set_delay(del1,del1);  
  d[1]->set_delay(del2,del3);
  //float tuningdelay = phasedelay(&fracdelay,f,Fs);
  // printf("total delay = %g/%g, leftdel = %d/%d, rightdel = %d/%d, dispersion delay = %g, lowpass delay = %g, fractional delay = %g/%g\n",del1+del1+del2+del3+dispersiondelay+lowpassdelay+tuningdelay,deltot, del1, del1, del2, del3, dispersiondelay, lowpassdelay, tuningdelay,D);
}
Exemplo n.º 2
0
void thiriandispersion(float B, float f, int M, Filter *c)
{
  int N = 2;
  float D;
  D = Db(B,f,M);

  if(D<=1.0) {
    c->n = 2;	
    c->a[0] = 1;
    c->a[1] = 0;
    c->a[2] = 0;
    c->b[0] = 1;
    c->b[1] = 0;
    c->b[2] = 0;	
	init_filter(c);
  } else {
    thirian(D,N,c);
  }
}
Exemplo n.º 3
0
void thiriandispersion(float B, float f, int M, Filter *c)
{
  int N = 2;
  float D;
  D = Db(B,f,M);

  if(D<=1.0) {
	c->x = (float *)RTAlloc(gWorld, sizeof(float) * (N + 1));//new float[N+1];
	c->y = (float *)RTAlloc(gWorld, sizeof(float) * (N + 1));//new float[N+1];
	c->a = (float *)RTAlloc(gWorld, sizeof(float) * (N + 1));//new float[N+1];
	c->b = (float *)RTAlloc(gWorld, sizeof(float) * (N + 1));//new float[N+1];
    memset(c->x,0,(N+1)*sizeof(float));
    memset(c->y,0,(N+1)*sizeof(float));
    c->a[0] = 1;
    c->a[1] = 0;
    c->a[2] = 0;
    c->b[0] = 1;
    c->b[1] = 0;
    c->b[2] = 0;
  } else {
    thirian(D,N,c);
  }
}