How does Root-MUSIC algorithm for DOA estimation for a ULA work for a recorded audio file ?

5 views (last 30 days)
I'm trying to apply phased.RootMUSICEstimator for estimating azimuth angle of a sound source in a real-world scenario. I'm doing this by recording an audio file in a 2-element ULA and placing the sound source at a specific angle( say 20 degree azimuth, 0 degree elevation).
Below is the code I've written
% code
x = audioread('/home/LEFT/Setup tone low 20 left.wav');
y = audioread('/home/RIGHT/Setup tone low 20 right.wav');
mix = [x y];
fc = 700;
transducer = phased.OmnidirectionalMicrophoneElement...
('FrequencyRange',[200,1200]);
array = phased.ULA('Element',transducer,'NumElements',2,...
'ElementSpacing',0.15);
yy = collectPlaneWave(array,[x y],[20 0;20 0]',fc);
sDOA = phased.RootMUSICEstimator('SensorArray',array,...
'OperatingFrequency',fc,'NumSignalsSource','Property','NumSignals',1);
doas = step(sDOA,yy);
az = broadside2az(sort(doas),[0 0])
Here I used two mono-signals recorded separately using 2-different microphones(LEFT & RIGHT) in a ULA. From above program, I'm getting a perfect az = 20.0000 20.0000 as output.
My Questions: - I had approximated the angles of the sound sources to be around 20 degrees azimuth, So I don't expect the sound source to be at exactly 20 degrees as evaluated by the algorithm. So it appears that the output is because of the collectPlaneWave function parameters. - Do I have to use collectPlaneWave function in my real-world audio already recorded at a specific source angle ? (I tried not using this, but azimuth angle given by algorithm was always zero.)
Could you please help me out with this ? Thanks.

Accepted Answer

Honglei Chen
Honglei Chen on 26 Jan 2017
In your example, you simulated the received signal at 20 degrees, that's why the estimated result is 20 degree. In real life, if you already have the signal, then you don't need to use collectPlaneWave. You just send the recorded signal in as two channels. This being said, RootMUSIC applies only to narrow band signals. So depends on your setting, it may or may not be the right algorithm for your task.
BTW, you should consider setting the propagation speed too. You are getting the matching result because the propagation speed is consistent among components. However, all of them are set to speed of light.
HTH
  1 Comment
Sarah Eck
Sarah Eck on 10 Oct 2021
Is there an example on sending the recorded signal as 2 channels? I am working something similar with a .wav file split into 8 individual channels. All examples I am seeing simulate the signal instead of using actual .wav files and they give it an angle which is confusing. I am having difficulty finding the correct way to import the .wav file info in a way that can be used in any beamforming method to get a DOA.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!