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)}}} $$


$ 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:

  1. $X$ is a tensor $N_s * N_t * N_\omega $ which is the short-time Fourier transform (STFT) of $N_s$ mixtures.
  2. $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.

  • $\begingroup$ Are you sure about " G′(rk) which is the first derivative of the AuxIVA contrast function using G(r)=rG(r)=r, G′(rk)=1G′(rk)=1. " ? Even I have the same doubt. Please let me know if you know the answer by now. Your understanding on the other 3 equations are right according to my understanding. $\endgroup$
    – Gautam
    Commented Sep 12, 2017 at 15:42
  • $\begingroup$ @Gautam : PLEASE DO NOT POST COMMENTS AS ANSWERS. Earn enough rep to allow posting of comments, first. $\endgroup$
    – Peter K.
    Commented Sep 12, 2017 at 16:13
  • $\begingroup$ @Gautam I couldn't quite get good results from AuxIVA, most likely the result of a logical or programming bug. G'(r_k) is definitely 1. For example in the paper "Auxiliary Function Independent Vector Analysis Using a Harmonic Clique Dependence Model" look at equation 29, which is a variation of the AuxIVA term G'(r_k)/r_k and notice the numerators and denominators. $\endgroup$ Commented Sep 13, 2017 at 4:38

1 Answer 1


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.

  • $\begingroup$ First a huge thanks for replying. I finally have an answer after over 2 years. I moved away from the project some 2 years ago so I have forgotten most of the analysis but my Matlab implementation never worked. The output did not get separated cleanly in the more than 100 experiments I ran with data collected from the field as well as synthetic mixtures. If I remember correctly, all the algorithm did was to add some distortion in the output. There was likely a flaw in my implementation but with the replication crisis we are seeing in science I won't rule out false claims either. $\endgroup$ Commented Aug 16, 2019 at 12:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.