Changeset 1390 in Sophya for trunk/SophyaLib/NTools/fftpserver.cc


Ignore:
Timestamp:
Feb 9, 2001, 6:08:57 PM (25 years ago)
Author:
ansari
Message:

Modifs interface FFTServer , Reza 9/2/2001

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/NTools/fftpserver.cc

    r1371 r1390  
    2828FFTPackServer::FFTPackServer()
    2929   : FFTServerInterface("FFTPackServer using extended FFTPack (C-version) package")
    30 
     30  , ckR4(true, true) , ckR8(true, true)
    3131{
    3232//the working array and its size for the different
     
    5656
    5757
    58 void FFTPackServer::FFTForward(TVector< complex<r_8> > const & in, TVector< complex<r_8> > & out)
    59 {
    60   out = in;
    61   fftf(out.NElts(), out.Data());
    62   if (getNormalize()) out *= (1./(r_8)(in.NElts()));
    63 }
    64 
    65 void FFTPackServer::FFTBackward(TVector< complex<r_8> > const & in, TVector< complex<r_8> > & out)
    66 {
    67   out = in;
    68   fftb(out.NElts(), out.Data());
    69 }
    70 
    71 
    72 
    73 void FFTPackServer::FFTForward(TVector< complex<r_4> > const & in, TVector< complex<r_4> > & out)
    74 {
    75   out = in;
    76   fftf(out.NElts(), out.Data());
    77   if (getNormalize()) out *= (1./(r_4)(in.NElts()));
    78 }
    79 
    80 void FFTPackServer::FFTBackward(TVector< complex<r_4> > const & in, TVector< complex<r_4> > & out)
    81 {
    82   out = in;
    83   fftb(out.NElts(), out.Data());
    84 }
    85 
    86 void FFTPackServer::FFTForward(TVector< r_4 > const & in, TVector< complex<r_4> > & out)
    87 {
    88   TVector< r_4 > inout(in, false);
    89   fftf(inout.NElts(), inout.Data());
    90   ReShapetoCompl(inout, out);
    91   if (getNormalize()) out *= (1./(r_4)(in.NElts()));
    92 }
    93 
    94 void FFTPackServer::FFTBackward(TVector< complex<r_4> > const & in, TVector< r_4 > & out)
    95 {
    96   ReShapetoReal(in, out);
    97   fftb(out.NElts(), out.Data());
    98 }
    99 
    100 
    101 void FFTPackServer::FFTForward(TVector< r_8 > const & in, TVector< complex<r_8> > & out)
    102 {
    103   TVector< r_8 > inout(in, false);
    104   fftf(inout.NElts(), inout.Data());
    105   ReShapetoCompl(inout, out);
    106   if (getNormalize()) out *= (1./(r_8)(in.NElts()));
    107 }
    108 
    109 void FFTPackServer::FFTBackward(TVector< complex<r_8> > const & in, TVector< r_8 > & out)
    110 {
    111   ReShapetoReal(in, out);
    112   fftb(out.NElts(), out.Data());
     58void FFTPackServer::FFTForward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out)
     59{
     60  ckR8.CheckResize(in, out);
     61  out = in;
     62  fftf(out.Size(), out.Data());
     63  if (getNormalize()) out *= (1./(r_8)(in.Size()));
     64}
     65
     66void FFTPackServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out)
     67{
     68  ckR8.CheckResize(in, out);
     69  out = in;
     70  fftb(out.Size(), out.Data());
     71}
     72
     73
     74
     75void FFTPackServer::FFTForward(TArray< complex<r_4> > const & in, TArray< complex<r_4> > & out)
     76{
     77  ckR4.CheckResize(in, out); 
     78  out = in;
     79  fftf(out.Size(), out.Data());
     80  if (getNormalize()) out *= (1./(r_4)(in.Size()));
     81}
     82
     83void FFTPackServer::FFTBackward(TArray< complex<r_4> > const & in, TArray< complex<r_4> > & out)
     84{
     85  ckR4.CheckResize(in, out); 
     86  out = in;
     87  fftb(out.Size(), out.Data());
     88}
     89
     90void FFTPackServer::FFTForward(TArray< r_4 > const & in, TArray< complex<r_4> > & out)
     91{
     92  ckR4.CheckResize(in, out); 
     93  TArray< r_4 > inout(in, false);
     94  fftf(inout.Size(), inout.Data());
     95  ckR4.ReShapetoCompl(inout, out);
     96  if (getNormalize()) out *= complex<r_4>((1./(r_4)(in.Size())), 0.);
     97}
     98
     99void FFTPackServer::FFTBackward(TArray< complex<r_4> > const & in, TArray< r_4 > & out)
     100{
     101  ckR4.CheckResize(in, out);   
     102  ckR4.ReShapetoReal(in, out);
     103  fftb(out.Size(), out.Data());
     104}
     105
     106
     107void FFTPackServer::FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out)
     108{
     109  ckR8.CheckResize(in, out); 
     110  TArray< r_8 > inout(in, false);
     111  fftf(inout.Size(), inout.Data());
     112  ckR8.ReShapetoCompl(inout, out);
     113  if (getNormalize()) out *= complex<r_8>((1./(r_8)(in.Size())), 0.);
     114}
     115
     116void FFTPackServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out)
     117{
     118  ckR8.CheckResize(in, out); 
     119  ckR8.ReShapetoReal(in, out);
     120  fftb(out.Size(), out.Data());
    113121}
    114122
     
    208216}
    209217
    210 // Methodes pour reordonner les donnees
    211 
    212 /* --Methode-- */
    213 void FFTPackServer::ReShapetoReal( TVector< complex<r_8> > const & in, TVector< r_8 >  & out)
    214 {
    215   int n = in.NElts();
    216   int ncs = (fabs(in(n-1).imag()) > 1.e-12) ? ncs = 2*n-1 : ncs = n*2-2;
    217   out.ReSize(ncs);
    218   int k;
    219   out(0) = in(0).real();
    220   for(k=1;k<n-1;k++) {
    221     out(2*k-1) = in(k).real();
    222     out(2*k) = in(k).imag();
    223   }
    224   if (ncs == n*2-2)  out(ncs-1) = in(n-1).real();
    225   else { out(ncs-2) = in(n-1).real();  out(ncs-1) = in(n-1).imag(); }
    226 }
    227 
    228 /* --Methode-- */
    229 void FFTPackServer::ReShapetoReal( TVector< complex<r_4> > const & in, TVector< r_4 >  & out)
    230 {
    231   int n = in.NElts();
    232   int ncs = (fabs(in(n-1).imag()) > 1.e-12) ? ncs = 2*n-1 : ncs = n*2-2;
    233   out.ReSize(ncs);
    234   int k;
    235   out(0) = in(0).real();
    236   for(k=1;k<n-1;k++) {
    237     out(2*k-1) = in(k).real();
    238     out(2*k) = in(k).imag();
    239   }
    240   if (ncs == n*2-2)  out(ncs-1) = in(n-1).real();
    241   else { out(ncs-2) = in(n-1).real();  out(ncs-1) = in(n-1).imag(); }
    242 }
    243 
    244 
    245 /* --Methode-- */
    246 void FFTPackServer::ReShapetoCompl(TVector< r_8 > const & in, TVector< complex<r_8> > & out)
    247 {
    248   uint_4 n =  in.NElts();
    249   uint_4 ncs = n/2+1;
    250   uint_4 nc = (n%2 != 0) ? n/2+1 : n/2;
    251   out.ReSize(ncs);
    252   out(0) = complex<r_8> (in(0),0.);
    253   for(int k=1;k<nc;k++)
    254     out(k) =  complex<r_4> (in(2*k-1), in(2*k));
    255   if (n%2 == 0) out(ncs-1) = complex<r_8>(in(n-1), 0.);
    256 
    257 }
    258 
    259 /* --Methode-- */
    260 void FFTPackServer::ReShapetoCompl(TVector< r_4 > const & in, TVector< complex<r_4> > & out)
    261 {
    262   uint_4 n =  in.NElts();
    263   uint_4 ncs = n/2+1;
    264   uint_4 nc = (n%2 != 0) ? n/2+1 : n/2;
    265   out.ReSize(ncs);
    266   out(0) = complex<r_4> (in(0),0.);
    267   for(int k=1;k<nc;k++)
    268     out(k) =  complex<r_4> (in(2*k-1), in(2*k));
    269   if (n%2 == 0) out(ncs-1) = complex<r_4>(in(n-1), 0.);
    270 }
     218
Note: See TracChangeset for help on using the changeset viewer.