I'm tinkering with different adaptive beam-forming algorithms for a research project in which I want to use a Uniform Rectangular microphones Array (URA) to isolate speech in a room.
I am determining the Direction of Arrival (DoA) using a camera in the center of an array, and reverse camera projection from a user input - ie the user clicks on the sound source on the camera's preview, and I reverse project the pixel to an azimuth/elevation angle.
Then I use this DoA as the steering angle for my beam-former, and listen to the result in my headphones. Conventional beam-forming, as expected, didn't give a satisfying SIR so I delved into adaptive algorithms (more specifically Linearly Constrained Minimal Variance - LCMV). With simulated audio from a virtual model of my microphone array, on Matlab, I compared Frost's algorithm and the Generalized Sidelobe Canceller.
I obtained better results with the latter, which to me doesn't make sense as these are basically 2 different implementations of the same algorithm - from what I could understand of the white paper.
Moreover, when doing real life testing, the result weren't even close to be as good as the simulation.
I can only think of 2 reasons for that :
- Reverberation and noise, to which LCMV is sensitive
- Bad DoA precision which causes signal leaking in the side-lobe canceller
I will soon build a test-bench to evaluate the precision of my DoA estimation, which will at least possibility eliminate one variable, but I think this is not the principal cause of bad performance...
So my questions are : what do you think causes this big discrepancy between simulation and real life? and would there be a way to improve it?
For now, I am thinking of using NMF at the output of the beam-formed audio to further separate the sources.