Esempio n. 1
0
LTFAT_EXTERN void
LTFAT_NAME(pgauss_cmplx)(const int L, const double w, const double c_t, const double c_f,
			      LTFAT_COMPLEX *g)
{

   int lr,k,nk;
   double tmp,sqrtl, safe, gnorm;

   sqrtl=sqrt((double)L);
   safe=4;
   gnorm=0;

   /* Outside the interval [-safe,safe] then exp(-pi*x.^2) is numerically zero. */
   nk=(int)ceil(safe/sqrt((double)L/sqrt(w)));

   for ( lr=0; lr<L; lr++)
   {
      //g[lr][0]=0.0;
      //g[lr][1]=0.0;
      g[lr] = (LTFAT_COMPLEX) 0.0;
      for (k=-nk;k<=nk; k++)
      {
	 /* Use a tmp variable to calculate squaring */
	 tmp = ((double)lr+c_t)/sqrtl-(double)k*sqrtl;
	 tmp = exp(-PI*tmp*tmp/w);
	 g[lr]+=tmp*LTFAT_COMPLEXH_NAME(cexp)(I*2*PI*c_f*((double)lr/L-(double)k));
	 //g[lr][0]+=tmp*cos(2*PI*c_f*((double)lr/L-(double)k));
	 //g[lr][1]+=tmp*sin(2*PI*c_f*((double)lr/L-(double)k));

      }
      double gReal = LTFAT_COMPLEXH_NAME(creal)(g[lr]);
      double gImag = LTFAT_COMPLEXH_NAME(cimag)(g[lr]);
      gnorm += (gReal*gReal+gImag*gImag);
      //gnorm +=g[lr][0]*g[lr][0]+g[lr][1]*g[lr][1];
   }

   /* Normalize it exactly. */
   gnorm=sqrt(gnorm);

   for ( lr=0; lr<L; lr++)
   {
      g[lr] /= gnorm;
      //g[lr][0] /= gnorm;
      //g[lr][1] /= gnorm;
   }
}
Esempio n. 2
0
LTFAT_EXTERN
void LTFAT_NAME(conjugate_array)(LTFAT_TYPE *in, LTFAT_TYPE *out,const size_t L)
{
#ifdef LTFAT_COMPLEXTYPE
for(size_t ii=0;ii<L;ii++)
{
    out[ii] = LTFAT_COMPLEXH_NAME(conj)(in[ii]);
}
#else
if(in==out)
{
    return;
}
else
{
    memcpy(out,in,L*sizeof(LTFAT_TYPE));
}
#endif

}