Zcosft1.cin

From Citizendium
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
This article is developing and not approved.
Main Article
Discussion
Related Articles  [?]
Bibliography  [?]
External Links  [?]
Citable Version  [?]
 
This editable Main Article is under development and subject to a disclaimer.

// zcosft1.cin is C++ routine required for compilation of examples with DCTI, Discrete Fourier transform of the First kind.

void zcosft1(z_type y[], int n)
{ /* void zrealft(z_type data[], unsigned long n, int isign);*/
       int j,n2;  z_type sum,y1,y2;
       double theta,wi=0.0,wpi,wpr,wr=1.0,wtemp;
       theta=M_PI/n;
       wtemp=sin(0.5*theta);
       wpr = -2.0*wtemp*wtemp;
       wpi=sin(theta);
       sum=0.5*(y[1]-y[n+1]);
       y[1]=0.5*(y[1]+y[n+1]);
       n2=n+2;
       for (j=2;j<=(n>>1);j++) {
               wr=(wtemp=wr)*wpr-wi*wpi+wr;
               wi=wi*wpr+wtemp*wpi+wi;
               y1=0.5*(y[j]+y[n2-j]);
               y2=(y[j]-y[n2-j]);
               y[j]=y1-wi*y2;
               y[n2-j]=y1+wi*y2;
               sum += wr*y2;
       }
       zrealft(y,n,1);
       y[n+1]=y[2];
       y[2]=sum;
       for(j=4;j<=n;j+=2) {sum += y[j]; y[j]=sum;}
}

References

http://tori.ils.uec.ac.jp/TORI/index.php/Zcosft1.cin