function y = fft109(x,u,ip,op) % y = fft109(x,u,ip,op) % y : the 109 point DFT of x % u : a vector of precomputed multiplicative constants % ip : input permutation % op : ouput permutation y = zeros(109,1); x = x(ip); % input permutation x(2:109) = KRED([2,3],[2,3],2,x(2:109)); % 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 : 4 ------------------------------------------------- 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 : 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 : 6 = 2 * 3 ----------------------------------------- v = ID2I(1,1,x(8:9)); % v = (I(1) kron D2 kron I(1)) * x(8:9) v = v.*u(9:11); y(8:9) = ID2tI(1,1,v); % y(8:9) = (I(1) kron D2' kron I(1)) * v % -------------------- block : 12 = 4 * 3 ---------------------------------------- v = ID2I(1,2,x(10:13)); % v = (I(1) kron D2 kron I(2)) * x(10:13) v = ID2I(3,1,v); % v = (I(3) kron D2 kron I(1)) * v v = v.*u(12:20); v = ID2tI(1,3,v); % v = (I(1) kron D2' kron I(3)) * v y(10:13) = ID2tI(2,1,v); % y(10:13) = (I(2) kron D2' kron I(1)) * v % -------------------- block : 9 ------------------------------------------------- v = ID3I(2,1,x(14:19)); % v = (I(2) kron D3 kron I(1)) * x(14:19) v = ID2I(1,5,v); % v = (I(1) kron D2 kron I(5)) * v v = v.*u(21:35); v = ID2tI(1,5,v); % v = (I(1) kron D2' kron I(5)) * v y(14:19) = ID3tI(2,1,v); % y(14:19) = (I(2) kron D3' kron I(1)) * v % -------------------- block : 18 = 2 * 9 ---------------------------------------- v = ID3I(2,1,x(20:25)); % v = (I(2) kron D3 kron I(1)) * x(20:25) v = ID2I(1,5,v); % v = (I(1) kron D2 kron I(5)) * v v = v.*u(36:50); v = ID2tI(1,5,v); % v = (I(1) kron D2' kron I(5)) * v y(20:25) = ID3tI(2,1,v); % y(20:25) = (I(2) kron D3' kron I(1)) * v % -------------------- block : 36 = 4 * 9 ---------------------------------------- v = ID3I(4,1,x(26:37)); % v = (I(4) kron D3 kron I(1)) * x(26:37) v = ID2I(1,10,v); % v = (I(1) kron D2 kron I(10)) * v v = ID2I(3,5,v); % v = (I(3) kron D2 kron I(5)) * v v = v.*u(51:95); v = ID2tI(1,15,v); % v = (I(1) kron D2' kron I(15)) * v v = ID2tI(2,5,v); % v = (I(2) kron D2' kron I(5)) * v y(26:37) = ID3tI(4,1,v); % y(26:37) = (I(4) kron D3' kron I(1)) * v % -------------------- block : 27 ------------------------------------------------ v = ID3I(2,3,x(38:55)); % v = (I(2) kron D3 kron I(3)) * x(38:55) v = ID3I(10,1,v); % v = (I(10) kron D3 kron I(1)) * v v = ID2I(1,25,v); % v = (I(1) kron D2 kron I(25)) * v v = v.*u(96:170); v = ID2tI(1,25,v); % v = (I(1) kron D2' kron I(25)) * v v = ID3tI(2,5,v); % v = (I(2) kron D3' kron I(5)) * v y(38:55) = ID3tI(6,1,v); % y(38:55) = (I(6) kron D3' kron I(1)) * v % -------------------- block : 54 = 2 * 27 --------------------------------------- v = ID3I(2,3,x(56:73)); % v = (I(2) kron D3 kron I(3)) * x(56:73) v = ID3I(10,1,v); % v = (I(10) kron D3 kron I(1)) * v v = ID2I(1,25,v); % v = (I(1) kron D2 kron I(25)) * v v = v.*u(171:245); v = ID2tI(1,25,v); % v = (I(1) kron D2' kron I(25)) * v v = ID3tI(2,5,v); % v = (I(2) kron D3' kron I(5)) * v y(56:73) = ID3tI(6,1,v); % y(56:73) = (I(6) kron D3' kron I(1)) * v % -------------------- block : 108 = 4 * 27 -------------------------------------- v = ID3I(4,3,x(74:109)); % v = (I(4) kron D3 kron I(3)) * x(74:109) v = ID3I(20,1,v); % v = (I(20) kron D3 kron I(1)) * v v = ID2I(1,50,v); % v = (I(1) kron D2 kron I(50)) * v v = ID2I(3,25,v); % v = (I(3) kron D2 kron I(25)) * v v = v.*u(246:470); v = ID2tI(1,75,v); % v = (I(1) kron D2' kron I(75)) * v v = ID2tI(2,25,v); % v = (I(2) kron D2' kron I(25)) * v v = ID3tI(4,5,v); % v = (I(4) kron D3' kron I(5)) * v y(74:109) = ID3tI(12,1,v); % y(74:109) = (I(12) kron D3' kron I(1)) * v % -------------------------------------------------------------------------------- y(2) = y(1)+y(2); % DC term calculation y(2:109) = tKRED([2,3],[2,3],2,y(2:109)); % transpose reduction operations y = y(op); % output permutation % For complex data - % Total Number of Real Multiplications : 940 % Total Number of Real Additions: 5096