Why Cross Correlation (xcorr) of Two simultaneously Recorded Audio Signals Always return randomly different lags?
Hi everyone! I'm working on a sound localization project in which I record two audio signals simultaneously and then take their 'cross correlation' to find out the "lags" existing between the two signals! But what happens is that every time a random angle is calculated because of the abrupt values of the lags each time! I don't know where I'm going wrong! Please guide me if there is a better approach to achieve a better sound localization ! The code is given as follows:
if true fs = 48000 ; %sampling frequency in Hz recObj1 = audiorecorder(fs, 16, 1, 1); recObj2 = audiorecorder(fs, 16, 1, 2); record(recObj1); record(recObj2); pause(5); % record for 5 seconds simultaneously stop(recObj1); stop(recObj2); out1 = getaudiodata(recObj1, 'int16'); out2 = getaudiodata(recObj2, 'int16'); L = out1 ; R = out2 ; t1 = (0:length(L)-1)/fs; t2 = (0:length(R)-1)/fs; figure; plot(t1,L); figure; plot(t2,R); threshold = 100; k=1; win =200 ; [k max(L) max(R)] if max(L)>th && max(R)>th %set power threshold [c, lags] = xcorr(L, R); [a1,b1] = max(L); [a2, b2] = max(R); [a3, b3] = max(c); s = lags(b3); time_delay = s/fs ; disp(time_delay); s = abs(s); % taking absolute of s disp('Estimated angle'); c = 342; % avg speed of sound at room temperature dis = 1 ; % mean distance between the two microphones cal = ((time_delay*c)/dis) ; if cal<-1 cal=-1; elseif cal>1 cal=1; end ang =((acosd(cal)) disp(ang); %displays the angle of sound source due to these microphones end
ANSWER
Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.
I work at Matlabsolutions in the Audio System Toolbox team. I can't exactly replicate your experiement as I don't have your hardware, but I could notice a few possible sources of issues. In your code you seem to be acquiring simultaneously from two different devices using the default audio drivers (typically DirectSound or WASAPI on Windows). That gives you no guarantee of synchronous acquisition for L and R. The two devices themselves may be triggered asynchronously by the operating system, giving you an arbitrary new delay between the two signals every single time you run your script. The simplest guarantee of a synchronous acquisition comes from acquiring different channels of the same device, ideally using its ASIO driver instead of the default one. ASIO drivers guarantee synchronous multi-channel acquisition.
Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.
Comments
Post a Comment