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<-1cal=-1;elseif cal>1cal=1;endang =((acosd(cal))disp(ang); %displays the angle of sound source due to these microphones
end
Best Answer