Is This Interpretation of Auxiliary Independent Vector Analysis (AuxIVA) Correct? I am implementing auxiliary function based Independent Vector Analysis (AuxIVA) from  Nobutaka Ono's original paper Stable and fast update rules for independent vector analysis based on auxiliary function technique. AuxIVA is also presented in other freely available papers, for example this one. It is an extension of plain Independent Vector Analysis where an auxiliary function of the original cost function is minimized.

There are four equations that make up the update rules of AuxIVA:

$$ r_k = \sqrt{\sum_{\omega=1}^{N_\omega} {\lvert w_k^h(\omega)x(\omega)\rvert}^2} $$
$$ V_k(\omega) = {1\over{N_t}}\sum_{t=1}^{N_t}{{G'(r_k) \over r_k} x(\omega) x^h(\omega) } $$
$$ w_k(\omega) = (W(\omega)V_k(\omega))^{-1}e_k$$
$$ w_k(\omega) = {w_k(\omega) \over {\sqrt {w_k^h(\omega)V_k(\omega)w_k(\omega)}}} $$

where 

$ N_s $ is the number of sources.

$ k = 1,2,...,N_s$ is the source index.

$ e_k = [0,0,...0,1,0...]^T $, is a column vector with its only non-zero entry being a 1 at the k-th index.

$ G'(r_k)$ is the first derivative of the AuxIVA contrast function and since I'm using $G(r) = r$, $ G'(r_k) = 1$.

$ N_w $ is the number of frequency bins and $ N_t $ is the number of time bins in the STFT of the mixture.

The input I am using is structured like this:


$X$ is a tensor $N_s  * N_t * N_\omega $ which is the short-time Fourier transform (STFT) of $N_s$ mixtures.
$W$ is the mixing tensor that will be estimated by repeatedly applying the 4 update rules. Its dimensions are $N_s*N_s*N_\omega$


In Matlab notation, $w^h_k(\omega) = W[k,:,\omega] $ and $x(\omega)=X[:,:,\omega]$.

When I evaluate $r_k$ using the first equation , I get a vector of size $ 1 * N_t $.

To evaluate $V_k(\omega)$ using the second equation, I evaluate $ {G'(r_k) \over r_k}$, which is just $r_k$ because of the assumption $G(r_k) = r_k$. I then do point-wise multiplication between $ {G'(r_k) \over r_k} $ and $x(\omega)$ then post-multiply this product by $x^h(\omega)$. Because $x(\omega)$ has size $N_s*N_t$ and $ {G'(r_k) \over r_k} $, the point-wise multiplication between them a weighted copy of $x(\omega)$. When this weighted copy is post-multiplied by $x^h(\omega)$, a weighted covariance matrix of size $N_s*N_s$ is generated.

In the third equation I post-multiply $W(\omega)$, that has size $N_s*N_s$, by $V_k(\omega)$ from the previous equation, that has size $N_s*N_s$. I then invert this matrix to get $(W(\omega)V_k(\omega))^{-1}$ and post-multiply this by $e_k$ to get $w_k(\omega)$ that is a vector of size $1*N_s$

Finally, in the last equation, I evaluate ${\sqrt {w_k^h(\omega)V_k(\omega)w_k}}$, that is a scalar, and divide the vector $w_k(\omega)$ by this scalar to get a scaled version of $w_k(\omega)$.

I'd like to know if my interpretation of the four equations is correct. I do not have an in-depth understanding of the derivation of these equations so I'm relying on little information present in these papers to interpret and implement the algorithm.
I think your understanding is right, and it has already been implemented in many open sourced codes, like https://github.com/LCAV/pyroomacoustics and https://github.com/n-narisawa/bss

However, the performance of AUXIVA is not as good as original IVA according to my experiements. Do you have some new conclusions about the performance and the real-time implementation of AUXIVA? Thanks.