c=340;%m/s
high_res_freq = [1:512]*fs/1024;
freq = [63 125 250 500 1000 2000 4000 8000];
hrad=0.13;
load 'utils\attn_high_res_full.mat'
load 'utils\can_data_variables.mat'
load 'utils\wall_data.mat'
aim = zeros(1, 3);
aim(2) = sin(el_or*pi/180);
aim(1) = cos(el_or*pi/180)*cos(az_or*pi/180);
aim(3) = -cos(el_or*pi/180)*sin(az_or*pi/180);
aim = source+aim;
%%
mic_dir_resp = [0];
mic_resp = [0];
file_ind=1;
eval(strcat('output_src', num2str(srcind), '=cell(', num2str(size(mic_locs, 1)), ',5);'));
for mic_ind=1:size(mic_locs, 1)
mic = mic_locs(mic_ind, :);
[coor, walls] = parse_mirimage(room,source,mic,scan_dist);
d = (coor-repmat(source, size(coor,1), 1));
dist = sqrt(sum((d.^2)'));
az_stm = atan2(-d(:, 3), d(:, 1))*180/pi;
flat_dist = sqrt(d(:, 1).^2+d(:, 3).^2);
el_stm = atan2(d(:, 2), flat_dist)*180/pi;
resp = [0];
strcat('there are ', num2str(size(walls, 1)), ' virtual microphones for mic ', num2str(mic_ind))
% pause
h = waitbar(0,strcat('source ', num2str(srcind), ' mic ', num2str(mic_ind), ' running'));
for i=1:size(walls, 1)
% i
path = walls(i, find(walls(i, :)+1));
if length(path)==0;
attn_wall=1;
if get(handles.useHuman, 'value')==1%use human source model?
tot_resp = stf(az_stm(i)-az_or, el_stm(i)-el_or, attn_interp, can_freqs, fs);
extratime = round(head_delay(hrad,source,mic,aim,c)*fs);
tot_resp = real(ifft(tot_resp, 1024));
tot_resp = tot_resp(1:512);
else
tot_resp = zeros(1, 512);
tot_resp(1) = 1;
extratime=0;
end
else
attn_wall=ones(1, 8);
for j=1:length(wall_index)
n = length(find(path==wall_index(j)));
attn_wall = attn_wall.*(wall_coeffs(j, :).^n);
end
wall_resp = interp1(freq, attn_wall', high_res_freq, 'spline');
wall_resp = max(wall_resp, 0);
wall_resp(513:1024) = fliplr(wall_resp);
if get(handles.useHuman, 'value')==1%use human source model?
extratime = round(head_delay(hrad,source,mic,aim,c)*fs);
attn_sour = stf(az_stm(i)-az_or, el_stm(i)-el_or, attn_interp, can_freqs, fs);
else
attn_sour = zeros(1, 1024);
attn_sour(1) = 1;
attn_sour = fft(attn_sour);
extratime=0;
end
tot_resp = (attn_sour).*wall_resp;
tot_resp = real(ifft(tot_resp, 1024));
tot_resp = tot_resp(1:512);
end
attn_dist = 1/(2*dist(i));
tot_resp = tot_resp*attn_dist;
delay = round(dist(i)*fs/c);
if length(resp)<delay+extratime+512
resp(length(resp)+1:delay+extratime+512)=zeros(delay+extratime+512-length(resp), 1);
end
resp(delay+extratime+1:delay+extratime+512)=resp(delay+extratime+1:delay+extratime+512)+tot_resp;
if length(path)==0
dir_resp = resp;
end
waitbar(i/size(walls, 1))
end
close(h)
resp = resample(resp, fs_real, fs);
dir_resp = resample(dir_resp, fs_real, fs);
avram = {dist(1), az_stm(1), el_stm(1), dir_resp, resp};%burada -az_stm(1) yaziyordu -'yi sildim 12 kasim 2007
eval(strcat('output_src', num2str(srcind),'(', num2str(mic_ind), ', :)', '=avram;'));
end