**7.1 Appendix A**

This section presents a formal statement of GOSH-FFT in MatLab-like pseudo-code.

Notation:

*x* = Complex array specifying the input signal *base* = 7*α*, where *α* is an integer greater than zero *n* = 7*β*, where *β*/*α* , is an integer greater than zero. ⊗ denotes scalar multiplication in SHIA

```
01 function y = GOSH − FFT(x, n, base, α)
02 y ← x
03 f orlevel = 1 : logbase(n
04 f ← m10(y, α)
05 r ← rootsO f Unity(baselevel)
06 w ← m10(r, α)
07 F ← localDFFT(f , w, level, n, base)
08 y ← localM10Inverse(F, level, n, base, α)
09 r ← w
10 end
11 end
```
Let 1,*e*,*e*2,*e*3, ...,*eN*−<sup>1</sup> represent *N* roots of unity, where multiplication of two arbitrary roots

<sup>199</sup> Cortical Specification of a Fast Fourier

*e*(*u*) = *e*(*u*%*B*)+(*u*/*B*)*<sup>n</sup>* = 1,*e*1, ...,*eB*−1, ...,*e*(*B*−1)*n*, ...,*e*(*B*−1)*n*+(*B*−1), for *p* > 1 and =

The proof is by induction on p. When p=1, GOSH-FFT is simply a DFT. Assume the

We now have *B* sub-signals, each of which is composed of *n* points. Then, by the induction hypothesis, we can apply GOSH-FFT to obtain *B* individual transforms of the *B* sub-signals;

*e<sup>j</sup>* = *e*(*i*+*j*)%*N*.

*<sup>n</sup>*−1, ...*FB*−<sup>1</sup> *<sup>n</sup>*−<sup>1</sup> , denote a sequance of *<sup>N</sup>* Fourier components.

*<sup>n</sup>*−1, ..., *<sup>f</sup> <sup>B</sup>*−<sup>1</sup> *<sup>n</sup>*−<sup>1</sup> , denote a sequence of *<sup>N</sup>* points in the input signal.

of unity denoted *e<sup>i</sup>* and *e<sup>j</sup>* is defined as: *e<sup>i</sup>*

<sup>0</sup> , ..., *<sup>F</sup>B*−<sup>1</sup>

<sup>0</sup> , ... *<sup>f</sup> <sup>B</sup>*−<sup>1</sup>

<sup>0</sup> ,..., *<sup>f</sup>* <sup>0</sup>

<sup>0</sup> ,..., *<sup>F</sup>*ˆ0

*f*) = *F*ˆ0

<sup>0</sup> , ..., *<sup>F</sup>*<sup>0</sup>

Transform Supports a Convolution Model of Visual Perception

GOSH-FFT computes a Fourier transform for all levels less than *p*.

<sup>0</sup> ,..., *<sup>f</sup> <sup>B</sup>*−<sup>1</sup> *<sup>n</sup>*−<sup>1</sup> .

<sup>0</sup> ,..., *<sup>F</sup>*ˆ*B*−<sup>1</sup> *<sup>n</sup>*−<sup>1</sup> .

1,*e*

Perform a local DFT on each of the *n* groups of *B* points. The general term is:

*<sup>n</sup>*−1,..., *<sup>F</sup>*ˆ*B*−<sup>1</sup> *<sup>n</sup>*−<sup>1</sup>

*<sup>r</sup> eBr*(*u*/*B*)%*<sup>N</sup>*

*<sup>r</sup> eBr*((*u*/*B*)+((*u*%*B*)*n*))%*<sup>N</sup>*

*<sup>f</sup> <sup>s</sup>*%*<sup>B</sup> <sup>s</sup>*/*<sup>B</sup> <sup>e</sup>*

 *e*

(*u*%*B*)*rBn*%*N*

 *e*

 *e*

(*Br*+*q*)((*u*/*B*)+((*u*%*B*)*n*))%*N*

*<sup>n</sup>*<sup>+</sup>1,...,*e*

(*B*−1)*n*<sup>+</sup>1,...,*e*

*<sup>n</sup>*−1,*e*

*<sup>q</sup>*((*u*/*B*)+((*u*%*B*)*n*))%*<sup>N</sup>* (8)

*<sup>s</sup>*((*u*/*B*+((*u*%*B*)*n*))%*<sup>N</sup>* (13)

= *F*((*u*/*B*)+(*u*%*B*)*n*)) (14)

*<sup>q</sup>*(*u*/*B*)+((*u*%*B*)*n*))%*<sup>N</sup>* (9)

*<sup>q</sup>*((*u*/*B*)+((*u*%*B*))*n*))%*<sup>N</sup>* (10)

*<sup>q</sup>*((*u*/*B*)+((*u*%*B*)*n*))%*<sup>N</sup>* (11)

(12)

<sup>2</sup>*n*−1,...,*eBn*−<sup>1</sup>

*<sup>n</sup>*−1,..., *<sup>f</sup> <sup>B</sup>*−<sup>1</sup>

*<sup>n</sup>*−1,..., *<sup>F</sup>*ˆ*B*−<sup>1</sup>

<sup>0</sup> ,..., *<sup>F</sup>*ˆ0

(*B*−1)*n*,*e*

*B*−1 ∑ *q*=0 *F*ˆ*q <sup>u</sup>*/*Be*

*<sup>r</sup> eBn*(*u*/*B*)%*Ne*

 *n*−1 ∑ *r*=0 *f q r e*

= *N*−1 ∑ *s*=0

 *n*−1 ∑ *r*=0 *f q*

<sup>0</sup> ,..., *<sup>F</sup>*ˆ*B*−<sup>1</sup>

*M*(*e*(*u*)) = *e*((*u*/*B*)+(*u*%*B*)*n*)

= *B*−1 ∑ *q*=0

 *n*−1 ∑ *r*=0 *f q*

> *n*−1 ∑ *r*=0 *f q*

> > = *B*−1 ∑ *q*=0

= *B*−1 ∑ *q*=0

> = *B*−1 ∑ *q*=0

*<sup>n</sup>*,...,*e*

= 1,*e*

<sup>0</sup> , ..., *<sup>f</sup>* <sup>0</sup>

1,*e*1, ...,*eB*−1, for p = 1.

*<sup>F</sup>*(*u*) = *<sup>F</sup>u*%*<sup>B</sup> <sup>u</sup>*/*<sup>B</sup>* <sup>=</sup> *<sup>F</sup>*<sup>0</sup>

*<sup>f</sup>*(*x*) = *<sup>f</sup> <sup>x</sup>*%*<sup>B</sup> <sup>x</sup>*/*<sup>B</sup>* <sup>=</sup> *<sup>f</sup>* <sup>0</sup>

*<sup>M</sup>*−1(*<sup>f</sup> <sup>x</sup>*%*<sup>B</sup> <sup>x</sup>*/*<sup>B</sup>* ) = *<sup>f</sup>* <sup>0</sup>

which yields:

ˆ *f* = *F*ˆ0

*M*( ˆ

Let

= *F*(*u*)

```
01 function T = m10(t, α)
02 f ori = 0 : n − 1
03 a ← convertToSH IA(i)
04 b ← 10α ⊗ a
05 c ← convertFromSH IA(b)
06 T(c) ← t(i)
07 end
08 end
01 function F = localDFT( f, w, level, n, base )
02 subSignalSize ← baselevel
03 numSubSignals ← n/subSignalSize
04 f ors = 0 : numSubSignals − 1
05 tab ← s × subSignalSize
06 f ors = 0 : subSignalSize − 1
07 wLB ← i × base
08 lB ← i × base + tab
09 uB ← lB + base − 1
10 f oru = lB : uB
11 F(u) ← ∑base−1 x=0 f(x + lB) × w(x + wLB)
12 end
13 end
14 end
15 end
01 function T = localM10Inverse( t, level, n, base )
02 subSignalSize ← baselevel
03 numSubSignals ← n/subSignalSize
04 for s = 0: numSubSignals-1
05 for i =0: subSignalSize-1
```