Mercurial > hg > human-echolocation
changeset 6:f3d8070c1781
made input to simulateBinauralSignals.m a matlab structure
author | Timos Papadopoulos <tp@isvr.soton.ac.uk> |
---|---|
date | Sat, 23 Nov 2013 13:07:19 +0000 |
parents | 2749699e06fa |
children | 68e34e3857a7 |
files | pick_ir.m simulate_echo.m |
diffstat | 2 files changed, 0 insertions(+), 547 deletions(-) [+] |
line wrap: on
line diff
--- a/pick_ir.m Sat Nov 23 12:54:23 2013 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -function picked_ir = pick_ir(simdata, dist, azim, orient, dirweight) -%Picks a 2-row matrix of binaural responses for specified geometry and source directivity from simulated_echo.m output -% -% - simdata input argument must be a structure as outputed from simulate_echo.m -% - dist input argument must be the distance in meters -% - azim input argument must be the azimuthal angle of the board center in degrees with 0 corresponding to dead front, -% positive values to left and negative values to right -% - orient input argument must be either 'horz' or 'angled' -% - dirweight input argument must be a nonnegative real scalar determining what is the relative weight of the emission path -% to the echo path (i.e. due to directivity focus in the frontal direction of the source, the emission which is directed -% upwards and backwards in our specific geometry is significantly attenuated, typically by factor in the vicinity of 0.1) -% -% picked_ir output is a 2-row matrix of binaural responses (left ear in the top row and right ear in the bottom row) -% -% If any of the specified dist, azim, orient values are not among the cases included in the specified simdata stucture, -% then an error is returned. -% -% picked_ir = pick_ir(simdata, dist, azim, orient, dirweight) -% - -dist_ind = find(dist == simdata.params.board_dist); -azim_ind = find(mod(90+azim,360)*pi/180 == simdata.params.board_azim); -orient_ind = find(strcmp(orient,simdata.params.board_orientation)); - -try - dist_ind = dist_ind(1); - azim_ind = azim_ind(1); - orient_ind = orient_ind(1); -catch %#ok<CTCH> - error('at least on of specified distance, azimuth, orientation does not exist in this dataset') -end - -picked_ir = dirweight*simdata.emission{dist_ind,azim_ind,orient_ind} + simdata.echo{dist_ind,azim_ind,orient_ind}; -
--- a/simulate_echo.m Sat Nov 23 12:54:23 2013 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,513 +0,0 @@ -function simulation_data = simulate_echo -%Computes binaural impulse responses for simulated echolocation experiments of Summer 2013 -% -% Center of spherical coordinates system is taken to be the center of head. The azimuth, elevation and distance -% coordinates are as in matlabs sph2cart function (azimuth and elevation are angular displacements from the positive -% x-axis and from the x-y plane, respectively) with positive x axis taken to be extending to the right of the head from -% top view, positive y axis to be extending forward of the head in top view and positive z axis to be extending upwards -% in top view. -% -% INPUTS: -% -% Board dimensions are defined as -% params.board_size_x (width in meters for the 'center' orientation of Papadopoulos et al. BSPC 2011) -% params.board_size_y (depth in meters for the 'center' orientation of Papadopoulos et al. BSPC 2011) -% params.board_size_z (height in meters for the 'center' orientation of Papadopoulos et al. BSPC 2011) -% -% Board center position is defined as -% params.board_distance (distance in meters from coords origin to center of board following coordinate system described -% above), can be row vector. -% params.board_azim (azimuth in radians of the center of the board following coordinate system described above), -% can be row vector. -% params.board_elev (elevation in radians of the center of the board following coordinate system described above), -% must be scalar -% -% params.board_orientation scalar or 1x2 cell with elements 'horz' or/and 'angled' -% Board is taken to always be vertically positioned (i.e. with its width-height plane vertical to the y coordinate) and -% two cases of orientation are considered: horizontal and angled corresponding to flat and angled descriptions in -% Papadopoulos et al. BSPC 2011. -% -% params.source_down non-negative scalar in meters -% params.source_front non-negative scalar in meters -% The source is assumed to always be in front of the chest and below the head. (params.source_down and -% params.source_front cannot both be 0) -% -% -% params.horz_disamb string which can be either 'BSPC2011' or 'collocated'. If equal to 'BSPC2011' then board distance -% for the horizontal (flat) case is as described in Papadopoulos et al. BSPC 2011, i.e. the board -% distance is the distance between the centre of the head and the PLANE OF THE BOARD. -% Alternatively, in the 'collocated' case, the board distance in the horizontal (flat) case is taken -% as the distance between the centre of the head and the centre of the board -% -% NOTE: in the 'BSPC2011' case of params.horz_disamb, it is easy to see that the geometry is ill-specified for board -% positions far away from the median plane. -% -% OUTPUTS: -% -% --- simulation_data is a structure with the following fields: -% - simulation_data.echo is a cell of dimensions -% length(params.board_dist) x length(params.board_azim) x length(params.board_orientation) -% each element of which is a 2-row matrix with the left (top row) and right (bottom row) ear responses corresponding the -% echo only. -% -% - simulation_data.emission is a cell of dimensions -% length(params.board_dist) x length(params.board_azim) x length(params.board_orientation) -% each element of which is a 2-row matrix with the left (top row) and right (bottom row) ear responses corresponding the -% direct source-to-receiver path only. (NOTE: source term (binaural_irs_emission) does not need to be computed for each -% different board distance/azimuth/orientation as it is the same irs but containing a different number of trailing zero -% samples. I include this redundancy because it simplified the computation a bit and also because this way the emission -% part is always equal in length with the corresponding echo part and can be added easier) -% -% Adding any given -% directivity_weighting * simulation_data.emission{ii,jj,kk}(1,:) + simulation_data.echo{ii,jj,kk}(1,:) -% for any given ii, jj, kk will give the total left ear IR and the same for right ear by -% directivity_weighting * simulation_data.emission{ii,jj,kk}(2,:) + simulation_data.echo{ii,jj,kk}(2,:) -% -% - simulation_data.params is the stucture params described above -% - simulation_data.board_coords is an array of dimensions -% 8 x 3 x length(params.board_dist) x length(params.board_azim) x length(params.board_orientation) -% containing the x y z coordinates (2nd dimension) of the 8 edges (1st dimension) of the board geometries for different -% board distances, azimuths and orientations. -% - simulation_data.azerr and simulation_data.elerr are arrays of dimensions -% 2 x 1+length(params.board_azim)) -% which contain the error (in degrees) between the azimuth and elevation respectively of the HRTFs that are used (as -% existing in the CIPIC spherical grid) and the actual board center azimuth and elevation. -% -% -% -% DEVELOPMENT NOTES -% -% TODO: include case of multiple boards and of non-vertically oriented boards (i.e. all cases of pitch, roll, yaw for -% board orientation) -% -% TODO: include geometrical description for all possible positions of the source -% -% TODO: include validateattributes for all parameters -% -% TODO: include parameter controls for specorder (now set to 1), difforder (now set to 1), elemsize (now set to [1]) and -% nedgesubs (now set to 2) -% -% -%% TEMPLATE OF PARAMETERS SETTING -% params.board_size_x = .55; -% params.board_size_y = .02; -% params.board_size_z = .55; -% -% params.board_azim = mod(90+[-45 -17 0 17 45],360)*pi/180; -% params.board_elev = 0*pi/180; -% params.board_dist = [0.9 1.5 3 6]; -% % -% % params.board_azim = mod(90+[-17 17],360)*pi/180; % corresponds to a board 17degress to the right and a board 17 -% % degrees to the left. The elements of the vector ([-17 17] in this example) must be in the range (-180,180] and are -% % converted by the line in this example to the coordinate system described in the help preample. -% % -% % params.board_elev = 10*pi/180; % corresponds to a board 10 degrees above the azimuthal plane. The value (0 in this -% % example) must be in the range [-90,90] and is converted by the line in this example to the coordinate system described -% % in the help preample. -% % -% % params.board_dist is in meters and it can be a vector of (strictly positive) distances as needed -% -% params.board_orientation = {'horz', 'angled'}; -% % -% % params.board_orientation must be a cell containing any or both of 'horz' and 'angled' -% -% params.source_down = 0.25; % Take the source to always be directly below the chin. -% params.source_front = 0.05; % Take the source to always be directly in front of chest. -% -% params.Fs = 44100; -% params.Cair = 344; -% params.Rhoair = 1.21; -% -% params.horz_disamb = 'BSPC2011' % 'collocated' - -%% USER EDITABLE PART -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -params.board_size_x = .55; -params.board_size_y = .02; -params.board_size_z = .55; - -params.board_azim = mod(90+[-17 0 17],360)*pi/180; -params.board_elev = 0*pi/180; -params.board_dist = [0.9 3]; -% -% params.board_azim = mod(90+[-17 17],360)*pi/180; % corresponds to a board 17degress to the right and a board 17 -% degrees to the left. The elements of the vector ([-17 17] in this example) must be in the range (-180,180] and are -% converted by the line in this example to the coordinate system described in the help preample. -% -% params.board_elev = 10*pi/180; % corresponds to a board 10 degrees above the azimuthal plane. The value (0 in this -% example) must be in the range [-90,90] and is converted by the line in this example to the coordinate system described -% in the help preample. -% -% params.board_dist is in meters and it can be a vector of (strictly positive) distances as needed - -params.board_orientation = {'horz', 'angled'}; -% -% params.board_orientation must be a cell containing any or both of 'horz' and 'angled' - -params.source_down = 0.25; % Take the source to always be directly below the chin. -params.source_front = 0.05; % Take the source to always be directly in front of chest. - -params.Fs = 44100; -params.Cair = 344; -params.Rhoair = 1.21; - -params.horz_disamb = 'BSPC2011'; - -%% END OF USER EDITABLE PART -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -%% Validate attributes -validateattributes(params.board_elev,{'double'},{'scalar','<=',0,'>=',0}) -validateattributes(params.horz_disamb,{'char'},{'nonempty'}) - -%% Compute free field (no head) IRs - -temp_edges = [ - +params.board_size_x/2 +params.board_size_y/2 +params.board_size_z/2 - -params.board_size_x/2 +params.board_size_y/2 +params.board_size_z/2 - -params.board_size_x/2 -params.board_size_y/2 +params.board_size_z/2 - +params.board_size_x/2 -params.board_size_y/2 +params.board_size_z/2 - +params.board_size_x/2 +params.board_size_y/2 -params.board_size_z/2 - -params.board_size_x/2 +params.board_size_y/2 -params.board_size_z/2 - -params.board_size_x/2 -params.board_size_y/2 -params.board_size_z/2 - +params.board_size_x/2 -params.board_size_y/2 -params.board_size_z/2 - ]; - -FFresp{length(params.board_dist),length(params.board_azim),length(params.board_orientation)} = []; -binaural_irs_echo{length(params.board_dist),length(params.board_azim),length(params.board_orientation)} = []; -binaural_irs_emission{length(params.board_dist),length(params.board_azim),length(params.board_orientation)} = []; -% NOTE: in the above initialisation the source term (binaural_irs_emission) does not need to be computed for each -% different board distance/azimuth/orientation as it is the same. I include this redundancy so that the emission -% binaural irs that I compute each time in in a few lines are correct, i.e. I can check that all the binaural responses -% in the binaural_irs_emission cell are equal. -board_coords(8,3,length(params.board_dist),length(params.board_azim),length(params.board_orientation)) = 0; - - -geom.Fs = params.Fs; -geom.Cair = params.Cair; -geom.Rhoair = params.Rhoair; - -geom.source_position = [0 params.source_front -params.source_down]; - -for ii = 1:length(params.board_dist) - for jj = 1:length(params.board_azim) - for kk = 1:length(params.board_orientation) - - if strcmp(params.board_orientation{kk},'angled') - theta_angled = params.board_azim(jj) - pi/2; - Rot_mat = [ - cos(theta_angled) -sin(theta_angled) 0 - sin(theta_angled) cos(theta_angled) 0 - 0 0 1 - ]; - temp2_edges = ( Rot_mat * temp_edges.' ) .' ; - % for the rotation matrix see http://en.wikipedia.org/wiki/Rotation_matrix - [trans_x, trans_y, trans_z] = sph2cart(params.board_azim(jj),params.board_elev,params.board_dist(ii)); - geom.scatterer_edges = ... - temp2_edges + repmat([trans_x, trans_y, trans_z],8,1); - board_coords(:,:,ii,jj,kk) = geom.scatterer_edges; - elseif strcmp(params.board_orientation{kk},'horz') - temp2_edges = temp_edges; - if strcmp(params.horz_disamb,'collocated') - [trans_x, trans_y, trans_z] = sph2cart(params.board_azim(jj),params.board_elev,params.board_dist(ii)); - elseif strcmp(params.horz_disamb,'BSPC2011') - [trans_x, trans_y, trans_z] = sph2cart(... - params.board_azim(jj),... - params.board_elev,... - params.board_dist(ii)/abs(cos(params.board_azim(jj)-pi/2))); - else - error('params.horz_disamb must be set to either ''BSPC2011'' or ''collocated''') - end - geom.scatterer_edges = ... - temp2_edges + repmat([trans_x, trans_y, trans_z],8,1); - board_coords(:,:,ii,jj,kk) = geom.scatterer_edges; - end - - FFresp(ii,jj,kk) = edhrir_single_cuboid(geom); - - end - end -end - - -%% Compute binaural IRs - -temp = load('hrir_final.mat'); %This is subject_165 CIPIC data -h3D_lear = temp.hrir_l; -h3D_rear = temp.hrir_r; -clear temp - -cipic_source_az = 0*180/pi; -cipic_source_el = atan(-params.source_down/params.source_front)*180/pi; -[source_lear_ir, azerr(1,1+length(params.board_azim)), elerr(1,1+length(params.board_azim))] = ... - getNearestUCDpulse(cipic_source_az,cipic_source_el,h3D_lear); -[source_rear_ir, azerr(2,1+length(params.board_azim)), elerr(2,1+length(params.board_azim))] = ... - getNearestUCDpulse(cipic_source_az,cipic_source_el,h3D_rear); - -% NOTE: in the following computation the source term (binaural_irs_emission) does not need to be computed for each -% different board distance/azimuth/orientation as it is the same. I include the redundancy as a check that the geometry -% modelling and computations are correct, i.e. I can check that all the binaural responses in the binaural_irs_emission -% cell are equal. - -for ii = 1:length(params.board_azim) - - cipic_board_az = 90-params.board_azim(ii)*180/pi; - cipic_board_el = params.board_elev*180/pi; - [lear_ir, azerr(1,ii), elerr(1,ii)] = getNearestUCDpulse(cipic_board_az,cipic_board_el,h3D_lear); - [rear_ir, azerr(2,ii), elerr(2,ii)] = getNearestUCDpulse(cipic_board_az,cipic_board_el,h3D_rear); - - for jj = 1:length(params.board_dist) - for kk = 1:length(params.board_orientation) - - binaural_irs_emission{jj,ii,kk}(1,:) = fftconv(source_lear_ir,FFresp{jj,ii,kk}(2,:)); %source term - binaural_irs_emission{jj,ii,kk}(2,:) = fftconv(source_rear_ir,FFresp{jj,ii,kk}(2,:)); %source term - - binaural_irs_echo{jj,ii,kk}(1,:) = fftconv(lear_ir,FFresp{jj,ii,kk}(1,:)+FFresp{jj,ii,kk}(3,:)); - %board echo term - binaural_irs_echo{jj,ii,kk}(2,:) = fftconv(rear_ir,FFresp{jj,ii,kk}(1,:)+FFresp{jj,ii,kk}(3,:)); - %board echo term - - end - end -end - -simulation_data.echo = binaural_irs_echo; -simulation_data.emission =binaural_irs_emission; -simulation_data.params = params; -simulation_data.board_coords = board_coords; -simulation_data.azerr = azerr; -simulation_data.elerr = elerr; - -%% Subfunctions - -function [pulse, azerr, elerr] = getNearestUCDpulse(azimuth,elevation,h3D) -azimuth = pvaldeg(azimuth); -elevation = pvaldeg(elevation); - -elmax = 50; -elindices = 1:elmax; -elevations = -45 + 5.625*(elindices - 1); -el = round((elevation + 45)/5.625 + 1); -el = max(el,1); -el = min(el,elmax); -elerr = pvaldeg(elevation - elevations(el)); - -azimuths = [-80 -65 -55 -45:5:45 55 65 80]; -[azerr, az] = min(abs(pvaldeg(abs(azimuths - azimuth)))); - -pulse = squeeze(h3D(az,el,:)); - -function angle = pvaldeg(angle) -dtr = pi/180; -angle = atan2(sin(angle*dtr),cos(angle*dtr))/dtr; -if angle < - 90 - angle = angle + 360; -end - -function out=fftconv(in1,in2) -% -% Computes the convolution output out of the input vectors in1 and in2 -% either with time-domain convolution (as implemented by conv) or by -% frequency-domain filtering (as implemented by zero-padded fftfilt). -% -% out=fftconv(in1,in2) -% -in1=in1(:).';in2=in2(:).'; - -if (length(in1)>100 && length(in2)>100) - if length(in1)>=length(in2) - out=fftfilt(in2,[in1 zeros(1,length(in2)-1)]); - else - out=fftfilt(in1,[in2 zeros(1,length(in1)-1)]); - end -else - out=conv(in1,in2); -end - -function ir_matrix=edhrir_single_cuboid(geom) -% -% Matrix of irs for a single cuboid scatterer using EDTB -% -% Works for external geometry. Definition of corners and planes in the created CAD file should be pointing outwards (in -% cartesian coordinates as defined below). -% -% x coordinate (increasing to right in top view, right hand thumb) -% y coordinate (increasing in front in top view, right hand index) -% z coordinate (increasing upwards in top view, right hand middle) -% -% For more details about geometry description see the main help preample. -% -% geom input parameter should be a structure with the following fields: -% -% geom.scatterer_edges is a 8x3 matrix with elements: -% x y z coordinates of back right top edge (point 1) -% x y z coordinates of back left top edge (point 2) -% x y z coordinates of front left top edge (point 3) -% x y z coordinates of front right top edge (point 4) -% x y z coordinates of back right bottom edge (point 1) -% x y z coordinates of back left bottom edge (point 2) -% x y z coordinates of front left bottom edge (point 3) -% x y z coordinates of front right bottom edge (point 4) -% -% (or any sequence of rotations of a cuboid with edges as above) -% -% geom.source_position (Single) source coordinates in cartesian system defined 1x3 positive real vector. (Single) -% receiver always taken to be at coordinates origin (0,0,0) -% -% geom.Fs -% geom.Cair -% geom.Rhoair -% - -%% 1 -temp_filename=['a' num2str(now*1e12,'%-24.0f')]; - -fid=fopen([temp_filename '.cad'],'w'); -fprintf(fid,'%%CORNERS\n\n'); -fprintf(fid,'%.0f %9.6f %9.6f %9.6f\n',... - 1, geom.scatterer_edges(1,1), geom.scatterer_edges(1,2), geom.scatterer_edges(1,3),... - 2, geom.scatterer_edges(2,1), geom.scatterer_edges(2,2), geom.scatterer_edges(2,3),... - 3, geom.scatterer_edges(3,1), geom.scatterer_edges(3,2), geom.scatterer_edges(3,3),... - 4, geom.scatterer_edges(4,1), geom.scatterer_edges(4,2), geom.scatterer_edges(4,3),... - 5, geom.scatterer_edges(5,1), geom.scatterer_edges(5,2), geom.scatterer_edges(5,3),... - 6, geom.scatterer_edges(6,1), geom.scatterer_edges(6,2), geom.scatterer_edges(6,3),... - 7, geom.scatterer_edges(7,1), geom.scatterer_edges(7,2), geom.scatterer_edges(7,3),... - 8, geom.scatterer_edges(8,1), geom.scatterer_edges(8,2), geom.scatterer_edges(8,3)); -fprintf(fid,'\n%%PLANES\n'); -fprintf(fid,'\n1 / /RIGID\n1 2 3 4\n'); -fprintf(fid,'\n2 / /RIGID\n5 8 7 6\n'); -fprintf(fid,'\n3 / /RIGID\n1 4 8 5\n'); -fprintf(fid,'\n4 / /RIGID\n1 5 6 2\n'); -fprintf(fid,'\n5 / /RIGID\n2 6 7 3\n'); -fprintf(fid,'\n6 / /RIGID\n7 8 4 3\n'); -fprintf(fid,'\n%%EOF'); -fclose(fid); - -fid=fopen([temp_filename '_setup.m'],'wt'); -fprintf(fid,'\n global FSAMP CAIR RHOAIR SHOWTEXT'); -fprintf(fid,['\n FSAMP = ' num2str(geom.Fs) ';']); -fprintf(fid,['\n CAIR = ' num2str(geom.Cair) ';']); -fprintf(fid,['\n RHOAIR = ' num2str(geom.Rhoair) ';']); -fprintf(fid,'\n SHOWTEXT = 0;'); -fprintf(fid,'\n SUPPRESSFILES = 0;'); -temp = strrep([cd filesep],'\','\\'); -fprintf(fid,['\n Filepath=''''''' temp ''''''';']); -fprintf(fid,['\n Filestem=''' temp_filename ''';']); -fprintf(fid,['\n CADfile=''' temp temp_filename '.cad'';']); -fprintf(fid,'\n open_or_closed_model = ''open'';'); -fprintf(fid,'\n int_or_ext_model = ''ext'';'); -fprintf(fid,'\n EDcalcmethod = ''n'';'); -fprintf(fid,'\n directsound = 1;'); -fprintf(fid,'\n specorder = 1;'); -fprintf(fid,'\n difforder = 1;'); -fprintf(fid,'\n elemsize = [1];'); -fprintf(fid,'\n nedgesubs = 2;'); -fprintf(fid,'\n calcpaths = 1;'); -fprintf(fid,'\n calcirs = 1;'); -fprintf(fid,'\n sources=['); -for n=1:1 - fprintf(fid,['\n' num2str(geom.source_position(1)) ' ' ... - num2str(geom.source_position(2)) ' ' ... - num2str(geom.source_position(3))]); -end -fprintf(fid,'\n ];'); -fprintf(fid,'\n receivers=['); -for n=1:1 - fprintf(fid,'\n 0 0 0'); -end -fprintf(fid,'\n ];'); -fprintf(fid,'\n skipcorners = 1000000;'); -fprintf(fid,'\n Rstart = 0;'); - -fclose(fid); - -pause(1); - -[~, ir_matrix]=myver_edtb([cd filesep temp_filename '_setup.m']); - -delete([temp_filename '.cad']); -delete([temp_filename '_setup.m']); - -function [ir,varargout]=myver_edtb(EDsetupfile) -% implements the computation of EDToolbox (by Peter Svensson) with a front-end -% designed for my needs. -% -% Takes one input which a setup file as specified by Svensson and gives -% either one vector output (which is the irtot output of Svensson's implementation for -% the first source and first receiver in the input "EDsetupfile" setup file) or -% two outputs, the first as above and the second being a {NxM} cell (N the number -% of sources and M the number of receivers) each element of which is a 4xL matrix -% with its 4 rows being the irdiff, irdirect, irgeom and irtot outputs of Svensson's -% computation for the corresponding source and receiver. -% -% The code deletes all other .mat files created by Svensson's -% implementation. -% -% [ir ir_all_data]=myver_edtb(EDsetupfile); - -%keep record of files in the current directory before computation -dir_bef=dir; -ir=1; - -%run computation -EDB1main(EDsetupfile); - -%get files list in the current directory after computation -dir_aft=dir; - -%get all genuine files (excluding other directories) in current directory -%after computation -k=1; -for n=1:size(dir_aft,1) - if(~dir_aft(n).isdir) - names_aft{k}=dir_aft(n).name;k=k+1; %#ok<AGROW> - end -end - -%get all genuine files (excluding other directories) in current directory -%before computation -k=1; -for n=1:size(dir_bef,1) - if(~dir_bef(n).isdir) - names_bef{k}=dir_bef(n).name;k=k+1; %#ok<AGROW> - end -end - -%get irtot for 1st source 1st receiver and delete files created by -%computation. -% for n=1:length(names_aft) -% if ~strcmp(names_aft(n),names_bef) -% if ~isempty(strfind(names_aft{n},'_1_1_ir.mat')) -% temp=load(names_aft{n}); -% ir=full(temp.irtot); -% clear temp -% end -% delete(names_aft{n}) -% end -% end -for n=1:length(names_aft) - if ~strcmp(names_aft(n),names_bef) - if ~isempty(strfind(names_aft{n},'_1_1_ir.mat')) - temp=load(names_aft{n}); - ir=full(temp.irtot); - clear temp - end - if nargout>1 - if ~isempty(strfind(names_aft{n},'_ir.mat')) - temp=load(names_aft{n}); - temp2=regexp(regexp(names_aft{n},'_\d*_\d*_','match'),'\d*','match'); - temp3{str2double(temp2{1}(1)),str2double(temp2{1}(2))}(4,:)=full(temp.irtot); %#ok<AGROW> - temp3{str2double(temp2{1}(1)),str2double(temp2{1}(2))}(1,:)=full(temp.irdiff); %#ok<AGROW> - temp3{str2double(temp2{1}(1)),str2double(temp2{1}(2))}(2,:)=full(temp.irdirect); %#ok<AGROW> - temp3{str2double(temp2{1}(1)),str2double(temp2{1}(2))}(3,:)=full(temp.irgeom); %#ok<AGROW> - clear temp temp2 - end - end - delete(names_aft{n}) - end -end -if nargout>1 - varargout(1)={temp3}; -end -