static GstFlowReturn
transform_ip (GstBaseTransform * trans, GstBuffer * buf)
{
  UnaryComplexPow *element = UNARY_COMPLEX_POW (trans);
  GstAudioFilter *audiofilter = GST_AUDIO_FILTER (trans);
  GstAudioFormat format = audiofilter->info.finfo->format;

  GstMapInfo info;
  gst_buffer_map (buf, &info, GST_MAP_READWRITE);
  gpointer data = info.data;
  gpointer data_end = data + info.size;

  const double n = element->exponent;

  if (format >= GST_AUDIO_FORMAT_F64) {
    double complex *ptr, *end = data_end;
    for (ptr = data; ptr < end; ptr++)
      *ptr = cpow (*ptr, n);
  } else if (format >= GST_AUDIO_FORMAT_F32) {
    float complex *ptr, *end = data_end;
    for (ptr = data; ptr < end; ptr++)
      *ptr = cpowf (*ptr, n);
  } else {
    g_assert_not_reached ();
  }

  gst_buffer_unmap (buf, &info);

  return GST_FLOW_OK;
}
Beispiel #2
0
//## Complex Complex.cpowf();
static KMETHOD Complex_cpowf(KonohaContext *kctx, KonohaStack *sfp)
{
	kComplex *kx = (kComplex *) sfp[0].asObject;
	float _Complex x = (float _Complex)kx->z;
	float real = (float)sfp[1].floatValue;
	float imaginary = (float)sfp[2].floatValue;
	float _Complex y = real + I * imaginary;
	float ret = cpowf(x, y);
	KReturnFloatValue(ret);
}
Beispiel #3
0
QLA_F_Complex
QLA_F_cpow(QLA_F_Complex *a, QLA_F_Real b)
{
  float _Complex ca, cr;
  QLA_F_c99_eq_c(ca, *a);
  cr = cpowf(ca, b);
  QLA_F_Complex r;
  QLA_F_c_eq_c99(r, cr);
  return r;
}
void Oscillator::setSemi(float semi)
{
  if(semi >= 0.5f)
  {
    semi -= 0.5f;
    semi *= 2.0f;
    semi *= g_osc_semi_range;
    //tempsemi should now have the amount of semitones away from center pitch
    m_semi = cpowf(1.05946309436f, common::croundf(semi));
  }
  else if(semi < 0.5f)
  {
    semi = 0.5f-semi;
    semi *= 2.0f;
    semi *= g_osc_semi_range;
    //tempsemi should now have the amount of semitones away from center pitch
    m_semi = cpowf(0.94387431268f, common::croundf(semi));
  }
  setPitch(m_pitch);
}
Beispiel #5
0
void ansi_air_bang(t_ansi_air *x)
{
    float fs = x->fs;
    float TempC = x->tempC;
    float Hum = x->hum;
    float Pressure = x->pressure;
    float Distance = x->dist;
    
    int i, fftlength = x->fftlength;
    int fftlengthhalf = x->fftlengthhalf;
    float f2[fftlengthhalf], air[fftlengthhalf];
    float _Complex Hair[fftlengthhalf], Hair2[fftlengthhalf], H[fftlength], h[fftlength];
    static float msli_pi = 3.141592653589793;
    
    fftwf_plan p_h;
    
    for(i = 0; i < fftlength; i++)
    {
        if( i < fftlengthhalf )
        {
            f2[i] = (fs * (float)i) / ((float)fftlength);
            
            // -1.0 is to change into negative dB (attenation)
            air[i] = -1.0 * Distance * fnMAPPAttenuate(TempC,Pressure,Hum,f2[i]);
            Hair[i] = cpowf(10.0,air[i]/20.0);
            
            // delay it to middle of window for linear phase (causual) filter
            Hair2[i] = Hair[i] * cexpf(-I  * 2.0 * msli_pi * f2[i] * (fftlength/4 * (1.0 / fs)));
            
            H[i] = Hair2[i];
        } else {
            H[i] = conjf(Hair2[ (fftlength/2 -1) - (i-fftlengthhalf)]);
        }
    }
    
    p_h = fftwf_plan_dft_1d(fftlength,H,h,FFTW_BACKWARD,FFTW_ESTIMATE);
    fftwf_execute(p_h);

    for(i = 0; i < fftlength; i++)
    {
        h[i] = h[i] / fftlength;
        outlet_float((t_outlet *)x->outlet2, i);
        outlet_float((t_outlet *)x->outlet1, crealf(h[i]));
        
    }
    outlet_anything((t_outlet *)x->outinfo, gensym("done"), 0, NULL);
    
}
void drawmandelbrot(SDL_Surface *surface) {
  if (SDL_MUSTLOCK(surface)) {
    SDL_LockSurface(surface);
  }
  Uint32 *pixels = (Uint32 *) surface->pixels;

  for (int i = 0; i < surface->w * surface->h; i++) {
    int y = i / surface->w;
    int x = i % surface->w;

    float complex c = ((3.0f * x / surface->w) - 2.0f)
        + I * ((2.0f * y / surface->h) - 1.0f);

    bool diverges = false;
    float complex z = 0;
    int it;
    for (it = 1; it <= max_it; it++) {
      /* z = z² + c */
      z = cpowf(z, 2) + c;

      /* If |z| ever gets greater than 2, it diverges. */
      if (cabsf(z) > 2) {
        diverges = true;
        break;
      }
    }

    Uint32 color;
    if (diverges) {
      color = outcolor(it);
    } else {
      color = incolor();
    }

    pixels[i] = color;

    /* Update the screen every 10 lines. */
    if (y % 10 == 0 && x == 0) {
      SDL_Flip(surface);
    }
  }

  /* Update the screen a final time. */
  SDL_Flip(surface);
  if (SDL_MUSTLOCK(surface)) {
    SDL_UnlockSurface(surface);
  }
}
Beispiel #7
0
 ld = ctanhl(ld);
 TEST_TRACE(C99 7.3.7.1)
 d = cexp(d);
 f = cexpf(f);
 ld = cexpl(ld);
 TEST_TRACE(C99 7.3.7.2)
 d = clog(d);
 f = clogf(f);
 ld = clogl(ld);
 TEST_TRACE(C99 7.3.8.1)
 d = cabs(d);
 f = cabsf(f);
 ld = cabsl(ld);
 TEST_TRACE(C99 7.3.8.2)
 d = cpow(d, d);
 f = cpowf(f, f);
 ld = cpowl(ld, ld);
 TEST_TRACE(C99 7.3.8.3)
 d = csqrt(d);
 f = csqrtf(f);
 ld = csqrtl(ld);
 TEST_TRACE(C99 7.3.9.1)
 d = carg(d);
 f = cargf(f);
 ld = cargl(ld);
 TEST_TRACE(C99 7.3.9.2)
 d = cimag(d);
 f = cimagf(f);
 ld = cimagl(ld);
 TEST_TRACE(C99 7.3.9.3)
 d = conj(d);
Beispiel #8
0
static void zpow(long N, complex float* dst, const complex float* src1, const complex float* src2)
{
	for (long i = 0; i < N; i++)
		dst[i] = cpowf(src1[i], src2[i]);
}
Beispiel #9
0
void
docomplexf (void)
{
#ifndef NO_FLOAT
  complex float ca, cb, cc;
  float f1;

  ca = 1.0 + 1.0 * I;
  cb = 1.0 - 1.0 * I;

  f1 = cabsf (ca);
  fprintf (stdout, "cabsf  : %f\n", f1);

  cc = cacosf (ca);
  fprintf (stdout, "cacosf : %f %fi\n", crealf (cc),
	   cimagf (cc));

  cc = cacoshf (ca);
  fprintf (stdout, "cacoshf: %f %fi\n", crealf (cc),
	   cimagf (cc));

  f1 = cargf (ca);
  fprintf (stdout, "cargf  : %f\n", f1);

  cc = casinf (ca);
  fprintf (stdout, "casinf : %f %fi\n", crealf (cc),
	   cimagf (cc));

  cc = casinhf (ca);
  fprintf (stdout, "casinhf: %f %fi\n", crealf (cc),
	   cimagf (cc));

  cc = catanf (ca);
  fprintf (stdout, "catanf : %f %fi\n", crealf (cc),
	   cimagf (cc));

  cc = catanhf (ca);
  fprintf (stdout, "catanhf: %f %fi\n", crealf (cc),
	   cimagf (cc));

  cc = ccosf (ca);
  fprintf (stdout, "ccosf  : %f %fi\n", crealf (cc),
	   cimagf (cc));

  cc = ccoshf (ca);
  fprintf (stdout, "ccoshf : %f %fi\n", crealf (cc),
	   cimagf (cc));

  cc = cexpf (ca);
  fprintf (stdout, "cexpf  : %f %fi\n", crealf (cc),
	   cimagf (cc));

  f1 = cimagf (ca);
  fprintf (stdout, "cimagf : %f\n", f1);

  cc = clogf (ca);
  fprintf (stdout, "clogf  : %f %fi\n", crealf (cc),
	   cimagf (cc));

  cc = conjf (ca);
  fprintf (stdout, "conjf  : %f %fi\n", crealf (cc),
	   cimagf (cc));

  cc = cpowf (ca, cb);
  fprintf (stdout, "cpowf  : %f %fi\n", crealf (cc),
	   cimagf (cc));

  cc = cprojf (ca);
  fprintf (stdout, "cprojf : %f %fi\n", crealf (cc),
	   cimagf (cc));

  f1 = crealf (ca);
  fprintf (stdout, "crealf : %f\n", f1);

  cc = csinf (ca);
  fprintf (stdout, "csinf  : %f %fi\n", crealf (cc),
	   cimagf (cc));

  cc = csinhf (ca);
  fprintf (stdout, "csinhf : %f %fi\n", crealf (cc),
	   cimagf (cc));

  cc = csqrtf (ca);
  fprintf (stdout, "csqrtf : %f %fi\n", crealf (cc),
	   cimagf (cc));

  cc = ctanf (ca);
  fprintf (stdout, "ctanf  : %f %fi\n", crealf (cc),
	   cimagf (cc));

  cc = ctanhf (ca);
  fprintf (stdout, "ctanhf : %f %fi\n", crealf (cc),
	   cimagf (cc));
#endif
}
void init_A_TE_9p_pml(struct PML_AC *PML_AC, struct matTE *matTE, struct waveAC *waveAC){

	extern int NX, NY, NONZERO;
        extern float DH, S;	

	/* local variables */
	int i, j, k;
        complex float tmp, Omega2, Omega, epse;
        //complex float tmpA, tmpB, tmpC;
	complex float dyp, dym, dxp, dxm, dx0, dy0;
        float a, b, c, d, e, idh2, damp, mu0;
	//SuiteSparse_long count;
	int count, ishift;

	damp = 0.0;

        /* define FD parameters */
	a = 0.6287326;	
	b = 0.3712667;
	c = 1 - a - b;
	b = 0.25 * b;
        c = 0.25 * c;
        d = 0.4382634;
	e = 1 - d;

        idh2 = 1.0/(DH*DH);

	/* assemble impedance matrix */        

        k=0;        /* index of main diagonal  */	
        count=0;    /* count non-zero elements */

	/* set squared complex angular frequency*/
	Omega = 2.0 * M_PI * ((*waveAC).freq + S * I);
	Omega2 = cpowf(2.0 * M_PI * ((*waveAC).freq + S * I),2.0);

	/* define magnetic permeability mu0 */
	mu0 = 4.0 * M_PI * 1e-7;

        for (j=1;j<=NY;j++){
		for (i=1;i<=NX;i++){

		    /* store PML parameters */
		    dy0 = (*PML_AC).dampyr[j] + (*PML_AC).dampyi[j] * I;
		    dx0 = (*PML_AC).dampxr[i] + (*PML_AC).dampxi[i] * I;	

		    dyp = (*PML_AC).dampyhr[j] + (*PML_AC).dampyhi[j] * I;
		    dym = (*PML_AC).dampyhr[j-1] + (*PML_AC).dampyhi[j-1] * I;

		    dxp = (*PML_AC).dampxhr[i] + (*PML_AC).dampxhi[i] * I;
		    dxm = (*PML_AC).dampxhr[i-1] + (*PML_AC).dampxhi[i-1] * I;

		    /* NW gridpoint */
		    if((i > 1) && (j > 1)){		

		       epse = (*matTE).epsilon[j-1][i-1] + ((*matTE).sigma[j-1][i-1] / Omega) * I;

           	       tmp = c * (Omega2 * mu0 * epse)
                           + d * ( 0.25 * idh2 * dy0 * dym
                                  +0.25 * idh2 * dx0 * dxm);
                
                       (*waveAC).Ar[count] = creal(tmp); 
                       (*waveAC).Ai[count] = cimag(tmp);
                       (*waveAC).irow[count] = k;
                       (*waveAC).icol[count] = k - 1 - NX;
                       count++;

		    }   

		    /* N gridpoint */
		    if(j > 1){		       

		       epse = (*matTE).epsilon[j-1][i] + ((*matTE).sigma[j-1][i] / Omega) * I;

           	       tmp = b * (Omega2 * mu0 * epse)
                	   + d * ( 0.25 * idh2 * dy0 * (2.0*dym)
                		  +0.25 * idh2 * dx0 * (-dxp-dxm))
                	   + e * (dy0 * idh2 * dym);

		       tmp += - damp * tmp;

                       (*waveAC).Ar[count] = creal(tmp); 
                       (*waveAC).Ai[count] = cimag(tmp);
                       (*waveAC).irow[count] = k;
                       (*waveAC).icol[count] = k - NX;
                       count++;

		    }  

		    /* NE gridpoint */
		    if((i < NX) && (j > 1)){

		       epse = (*matTE).epsilon[j-1][i+1] + ((*matTE).sigma[j-1][i+1] / Omega) * I;

          	       tmp = c * (Omega2 * mu0 * epse)
                           + d * ( 0.25 * idh2 * dy0 * dym
                                  +0.25 * idh2 * dx0 * dxp);                

                       (*waveAC).Ar[count] = creal(tmp); 
                       (*waveAC).Ai[count] = cimag(tmp);
                       (*waveAC).irow[count] = k;
                       (*waveAC).icol[count] = k + 1 - NX;
                       count++;

		    }  

		    /* W gridpoint */
		    if(i > 1){

		       epse = (*matTE).epsilon[j][i-1] + ((*matTE).sigma[j][i-1] / Omega) * I;

		       tmp = b * (Omega2 * mu0 * epse)
                	   + d * ( 0.25 * idh2 * dy0 * (-dyp-dym)
                                  +0.25 * idh2 * dx0 * (2.0*dxm))
                           + e * (dx0 * idh2 * dxm);

	               tmp += - damp * tmp;

                       (*waveAC).Ar[count] = creal(tmp); 
                       (*waveAC).Ai[count] = cimag(tmp);
                       (*waveAC).irow[count] = k;
                       (*waveAC).icol[count] = k-1;
                       count++;

		    }

		    /* central gridpoint */

		    epse = (*matTE).epsilon[j][i] + ((*matTE).sigma[j][i] / Omega) * I;

		    tmp = a * (Omega2 * mu0 * epse) 
                        + d * (-0.25 * idh2 * dy0 * (dyp + dym + dyp + dym)
                               -0.25 * idh2 * dx0 * (dxm + dxp + dxp + dxm))
                        + e * (-dy0 * idh2 * (dyp + dym) - dx0 * idh2 * (dxp+dxm));

		    tmp += damp * 4.0 * tmp;  

                    (*waveAC).Ar[count] = creal(tmp); 
                    (*waveAC).Ai[count] = cimag(tmp);
                    (*waveAC).irow[count] = k;
                    (*waveAC).icol[count] = k;
                    count++;

		    /* E gridpoint */
		    if(i < NX){

		       epse = (*matTE).epsilon[j][i+1] + ((*matTE).sigma[j][i+1] / Omega) * I;

 		       tmp = b * (Omega2 * mu0 * epse)
                           + d * ( 0.25 * idh2 * dy0 * (-dym-dyp)
                                  +0.25 * idh2 * dx0 * (dxp+dxp))
                           + e * (dx0 * idh2 * dxp);

	               tmp += - damp * tmp;

                       (*waveAC).Ar[count] = creal(tmp); 
                       (*waveAC).Ai[count] = cimag(tmp);
                       (*waveAC).irow[count] = k;
                       (*waveAC).icol[count] = k + 1;
                       count++;

		    }

		    /* SW gridpoint */
		    if( (j < NY) && (i > 1) ){

		       epse = (*matTE).epsilon[j+1][i-1] + ((*matTE).sigma[j+1][i-1] / Omega) * I;

           	       tmp = c * (Omega2 * mu0 * epse)
                           + d * ( 0.25 * idh2 * dy0 * dyp
                                  +0.25 * idh2 * dx0 * dxm);

                       (*waveAC).Ar[count] = creal(tmp); 
                       (*waveAC).Ai[count] = cimag(tmp);
                       (*waveAC).irow[count] = k;
                       (*waveAC).icol[count] = k - 1 + NX;
                       count++;

		    }

		    /* S gridpoint */
		    if(j < NY){

		       epse = (*matTE).epsilon[j+1][i] + ((*matTE).sigma[j+1][i] / Omega) * I;

                       tmp = b * (Omega2 * mu0 * epse)
                           + d * (0.25 * idh2 * dy0 * (dyp+dyp)
                                  + 0.25 * idh2 * dx0 * (-dxm-dxp))
                	   + e * (dy0 * idh2 * dyp);

		       tmp += -damp * tmp; 

                       (*waveAC).Ar[count] = creal(tmp); 
                       (*waveAC).Ai[count] = cimag(tmp);
                       (*waveAC).irow[count] = k;
                       (*waveAC).icol[count] = k + NX;
                       count++;

		    }     
            
		    /* SE gridpoint */
		    if((i < NX) && (j < NY)) {

		       epse = (*matTE).epsilon[j+1][i+1] + ((*matTE).sigma[j+1][i+1] / Omega) * I;

                       tmp = c * (Omega2 * mu0 * epse)
                	   + d * ( 0.25 * idh2 * dy0 * dyp
               			  +0.25 * idh2 * dx0 * dxp);                

                       (*waveAC).Ar[count] = creal(tmp); 
                       (*waveAC).Ai[count] = cimag(tmp);
                       (*waveAC).irow[count] = k;
                       (*waveAC).icol[count] = k + 1 + NX;
                       count++;

		    }

                    k++;                       

		}
	}

}