Automatic Generation of Prime Length FFT Programs by C. Sidney Burrus - HTML preview

PLEASE NOTE: This is an HTML preview only and some elements such as links or page numbers may be incorrect.
Download the book in PDF, ePub, Kindle for a complete version.

Chapter 11Appendix: A 31 Point FFT Program

Appendix: A 31 Point FFT Program

As an example, we list a 31 point FFT program.

function y = fft31(x,u,ip,op)
% y = fft31(x,u,ip,op)
% y  : the 31 point DFT of x 
% u  : a vector of precomputed multiplicative constants
% ip : input permutation
% op : ouput permutation

y = zeros(31,1);
x = x(ip);                                        % input permutation
x(2:31) = KRED([2,3,5],[1,1,1],3,x(2:31));        % reduction operations
y(1) = x(1)+x(2);                                 % DC term calculation
% -------------------- block : 1 -------------------------------------------------
y(2) = x(2)*u(1);                       
% -------------------- block : 2 -------------------------------------------------
y(3) = x(3)*u(2);                       
% -------------------- block : 3 -------------------------------------------------
v = ID2I(1,1,x(4:5));              % v = (I(1) kron D2 kron I(1)) * x(4:5)
v = v.*u(3:5);                          
y(4:5) = ID2tI(1,1,v);             % y(4:5) = (I(1) kron D2' kron I(1)) * v
% -------------------- block : 6 = 2 * 3 -----------------------------------------
v = ID2I(1,1,x(6:7));              % v = (I(1) kron D2 kron I(1)) * x(6:7)
v = v.*u(6:8);                          
y(6:7) = ID2tI(1,1,v);             % y(6:7) = (I(1) kron D2' kron I(1)) * v
% -------------------- block : 5 -------------------------------------------------
v = ID2I(1,2,x(8:11));             % v = (I(1) kron D2 kron I(2)) * x(8:11)
v = ID2I(3,1,v);                   % v = (I(3) kron D2 kron I(1)) * v
v = v.*u(9:17);                         
v = ID2tI(1,3,v);                  % v = (I(1) kron D2' kron I(3)) * v
y(8:11) = ID2tI(2,1,v);            % y(8:11) = (I(2) kron D2' kron I(1)) * v
% -------------------- block : 10 = 2 * 5 ----------------------------------------
v = ID2I(1,2,x(12:15));            % v = (I(1) kron D2 kron I(2)) * x(12:15)
v = ID2I(3,1,v);                   % v = (I(3) kron D2 kron I(1)) * v
v = v.*u(18:26);                        
v = ID2tI(1,3,v);                  % v = (I(1) kron D2' kron I(3)) * v
y(12:15) = ID2tI(2,1,v);           % y(12:15) = (I(2) kron D2' kron I(1)) * v
% -------------------- block : 15 = 3 * 5 ----------------------------------------
v = ID2I(1,4,x(16:23));            % v = (I(1) kron D2 kron I(4)) * x(16:23)
v = ID2I(3,2,v);                   % v = (I(3) kron D2 kron I(2)) * v
v = ID2I(9,1,v);                   % v = (I(9) kron D2 kron I(1)) * v
v = v.*u(27:53);                        
v = ID2tI(1,9,v);                  % v = (I(1) kron D2' kron I(9)) * v
v = ID2tI(2,3,v);                  % v = (I(2) kron D2' kron I(3)) * v
y(16:23) = ID2tI(4,1,v);           % y(16:23) = (I(4) kron D2' kron I(1)) * v
% -------------------- block : 30 = 2 * 3 * 5 ------------------------------------
v = ID2I(1,4,x(24:31));            % v = (I(1) kron D2 kron I(4)) * x(24:31)
v = ID2I(3,2,v);                   % v = (I(3) kron D2 kron I(2)) * v
v = ID2I(9,1,v);                   % v = (I(9) kron D2 kron I(1)) * v
v = v.*u(54:80);                        
v = ID2tI(1,9,v);                  % v = (I(1) kron D2' kron I(9)) * v
v = ID2tI(2,3,v);                  % v = (I(2) kron D2' kron I(3)) * v
y(24:31) = ID2tI(4,1,v);           % y(24:31) = (I(4) kron D2' kron I(1)) * v
% --------------------------------------------------------------------------------
y(2) = y(1)+y(2);                                 % DC term calculation
y(2:31) = tKRED([2,3,5],[1,1,1],3,y(2:31));       % transpose reduction operations
y = y(op);                                        % output permutation

% For complex data - 
% Total Number of Real Multiplications : 160
% Total Number of Real Additions: 776

The constants, input and output permutations are:

% The multiplicative constants for the 31 point FFT

I = sqrt(-1);
u = [
       -1.033333333333333
        0.185592145427667*I
        0.251026872929094
        0.638094290379888
       -0.296373721102994
       -0.462201919825109*I
        0.155909426230360*I
        0.102097497864916*I
       -0.100498239164838
       -0.217421331841463
       -0.325082164955763
        0.798589508696894
       -0.780994042074251
       -0.256086011899669
        0.169494392220932
        0.711997889018157
       -0.060064820876732
       -1.235197570427205*I
       -0.271691369288525*I
        0.541789612349592*I
        0.329410560797314*I
        1.317497505049809*I
       -0.599508803858381*I
        0.093899154219231*I
       -0.176199088841836*I
        0.028003825226279*I
        1.316699050305790
        1.330315270540553
       -0.385122753006171
       -2.958666546021397
       -2.535301995146201
        2.013474028487015
        1.081897731187396
        0.136705213653014
       -0.569390844064251
       -0.262247009112805
        2.009855570455675
       -1.159348599757857
        0.629367699727360
        1.229312102919654
       -1.479874670425178
       -0.058279061554516
       -0.908786032252333
        0.721257672797977
       -0.351484013730995
       -1.113390280332076
        0.514823784254676
        0.776432948764679
        0.435329964075516
       -0.177866452687279
       -0.341206223210960
        0.257360272866440
       -0.050622276244575
       -2.745673340229639*I
        2.685177424507523*I
        0.880463026400118*I
       -5.028851220636894*I
       -0.345528375980267*I
        1.463210769729252*I
        3.328421083558774*I
       -0.237219367348867*I
       -1.086975102467855*I
       -1.665522956385442*I
        1.628826188810638*I
        0.534088072762272*I
       -3.050496586573981*I
       -0.209597199290132*I
        0.887582325001072*I
        2.019017208624242*I
       -0.143897052948668*I
       -0.659358110687783*I
        1.470398765538361*I
       -1.438001204439387*I
       -0.471517033054130*I
        2.693115935736959*I
        0.185041858423467*I
       -0.783597698243441*I
       -1.782479430727672*I
        0.127038806765845*I
        0.582111071051880*I
];


% The input permutation for the 31 point FFT

ip = [
   1
   2
   17
   9
   5
   3
   26
   29
   15
   8
   20
   6
   19
   10
   21
   11
   31
   16
   24
   28
   30
   7
   4
   18
   25
   13
   27
   14
   23
   12
   22
];


% The output permutation for the 31 point FFT

op = [
   1
   31
   30
   2
   29
   26
   6
   19
   28
   23
   25
   9
   5
   7
   18
   12
   27
   3
   22
   20
   24
   10
   8
   13
   4
   21
   11
   14
   17
   15
   16
];

References

Solutions

Find Your Next Great Read

Describe what you're looking for in as much detail as you'd like.
Our AI reads your request and finds the best matching books for you.

Showing results for ""

Popular searches:

Romance Mystery & Thriller Self-Help Sci-Fi Business