This was answered by Federico Poloni. I am merely providing the details (some notations are changed). Consider a block toeplitz toeplitz blocks (BTTB) matrix (I am working on a signal processing problem where I encountered large matrices of this form to invert)of size 9 x 9 (i.e 3^2 x 3^2),
BTTB =
[ a_1, a_2, a_3, a_2, a_5, a_6, a_3, a_6, a_9]
[ a_2, a_1, a_2, a_5, a_2, a_5, a_6, a_3, a_6]
[ a_3, a_2, a_1, a_6, a_5, a_2, a_9, a_6, a_3]
[ a_2, a_5, a_6, a_1, a_2, a_3, a_2, a_5, a_6]
[ a_5, a_2, a_5, a_2, a_1, a_2, a_5, a_2, a_5]
[ a_6, a_5, a_2, a_3, a_2, a_1, a_6, a_5, a_2]
[ a_3, a_6, a_9, a_2, a_5, a_6, a_1, a_2, a_3]
[ a_6, a_3, a_6, a_5, a_2, a_5, a_2, a_1, a_2]
[ a_9, a_6, a_3, a_6, a_5, a_2, a_3, a_2, a_1]
Then the individual Toeplitz Blocks of size 3 x 3 are given by,
T1 = T2 = T3 =
[ a_1, a_2, a_3] [ a_2, a_5, a_6] [ a_3, a_6, a_9]
[ a_2, a_1, a_2] [ a_5, a_2, a_5] [ a_6, a_3, a_6]
[ a_3, a_2, a_1] [ a_6, a_5, a_2] [ a_9, a_6, a_3]
The Composite matrix (in terms of T1, T2, T3 for BTTB) is,
Composite =
[ T1, T2, T3]
[ T2, T1, T2]
[ T3, T2, T1]
By adding a special row and column to this composite matrix (which would amount to zero padding vectors x and b in Ax =b) we get a block circulant matrix with toeplitz blocks,
BlockCirculant=
[ T1, T2, T3, T2]
[ T2, T1, T2, T3]
[ T3, T2, T1, T2]
[ T2, T3, T2, T1]
Now the problem becomes to simply make the individual toeplitz blocks to circulant blocks, which is tackled easily by well known circular embedding. Consider T1 and its reflection coefficients matrix ref_T1,
T1 = ref_T1 =
[ a_1, a_2, a_3] [ 0, a_3, a_2]
[ a_2, a_1, a_2] [ a_3, 0, a_3]
[ a_3, a_2, a_1] [ a_2, a_3, 0]
Then the circulant block of doubled size in both dimensions becomes,
CirculantBlocks = CirculantBlocks(expanded) =
[ T1, ref_T1] [ a_1, a_2, a_3, 0, a_3, a_2]
[ref_T1, T1] [ a_2, a_1, a_2, a_3, 0, a_3]
[ a_3, a_2, a_1, a_2, a_3, 0]
[ 0, a_3, a_2, a_1, a_2, a_3]
[ a_3, 0, a_3, a_2, a_1, a_2]
[ a_2, a_3, 0, a_3, a_2, a_1]
Similarly we can do this for other toeplitz blocks, and finally we get a block circulant with circulant blocks matrix structure (BCCB) , which can be solved using fft2 routines as described in Computations with BCCB.
BCCB =
[ T1, ref_T1, T2, ref_T2, T3, ref_T3, T2, ref_T2]
[ ref_T1, T1, ref_T2, T2, ref_T3, T3, ref_T2, T2]
[ T2, ref_T2, T1, ref_T1, T2, ref_T2, T3, ref_T3]
[ ref_T2, T2, ref_T1, T1, ref_T2, T2, ref_T3, T3]
[ T3, ref_T3, T2, ref_T2, T1, ref_T1, T2, ref_T2]
[ ref_T3, T3, ref_T2, T2, ref_T1, T1, ref_T2, T2]
[ T2, ref_T2, T3, ref_T3, T2, ref_T2, T1, ref_T1]
[ ref_T2, T2, ref_T3, T3, ref_T2, T2, ref_T1, T1]
I hope, I am not abusing the answer by asking a little side question. But it develops as a concern of understanding the solution, since the size is increased in two stages, one stage where we add the special rows and columns to make entire structure go from BTTB to BCTB , then again when we add reflections and circulant embedding, to go from BCTB to BCCB. The matrices (A) I encounter grow in squared fashion with odd numbers (one dimension size) i.e. 3^2 , 5^2, 7^2,.., so consider another 25 x 25 (5^2 x 5^2) matrix with same structure,
BTTB =
[ a_1, a_2, a_3, a_4, a_5, a_2, a_7, a_8, a_9, a_10, a_3, a_8, a_13, a_14, a_15, a_4, a_9, a_14, a_19, a_20, a_5, a_10, a_15, a_20, a_25]
[ a_2, a_1, a_2, a_3, a_4, a_7, a_2, a_7, a_8, a_9, a_8, a_3, a_8, a_13, a_14, a_9, a_4, a_9, a_14, a_19, a_10, a_5, a_10, a_15, a_20]
[ a_3, a_2, a_1, a_2, a_3, a_8, a_7, a_2, a_7, a_8, a_13, a_8, a_3, a_8, a_13, a_14, a_9, a_4, a_9, a_14, a_15, a_10, a_5, a_10, a_15]
[ a_4, a_3, a_2, a_1, a_2, a_9, a_8, a_7, a_2, a_7, a_14, a_13, a_8, a_3, a_8, a_19, a_14, a_9, a_4, a_9, a_20, a_15, a_10, a_5, a_10]
[ a_5, a_4, a_3, a_2, a_1, a_10, a_9, a_8, a_7, a_2, a_15, a_14, a_13, a_8, a_3, a_20, a_19, a_14, a_9, a_4, a_25, a_20, a_15, a_10, a_5]
[ a_2, a_7, a_8, a_9, a_10, a_1, a_2, a_3, a_4, a_5, a_2, a_7, a_8, a_9, a_10, a_3, a_8, a_13, a_14, a_15, a_4, a_9, a_14, a_19, a_20]
[ a_7, a_2, a_7, a_8, a_9, a_2, a_1, a_2, a_3, a_4, a_7, a_2, a_7, a_8, a_9, a_8, a_3, a_8, a_13, a_14, a_9, a_4, a_9, a_14, a_19]
[ a_8, a_7, a_2, a_7, a_8, a_3, a_2, a_1, a_2, a_3, a_8, a_7, a_2, a_7, a_8, a_13, a_8, a_3, a_8, a_13, a_14, a_9, a_4, a_9, a_14]
[ a_9, a_8, a_7, a_2, a_7, a_4, a_3, a_2, a_1, a_2, a_9, a_8, a_7, a_2, a_7, a_14, a_13, a_8, a_3, a_8, a_19, a_14, a_9, a_4, a_9]
[ a_10, a_9, a_8, a_7, a_2, a_5, a_4, a_3, a_2, a_1, a_10, a_9, a_8, a_7, a_2, a_15, a_14, a_13, a_8, a_3, a_20, a_19, a_14, a_9, a_4]
[ a_3, a_8, a_13, a_14, a_15, a_2, a_7, a_8, a_9, a_10, a_1, a_2, a_3, a_4, a_5, a_2, a_7, a_8, a_9, a_10, a_3, a_8, a_13, a_14, a_15]
[ a_8, a_3, a_8, a_13, a_14, a_7, a_2, a_7, a_8, a_9, a_2, a_1, a_2, a_3, a_4, a_7, a_2, a_7, a_8, a_9, a_8, a_3, a_8, a_13, a_14]
[ a_13, a_8, a_3, a_8, a_13, a_8, a_7, a_2, a_7, a_8, a_3, a_2, a_1, a_2, a_3, a_8, a_7, a_2, a_7, a_8, a_13, a_8, a_3, a_8, a_13]
[ a_14, a_13, a_8, a_3, a_8, a_9, a_8, a_7, a_2, a_7, a_4, a_3, a_2, a_1, a_2, a_9, a_8, a_7, a_2, a_7, a_14, a_13, a_8, a_3, a_8]
[ a_15, a_14, a_13, a_8, a_3, a_10, a_9, a_8, a_7, a_2, a_5, a_4, a_3, a_2, a_1, a_10, a_9, a_8, a_7, a_2, a_15, a_14, a_13, a_8, a_3]
[ a_4, a_9, a_14, a_19, a_20, a_3, a_8, a_13, a_14, a_15, a_2, a_7, a_8, a_9, a_10, a_1, a_2, a_3, a_4, a_5, a_2, a_7, a_8, a_9, a_10]
[ a_9, a_4, a_9, a_14, a_19, a_8, a_3, a_8, a_13, a_14, a_7, a_2, a_7, a_8, a_9, a_2, a_1, a_2, a_3, a_4, a_7, a_2, a_7, a_8, a_9]
[ a_14, a_9, a_4, a_9, a_14, a_13, a_8, a_3, a_8, a_13, a_8, a_7, a_2, a_7, a_8, a_3, a_2, a_1, a_2, a_3, a_8, a_7, a_2, a_7, a_8]
[ a_19, a_14, a_9, a_4, a_9, a_14, a_13, a_8, a_3, a_8, a_9, a_8, a_7, a_2, a_7, a_4, a_3, a_2, a_1, a_2, a_9, a_8, a_7, a_2, a_7]
[ a_20, a_19, a_14, a_9, a_4, a_15, a_14, a_13, a_8, a_3, a_10, a_9, a_8, a_7, a_2, a_5, a_4, a_3, a_2, a_1, a_10, a_9, a_8, a_7, a_2]
[ a_5, a_10, a_15, a_20, a_25, a_4, a_9, a_14, a_19, a_20, a_3, a_8, a_13, a_14, a_15, a_2, a_7, a_8, a_9, a_10, a_1, a_2, a_3, a_4, a_5]
[ a_10, a_5, a_10, a_15, a_20, a_9, a_4, a_9, a_14, a_19, a_8, a_3, a_8, a_13, a_14, a_7, a_2, a_7, a_8, a_9, a_2, a_1, a_2, a_3, a_4]
[ a_15, a_10, a_5, a_10, a_15, a_14, a_9, a_4, a_9, a_14, a_13, a_8, a_3, a_8, a_13, a_8, a_7, a_2, a_7, a_8, a_3, a_2, a_1, a_2, a_3]
[ a_20, a_15, a_10, a_5, a_10, a_19, a_14, a_9, a_4, a_9, a_14, a_13, a_8, a_3, a_8, a_9, a_8, a_7, a_2, a_7, a_4, a_3, a_2, a_1, a_2]
[ a_25, a_20, a_15, a_10, a_5, a_20, a_19, a_14, a_9, a_4, a_15, a_14, a_13, a_8, a_3, a_10, a_9, a_8, a_7, a_2, a_5, a_4, a_3, a_2, a_1]
The individual Toeplitz blocks matrices are,
T1 =
[ a_1, a_2, a_3, a_4, a_5]
[ a_2, a_1, a_2, a_3, a_4]
[ a_3, a_2, a_1, a_2, a_3]
[ a_4, a_3, a_2, a_1, a_2]
[ a_5, a_4, a_3, a_2, a_1]
T2 =
[ a_2, a_7, a_8, a_9, a_10]
[ a_7, a_2, a_7, a_8, a_9]
[ a_8, a_7, a_2, a_7, a_8]
[ a_9, a_8, a_7, a_2, a_7]
[ a_10, a_9, a_8, a_7, a_2]
T3 =
[ a_3, a_8, a_13, a_14, a_15]
[ a_8, a_3, a_8, a_13, a_14]
[ a_13, a_8, a_3, a_8, a_13]
[ a_14, a_13, a_8, a_3, a_8]
[ a_15, a_14, a_13, a_8, a_3]
T4 =
[ a_4, a_9, a_14, a_19, a_20]
[ a_9, a_4, a_9, a_14, a_19]
[ a_14, a_9, a_4, a_9, a_14]
[ a_19, a_14, a_9, a_4, a_9]
[ a_20, a_19, a_14, a_9, a_4]
T5 =
[ a_5, a_10, a_15, a_20, a_25]
[ a_10, a_5, a_10, a_15, a_20]
[ a_15, a_10, a_5, a_10, a_15]
[ a_20, a_15, a_10, a_5, a_10]
[ a_25, a_20, a_15, a_10, a_5]
The composite matrix which is 5 x 5 block and the circulant block which is 9 x 9 is:
Composite =
[ T1, T2, T3, T4, T5]
[ T2, T1, T2, T3, T4]
[ T3, T2, T1, T2, T3]
[ T4, T3, T2, T1, T2]
[ T5, T4, T3, T2, T1]
Block Circulant=
[ T1, T2, T3, T4, T5, T4, T3, T2]
[ T2, T1, T2, T3, T4, T5, T4, T3]
[ T3, T2, T1, T2, T3, T4, T5, T4]
[ T4, T3, T2, T1, T2, T3, T4, T5]
[ T5, T4, T3, T2, T1, T2, T3, T4]
[ T4, T5, T4, T3, T2, T1, T2, T3]
[ T3, T4, T5, T4, T3, T2, T1, T2]
[ T2, T3, T4, T5, T4, T3, T2, T1]
After circulant embedding it would become 18 x 18 (x 5 element in each) BCCB matrix, for small numbers this bloating is of no concern, however should this be of concern when I am dealing with matrix of size 1025^2 x 1025^2 ? Of-course I don't explicitly make this matrix A, whose entries I can create on the fly with a dedicated formula.