I'm working on an acoustic source separation problem where I want to separate the voices of a choir based on intensity vector statistics. I'm currently implementing a paper by Günel called “Acoustic Source Separation of Convolutive Mixtures Based on Intensity Vector Statistics” In this paper, the acoustic source separation is achieved in a couple of steps:
- the signals from the microphone-array are converted to a time-frequency representation (using the modified discrete cosine transform, MDCT)
- The intensity vector direction is calculated and rounded to the nearest degree. All of the obtained directions are then plotted in a histogram to find the mixture probability density. On this histogram, a von Mises distribution is fitted for every source position. (my question is related to this step)
- As I understand it, this distribution is then used to define a directivity function for each sound source and a time-frequency bin and beamforming is applied to separate each source.
- Finally, the inverse MDCT is calculated for each separate signal, obtaining the separate signals in the time-domain.
So this brings me to my question. After calculating the vector intensity directions for a single source in a simulated anechoic room (pyroom acoustics) and real-life measurements with a GRASS 50VI-1 Intensity probe, all obtained directions are plotted on a histogram and here, something I can’t explain happens. For a source that should be positioned at 45 degrees relative to the microphone array, the histogram shows two peaks. One peak at 45 degrees, but also one peak at 225 degrees (so, 180 degrees shifted).
This is simulated in a 3D space, but for now we are only using 4 microphones to find the source directions, so only finding the azimuth directions. These directions are found using the following formula (in python, we use the arctan2 operator):
where Pw, Py and Px are found by using our microhpone measurements as in the picture below:
I have read countless papers about DAO/separation using sound intensity, but not a single one I found shows any sign of this behaviour or talks about certain assumptions that should be made. It seems they only have a peak in the direction that the sound is actually coming from. Finally, here is the code I used: