Importance of column regular matrices and its relation to the error-correcting codes. I have been working with BCH codes to construct compressed sensing matrices. So, first I give a brief introduction to BCH codes.
In coding theory, the Bose–Chaudhuri–Hocquenghem codes
(BCH codes) are a class of cyclic error-correcting codes
that are constructed using polynomials over a finite field
(also called the Galois field).
The BCH codes have length $2^{\bar{m}}-1$, where $\bar{m}$ is
a positive integer. In this work, for an odd
integer $d$,
a $d$-BCH code represents a binary BCH code of length
$2^{\bar{m}}-1$ which has $\alpha^1,\ \alpha^2,...,\alpha^{d-1}$
but not $\alpha^{d}$ as roots of its generating polynomial,
where $\alpha$ is a primitive element of $GF(2^{\bar{m}})$.
For an even integer $d$, a $d$-BCH code is a code consisting of the
code vectors of even weight in a $(d-1)$-BCH code.
The weight of a code vector is defined as the number
of non-zero elements in it.
For a binary linear code $\mathcal{C}$,
the symbol $a_j$ represents the number of code vectors of weight $j$ in
$\mathcal{C}$.
Now, I come to the main topic.
Just for example, I am taking a $2016$-BCH code, where $\bar{m} = 12$.  We will denote this code by $\mathcal{C}$. Now, according to the work of  T. Kasami, this BCH code has the following weight distribution:
\begin{equation}
 a_{2016} = 131040
\end{equation}
\begin{equation}
 a_{2048} = 4095
\end{equation}
\begin{equation}
 a_{2080} = 127008
\end{equation}
Now, define a matrix $A\in\{0,1\}^{4095\times 131040}$, which consists of all the code vectors of weight $2016$ in $\mathcal{C}$. Notice that $A$ is a column regular matrix because every column has weight $2016$. In my research work, I have been searching for rectangular ( where the number of rows is less than the number of columns ) column regular matrices. And I believe that in error-correcting codes I will find many useful rectangular column regular matrices.
Now, we will examine the value of the inner product between two distinct columns of $A$. Let $a,\ b$ be the two distinct arbitrary columns of the matrix $A$. Since $a,\ b$ are two valid code vectors, their modular sum would also be a valid code vector. This means,
\begin{equation}
(a+b)mod\ 2 = c,\ \mbox{for some}\ c\in\mathcal{C}.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (1)
\end{equation}
Now, let $wt(v)$ denote the weight of a code vector $v\in\mathcal{C}$. Then the equation $(1)$ leads to
\begin{equation}
wt((a+b)mod\ 2) = wt(c).\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (2)
\end{equation}
It is not difficult to see that
\begin{equation}
wt((a+b)mod\ 2) = wt(a) + wt(b) - 2 \langle a , b \rangle , \ \ \ \ \ \ \ \ \ \ \ \ \ \ (3)
\end{equation}
where $\langle a , b \rangle$ denotes the inner product of $a,\ b$.
On substituting equation $(3)$ in equation $(2)$ and rearranging , we get
\begin{equation}
\langle a , b \rangle = \frac{wt(a) + wt(b) - wt(c)}{2}.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (4)
\end{equation}
Since, $wt(a) = wt(b) = 2016$, and $wt(c)= 2016,\ 2048,\ 2080$, on substituting these values in equation $(4)$, we get the following possible values of $\langle a , b \rangle$:
\begin{equation}
\langle a , b \rangle = 1008,\ 992,\ 976 .
\end{equation}
You can see that $\langle a, b \rangle = 992\pm 16$. However, this $\pm 16$ interval is not working quite well for me. It would have been better for me if we had $\langle a , b \rangle = 992\pm 8$.
So, I am looking for your expert opinions. Do you know any error-correcting codes in which the inner product between any two distinct code vectors of the matrix $A$ lies in a small interval like $\alpha \pm \delta$, where $\delta$ is as small as possible?
 A: The Welch bound can be used to lower bound the maximum inner product of codewords, given other code parameters. See wikipedia, as well as my answer to this question. The bound is most powerful if you express the codewords as vectors in the alphabet $\{\pm 1\}$ instead of $\{0,1\}$ and use the usual inner product on real vectors. So a codeword $(0100)$ becomes $(1,-1,1,1).$ Observe that if the Hamming distance between $a,b$ is $d,$ then the inner product $<a,b>=n-2d$.
Let $e\geq 1$ be an integer and let $a_1,\ldots,a_m$ be distinct vectors in $\mathbb{C}^n.$ Then the following inequalities hold
$$
\sum_{i=1}^m \sum_{j=1}^m \left| \langle a_i, a_j \rangle \right|^{2e} \geq \frac{\left(\sum_{i=1}^m \langle a_i,a_i\rangle^e \right)^2}{\binom{n+e-1}{e}}.
$$
I have had a quick look for the parameters of what you are hoping to achieve. Please check my computations. I take $e=1,$ $m=131040,$ $n=4095.$ The Hamming weights of the constant weight code you have satisfy
$w\in\{2016,2048,2080\}$ which translates into the inner products lying in the set $\{-1,-1+64,-1-64\}=\{-1,63,-65\}.$ This implies the maximum magnitude of the inner product is $\theta_{max}=65.$
I claim that this cannot be improved. Applying the Welch bound gives
$$
\sum_{1\leq i\neq j\leq m} \langle a_i,a_j \rangle^2+m n^2 \geq 
\frac{\left( \sum_{i=1}^m \langle a_i,a_i \rangle\right)^2}{n}=
\frac{m^2 n^2}{n}=m^2n,
$$
which then gives
$$
m(m-1) \theta_{max}^2 \geq m^2 n- m n^2
$$
and if I plug in the values for $m,n$ I obtain the lower bound
$$
\theta_{max}^2 \geq 3967.06,
$$
or $\theta_{max}^2 \geq 62.99.$ This means that the weight of the modulo 2 sum of any two distinct zero-one codewords (call them $c_i$ not to confuse with $a_i$) is bounded by
$$
|n-2 w(c_i,c_j) |=|4095-2 w(c_i,c_j)|\geq 62.99,
$$
which implies the weight is at least 31.5 or so away from 4095/2=2047.5. I believe that this means under your definition of $<a,b>$ you cannot do better than about $15.75$ away from 992.
