Code covered by the BSD License  

Highlights from
slatec

from slatec by Ben Barrowes
The slatec library converted into matlab functions.

[n,c,ch,wa,ifac]=cfftb1(n,c,ch,wa,ifac);
function [n,c,ch,wa,ifac]=cfftb1(n,c,ch,wa,ifac);
persistent i idl1 ido idot ip iw ix2 ix3 ix4 k1 l1 l2 n2 na nac nf ; 

if isempty(i), i=0; end;
if isempty(idl1), idl1=0; end;
if isempty(ido), ido=0; end;
if isempty(idot), idot=0; end;
if isempty(ip), ip=0; end;
if isempty(iw), iw=0; end;
if isempty(ix2), ix2=0; end;
if isempty(ix3), ix3=0; end;
if isempty(ix4), ix4=0; end;
if isempty(k1), k1=0; end;
if isempty(l1), l1=0; end;
if isempty(l2), l2=0; end;
if isempty(n2), n2=0; end;
if isempty(na), na=0; end;
if isempty(nac), nac=0; end;
if isempty(nf), nf=0; end;
%***BEGIN PROLOGUE  CFFTB1
%***PURPOSE  Compute the unnormalized inverse of CFFTF1.
%***LIBRARY   SLATEC (FFTPACK)
%***CATEGORY  J1A2
%***TYPE      COMPLEX (RFFTB1-S, CFFTB1-C)
%***KEYWORDS  FFTPACK, FOURIER TRANSFORM
%***AUTHOR  Swarztrauber, P. N., (NCAR)
%***DESCRIPTION
%
%  subroutine CFFTB1 computes the backward complex discrete Fourier
%  transform (the Fourier synthesis).  Equivalently, CFFTB1 computes
%  a complex periodic sequence from its Fourier coefficients.
%  The transform is defined below at output parameter C.
%
%  A call of CFFTF1 followed by a call of CFFTB1 will multiply the
%  sequence by N.
%
%  The arrays WA and IFAC which are used by subroutine CFFTB1 must be
%  initialized by calling subroutine CFFTI1 (N, WA, IFAC).
%
%  Input Parameters
%
%  N       the length of the complex sequence C.  The method is
%          more efficient when N is the product of small primes.
%
%  C       a complex array of length N which contains the sequence
%
%  CH      a real work array of length at least 2*N
%
%  WA      a real work array which must be dimensioned at least 2*N.
%
%  IFAC    an integer work array which must be dimensioned at least 15.
%
%          The WA and IFAC arrays must be initialized by calling
%          subroutine CFFTI1 (N, WA, IFAC), and different WA and IFAC
%          arrays must be used for each different value of N.  This
%          initialization does not have to be repeated so long as N
%          remains unchanged.  Thus subsequent transforms can be
%          obtained faster than the first.  The same WA and IFAC arrays
%          can be used by CFFTF1 and CFFTB1.
%
%  Output Parameters
%
%  C       For J=1,...,N
%
%              C(J)=the sum from K=1,...,N of
%
%                 C(K)*EXP(I*(J-1)*(K-1)*2*PI/N)
%
%                         where I=SQRT(-1)
%
%  NOTE:   WA and IFAC contain initialization calculations which must
%          not be destroyed between calls of subroutine CFFTF1 or CFFTB1
%
%***REFERENCES  P. N. Swarztrauber, Vectorizing the FFTs, in Parallel
%                 Computations (G. Rodrigue, ed.), Academic Press,
%                 1982, pp. 51-83.
%***ROUTINES CALLED  PASSB, PASSB2, PASSB3, PASSB4, PASSB5
%***REVISION HISTORY  (YYMMDD)
%   790601  DATE WRITTEN
%   830401  Modified to use SLATEC library source file format.
%   860115  Modified by Ron Boisvert to adhere to Fortran 77 by
%           changing dummy array size declarations (1) to (*).
%   881128  Modified by Dick Valent to meet prologue standards.
%   891214  Prologue converted to Version 4.0 format.  (BAB)
%   900131  Routine changed from subsidiary to user-callable.  (WRB)
%   920501  Reformatted the REFERENCES section.  (WRB)
%***end PROLOGUE  CFFTB1
ch_shape=size(ch);ch=reshape(ch,1,[]);
c_shape=size(c);c=reshape(c,1,[]);
wa_shape=size(wa);wa=reshape(wa,1,[]);
ifac_shape=size(ifac);ifac=reshape(ifac,1,[]);
%***FIRST EXECUTABLE STATEMENT  CFFTB1
nf = fix(ifac(2));
na = 0;
l1 = 1;
iw = 1;
for k1 = 1 : nf;
ip = fix(ifac(k1+2));
l2 = fix(ip.*l1);
ido = fix(fix(n./l2));
idot = fix(ido + ido);
idl1 = fix(idot.*l1);
if( ip==4 )
ix2 = fix(iw + idot);
ix3 = fix(ix2 + idot);
if( na~=0 )
[idot,l1,ch,c,dumvar5,dumvar6,dumvar7]=passb4(idot,l1,ch,c,wa(sub2ind(size(wa),max(iw,1)):end),wa(sub2ind(size(wa),max(ix2,1)):end),wa(sub2ind(size(wa),max(ix3,1)):end));   dumvar5i=find((wa(sub2ind(size(wa),max(iw,1)):end))~=(dumvar5));dumvar6i=find((wa(sub2ind(size(wa),max(ix2,1)):end))~=(dumvar6));dumvar7i=find((wa(sub2ind(size(wa),max(ix3,1)):end))~=(dumvar7));   wa(iw-1+dumvar5i)=dumvar5(dumvar5i); wa(ix2-1+dumvar6i)=dumvar6(dumvar6i); wa(ix3-1+dumvar7i)=dumvar7(dumvar7i); 
else;
[idot,l1,c,ch,dumvar5,dumvar6,dumvar7]=passb4(idot,l1,c,ch,wa(sub2ind(size(wa),max(iw,1)):end),wa(sub2ind(size(wa),max(ix2,1)):end),wa(sub2ind(size(wa),max(ix3,1)):end));   dumvar5i=find((wa(sub2ind(size(wa),max(iw,1)):end))~=(dumvar5));dumvar6i=find((wa(sub2ind(size(wa),max(ix2,1)):end))~=(dumvar6));dumvar7i=find((wa(sub2ind(size(wa),max(ix3,1)):end))~=(dumvar7));   wa(iw-1+dumvar5i)=dumvar5(dumvar5i); wa(ix2-1+dumvar6i)=dumvar6(dumvar6i); wa(ix3-1+dumvar7i)=dumvar7(dumvar7i); 
end;
na = fix(1 - na);
elseif( ip==2 ) ;
if( na~=0 )
[idot,l1,ch,c,wa(sub2ind(size(wa),max(iw,1)):end)]=passb2(idot,l1,ch,c,wa(sub2ind(size(wa),max(iw,1)):end));
else;
[idot,l1,c,ch,wa(sub2ind(size(wa),max(iw,1)):end)]=passb2(idot,l1,c,ch,wa(sub2ind(size(wa),max(iw,1)):end));
end;
na = fix(1 - na);
elseif( ip==3 ) ;
ix2 = fix(iw + idot);
if( na~=0 )
[idot,l1,ch,c,dumvar5,dumvar6]=passb3(idot,l1,ch,c,wa(sub2ind(size(wa),max(iw,1)):end),wa(sub2ind(size(wa),max(ix2,1)):end));   dumvar5i=find((wa(sub2ind(size(wa),max(iw,1)):end))~=(dumvar5));dumvar6i=find((wa(sub2ind(size(wa),max(ix2,1)):end))~=(dumvar6));   wa(iw-1+dumvar5i)=dumvar5(dumvar5i); wa(ix2-1+dumvar6i)=dumvar6(dumvar6i); 
else;
[idot,l1,c,ch,dumvar5,dumvar6]=passb3(idot,l1,c,ch,wa(sub2ind(size(wa),max(iw,1)):end),wa(sub2ind(size(wa),max(ix2,1)):end));   dumvar5i=find((wa(sub2ind(size(wa),max(iw,1)):end))~=(dumvar5));dumvar6i=find((wa(sub2ind(size(wa),max(ix2,1)):end))~=(dumvar6));   wa(iw-1+dumvar5i)=dumvar5(dumvar5i); wa(ix2-1+dumvar6i)=dumvar6(dumvar6i); 
end;
na = fix(1 - na);
elseif( ip~=5 ) ;
if( na~=0 )
ch_orig=ch; ch_orig=ch; c_orig=c;    [nac,idot,ip,l1,idl1,ch,dumvar7,dumvar8,c,dumvar10,wa(sub2ind(size(wa),max(iw,1)):end)]=passb(nac,idot,ip,l1,idl1,ch,ch,ch,c,c,wa(sub2ind(size(wa),max(iw,1)):end));    c(dumvar10~=c_orig)=dumvar10(dumvar10~=c_orig); ch(dumvar8~=ch_orig)=dumvar8(dumvar8~=ch_orig); ch(dumvar7~=ch_orig)=dumvar7(dumvar7~=ch_orig);
else;
c_orig=c; c_orig=c; ch_orig=ch;    [nac,idot,ip,l1,idl1,c,dumvar7,dumvar8,ch,dumvar10,wa(sub2ind(size(wa),max(iw,1)):end)]=passb(nac,idot,ip,l1,idl1,c,c,c,ch,ch,wa(sub2ind(size(wa),max(iw,1)):end));    ch(dumvar10~=ch_orig)=dumvar10(dumvar10~=ch_orig); c(dumvar8~=c_orig)=dumvar8(dumvar8~=c_orig); c(dumvar7~=c_orig)=dumvar7(dumvar7~=c_orig);
end;
if( nac~=0 )
na = fix(1 - na);
end;
else;
ix2 = fix(iw + idot);
ix3 = fix(ix2 + idot);
ix4 = fix(ix3 + idot);
if( na~=0 )
[idot,l1,ch,c,dumvar5,dumvar6,dumvar7,dumvar8]=passb5(idot,l1,ch,c,wa(sub2ind(size(wa),max(iw,1)):end),wa(sub2ind(size(wa),max(ix2,1)):end),wa(sub2ind(size(wa),max(ix3,1)):end),wa(sub2ind(size(wa),max(ix4,1)):end));   dumvar5i=find((wa(sub2ind(size(wa),max(iw,1)):end))~=(dumvar5));dumvar6i=find((wa(sub2ind(size(wa),max(ix2,1)):end))~=(dumvar6));dumvar7i=find((wa(sub2ind(size(wa),max(ix3,1)):end))~=(dumvar7));dumvar8i=find((wa(sub2ind(size(wa),max(ix4,1)):end))~=(dumvar8));   wa(iw-1+dumvar5i)=dumvar5(dumvar5i); wa(ix2-1+dumvar6i)=dumvar6(dumvar6i); wa(ix3-1+dumvar7i)=dumvar7(dumvar7i); wa(ix4-1+dumvar8i)=dumvar8(dumvar8i); 
else;
[idot,l1,c,ch,dumvar5,dumvar6,dumvar7,dumvar8]=passb5(idot,l1,c,ch,wa(sub2ind(size(wa),max(iw,1)):end),wa(sub2ind(size(wa),max(ix2,1)):end),wa(sub2ind(size(wa),max(ix3,1)):end),wa(sub2ind(size(wa),max(ix4,1)):end));   dumvar5i=find((wa(sub2ind(size(wa),max(iw,1)):end))~=(dumvar5));dumvar6i=find((wa(sub2ind(size(wa),max(ix2,1)):end))~=(dumvar6));dumvar7i=find((wa(sub2ind(size(wa),max(ix3,1)):end))~=(dumvar7));dumvar8i=find((wa(sub2ind(size(wa),max(ix4,1)):end))~=(dumvar8));   wa(iw-1+dumvar5i)=dumvar5(dumvar5i); wa(ix2-1+dumvar6i)=dumvar6(dumvar6i); wa(ix3-1+dumvar7i)=dumvar7(dumvar7i); wa(ix4-1+dumvar8i)=dumvar8(dumvar8i); 
end;
na = fix(1 - na);
end;
l1 = fix(l2);
iw = fix(iw +(ip-1).*idot);
end; k1 = fix(nf+1);
if( na==0 )
ch_shape=zeros(ch_shape);ch_shape(:)=ch(1:numel(ch_shape));ch=ch_shape;
c_shape=zeros(c_shape);c_shape(:)=c(1:numel(c_shape));c=c_shape;
wa_shape=zeros(wa_shape);wa_shape(:)=wa(1:numel(wa_shape));wa=wa_shape;
ifac_shape=zeros(ifac_shape);ifac_shape(:)=ifac(1:numel(ifac_shape));ifac=ifac_shape;
return;
end;
n2 = fix(n + n);
for i = 1 : n2;
c(i) = ch(i);
end; i = fix(n2+1);
ch_shape=zeros(ch_shape);ch_shape(:)=ch(1:numel(ch_shape));ch=ch_shape;
c_shape=zeros(c_shape);c_shape(:)=c(1:numel(c_shape));c=c_shape;
wa_shape=zeros(wa_shape);wa_shape(:)=wa(1:numel(wa_shape));wa=wa_shape;
ifac_shape=zeros(ifac_shape);ifac_shape(:)=ifac(1:numel(ifac_shape));ifac=ifac_shape;
end
%DECK CFFTB

Contact us at files@mathworks.com