Mercurial > hg > human-echolocation
diff private/EDB1plotstackedIRs.m @ 0:90220f7249fc
Initial commit
author | Timos Papadopoulos <tp@isvr.soton.ac.uk> |
---|---|
date | Sat, 16 Nov 2013 18:25:24 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/private/EDB1plotstackedIRs.m Sat Nov 16 18:25:24 2013 +0000 @@ -0,0 +1,133 @@ +function Bigir = EDB1plotstackedIRs(firstirfile,nfiles,offset,filtir,typeofir,startsample,endsample) +% EDB1plotstackedIRs - Plots a number of IRs in a stacked way. +% +% Input parameters: +% firstirfile The data file containing the first IR file +% nfiles The number of files +% offset The numerical offset for each file +% filtir A window to filter with +% typeofir 't' (default), 'g' (geom), 'f' (direct sound), 'd' +% (diffracted) +% startsample (optional) The first sample number that should be +% plotted for each IR (after filtering). Default: 1. +% endsample (optional) The last sample number that should be +% plotted for each IR (after filtering). Default: the +% last sample for the longest of all IRs. +% +% Output parameters: +% Bigir Matrix, [nfiles,nlength], of the IRs in the files, one +% per row. +% +% Uses functions EDB1strpend +% +% ---------------------------------------------------------------------------------------------- +% This file is part of the Edge Diffraction Toolbox by Peter Svensson. +% +% The Edge Diffraction Toolbox is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by the Free Software +% Foundation, either version 3 of the License, or (at your option) any later version. +% +% The Edge Diffraction Toolbox is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License along with the +% Edge Diffraction Toolbox. If not, see <http://www.gnu.org/licenses/>. +% ---------------------------------------------------------------------------------------------- +% Peter Svensson (svensson@iet.ntnu.no) 20030806 +% +% EDB1plotstackedIRs(firstirfile,nfiles,offset,filtir,typeofirs,startsample,endsample); + +%-------------------------------------------------------------- +% Extract the filename stem + +if nargin == 0 + [firstirfile,irfilepath] = uigetfile('*ir.mat','Please select the first irfile'); + [irfilepath,temp1,temp2] = fileparts(irfilepath); + if ~isstr(firstirfile) | isempty(firstirfile) + return + end +else + [irfilepath,firstirfile,fileext] = fileparts(firstirfile); + irfilepath = [irfilepath,filesep]; + firstirfile = [firstirfile,fileext]; +end + +if nargin < 5 + typeofir = 't'; +else + typeofir = lower(typeofir(1)); +end + +if nargin < 6 + startsample = 1; +end +if nargin < 7 + endsample = -1; +end + +filestem = EDB1strpend(firstirfile,'_ir'); +iv = find(filestem=='_'); +iv = iv(length(iv)); +firstnumber = str2num(filestem(iv+1:length(filestem))); +filestem = filestem(1:iv) + +%-------------------------------------------------------------- +% Read the files + +offsetvec = ([1:nfiles].'-1)*offset; + +disp(' Loading files') +for ii = nfiles:-1:1 + irfile = [filestem,int2str(ii+firstnumber-1),'_ir.mat']; + eval(['load ',irfilepath,irfile]) + irtot = real(irtot); + if typeofir == 'f' + irtot = irdirect; + elseif typeofir == 'g' + irtot = irgeom + irdirect; + elseif typeofir == 's' + irtot = irgeom; + elseif typeofir == 'd' + irtot = real(irdiff); + end + + if isempty(irtot) + irtot = [0 0].'; + end + + irtot = conv(filtir,full(irtot)); + if endsample == -1 + irtot = irtot(startsample:end); + else + if endsample <= length(irtot) + irtot = irtot(startsample:endsample); + else + irtot = irtot(startsample:end); + end + end + + signvec = sign(irtot); + irtot = abs(irtot).^(1/1).*signvec; + + if ii == nfiles + Bigir = zeros(nfiles,length(irtot)); + [slask,nbigir] = size(Bigir); + Bigir = Bigir + offsetvec(:,ones(1,nbigir)); + Bigir(ii,:) = Bigir(ii,:) + (irtot).'; + else + [slask,nbigir] = size(Bigir); + nir = length(irtot); + if nir > nbigir + Bigir = [Bigir offsetvec(:,ones(1,nir-nbigir))]; + end + Bigir(ii,1:nir) = Bigir(ii,1:nir) + (irtot).'; + end + +end + +if ~isempty(Bigir) + plot(Bigir.','r') +else + error(' ERROR: The IRs were all empty. Please check that you did not specify start and end samples that were longer than the IR length!') +end