- Matrices and Matrix Multiplication
- C/C++/Ruby Programming

- Jeremy Johnson and Markus Pueschel (2000), "In Search of the Optimal Walsh-Hadamard Transform", Proc. ICASSP 2000, pp. 3347-3350 (wht.ps,wht.pdf)

- Walsh-Hadamard Transform (WHT) (see JP00, WHT package)
- Definition of the Walsh-Hadamard Transform (WHT)
- Tensor Product and a factorization of the WHT
- Space of algorithms for computing the WHT
- Number of flops/instructions
- WHT package
- Performance distribution of WHT algorithms
- Searching for the optimal WHT algorithm with dynamic programming
- Matrix operations and the tensor product (See JJRT90, HJ91, TAL89, vL92)
- Partitioned matrices and block matrix multiplication
- Matrix transposition: (AB)^T = B^T A^T
- Permutation matrices: exactly one 1 in each row and column.

P_pq = P_q P_p, P^(-1) = P^T, (PAP^T)_ij = A_p(i)p(j) - Stride Permutations: L^(mn)_n X = X_n = (x_0,x_n,...,x_(m-1)n,...,x_(n-1),x_(n-1 + n),...,x_(n-1 +(m-1)n)). (L^(mn)_n)^T = L^(mn)_m.
- Tensor (Kronecker) Product: ij block of A tensor B = a_ijB
- Properties of tensor product
- (aA) tensor B = a(A tensor B) = A tensor (aB)
- (A1 + A2) tensor B = (A1 tensor B) + (A2 tensor B)
- A tensor (B1 + B2) = (A tensor B1) + (A tensor B2)
- 1 tensor A = A = A tensor 1
- (A tensor (B tensor C)) = ((A tensor B) tensor C)
- (A tensor B)^T = (A^T tensor B^T)
- (A tensor B)(C tensor D) = AC tensor BD
- (A tensor B)(x tensor y) = Ax tensor By
- (A tensor B) = (A tensor I)(I tensor B) = (I tensor B)(A tensor I)
- (A1 tensor ... tensor At)(B1 tensor ... tensor Bt) = A1B1 tensor ... tensor AtBt
- (A1 ... At) tensor (B1 ... Bt) = (A1 tensor B1) ... (At tensor Bt)
- (A tensor B)^(-1) = A^(-1) tensor B^(-1)
- I_m tensor I_n = I_mn
- tensor product of [permutation, diagonal, monomial] matrices are [permutaiton, diagonal, monomial].
- A tensor B = L^(mn)_m(B tensor A) L^(mn)_n

- Programming tensor products (see JJRT90, JJ92, Pit97)

- WHT Lecture (wht_slides.ppt), wht_slides.pdf)
- Tensor Product notes (tensor_notes.pdf)

- WHT package
- spiral_wht-2.0-pre-1.tar.gz (developers WHT package)
- Jeremy Johnson and Markus Püschel (2000), "In Search of the Optimal Walsh-Hadamard Transform," Proc. ICASSP 2000, pp. 3347-3350. (wht.ps,wht.pdf)
- J. Johnson, R.W. Johnson, D. Rodriguez, and R. Tolimieri (1990), "A Methodology for Designing, Modifying, and Implementing Fourier Transform Algorithms on Various Architectures," Circuits, Systems, and Signal Processing 9, 449-500. (fft.ps,wht.pdf)
- J. Johnson and R.W. Johnson (1992), "Programming Schemata for Tensor Product," Technical report DU-MCS-92-01, Dept. of Mathematics and Computer Science, Drexel University. (schema.ps, schema.pdf)
- Roger A. Horn and Charles R. Johnson (1991). Topics in Matrix Analysis. Cambridge University Press, Cambridge.
- N. P. Pitsianis (1997), The Kronecker Product in Approximation and Fast Transform Generation, PhD Thesis, Department of Computer Science, Cornell University, Jan. 1997, Advisor Charles F. Van Loan.
- R. Tolimieri, M. An, and C. Lu (1989). Algorithms for the Discrete Fourier Transform and Convolution. Springer-Verlag, New York. Second edition, 1997.
- Charles Van Loan (1992). Computational Frameworks for the Fast Fourier Transform. Frontiers in Applied Mathematics, Society for Industrial and Applied Mathematics, Philadelphia, Vol. 10.

- Prove by induction that I tensor A1...At = (I tensor A1)...(I tensor At), or more generally A1...At tensor B1...Bt = (A1 tensor B1)...(At tensor Bt).
- Install and test WHT package
- Implement recursive and iterative WHT algorithms (in place)
- Implement radix 4 recursive and iterative WHT algorithms (in place)
- Perform timings for recursive and iterative WHT with different sizes of small. Also measure small and compare to iterative.
- Time random WHTs and produce histogram
- Run dynamic programming and compare to recursive, iterative and random.