# Calculating covariance matrix for MVDR beamforming

I am trying to calculate the covariance matrix that is required for the calculation of an MVDR beamformer. I am getting confused as to how to calculate it. I have an array of 3 microphones each with a vector of speech signals with N samples in the time domain. I apply an STFT to the signals giving a N x M matrix, where N represents the time domain or a single frame and M is the frequency bins. The covariance matrix can be described as:

$$R_{xx} =E[xx^{H}]$$

Thus, for a 3 microphone system we get:

$$R_{xx} = E\left( \begin{matrix} x_1x_1^* & x_1x_2^* & x_1x_3^* \\ x_2x_1^* & x_2x_2^* & x_2x_3^* \\ x_2x_1^* & x_3x_2^* & x_3x_3^* \\ \end{matrix} \right)$$

Keeping in mind that the system will be done in real-time, would the expectation function apply a time-average across past and current signals (i.e. for the first frame divide by one, second divide by two and so on) or just current signals (i.e. divided by one)? And so, would each frequency bin in each frame have its own $R_{xx}$ giving N x M $R_{xx}$ values?

Thanks!

MVDR is a narrowband beamformer. For broadband signals it is usually applied for each frequency bin. That means that $\mathbf{R}_{xx}$ is frequency dependent. In other words, for each time you should have $M$ matrices, each one is $3\times 3$.
Now, since you usually cannot compute $\mathbf{R}_{xx}$ exactly, you perform covariance estimation $\tilde{\mathbf{R}}_{xx}$. For more information you can look here for example. In short, as you mention you perform averaging of the covariance matrix in order to improve the estimation. In order to adapt you estimation to time-varying statistics, usually exponential averaging is performed, i.e.
$$\tilde{\mathbf{R}}_{xx}[n] = \alpha\tilde{\mathbf{R}}_{xx}[n-1] + (1-\alpha)\mathbf{x}[n]\mathbf{x}^H[n]$$
for some $0<\alpha<1$ (usually closer to 1).