tomwalters@0: % method of class @signal tomwalters@0: % function sigresult=add(sig1,sig2,[start_time],[duration]) tomwalters@0: % INPUT VALUES: tomwalters@0: % sig1: first @signal tomwalters@0: % sig2: second @signal or struct tomwalters@0: % start_time: start time for the addition. [default: 0] tomwalters@0: % duration: duration of the signal, that is added [default: getlength(sig2)] tomwalters@0: % RETURN VALUE: tomwalters@0: % sigresult: @signal that is the sum of signals sig1 and sig2` tomwalters@0: % the resulting signal can be longer then sig1 or sig2, when start_time tomwalters@0: % and duration is according. sig2 can be a signal-object or an struct tomwalters@0: % tomwalters@0: % bleeck@3: % This external file is included as part of the 'aim-mat' distribution package bleeck@3: % (c) 2011, University of Southampton bleeck@3: % Maintained by Stefan Bleeck (bleeck@gmail.com) bleeck@3: % download of current version is on the soundsoftware site: bleeck@3: % http://code.soundsoftware.ac.uk/projects/aimmat bleeck@3: % documentation and everything is on http://www.acousticscale.org bleeck@3: tomwalters@0: tomwalters@0: tomwalters@0: function sig=add(a,b,start_time,dauer) tomwalters@0: tomwalters@0: if nargin < 4 tomwalters@0: if isobject(b) tomwalters@0: dauer=getlength(b); tomwalters@0: end tomwalters@0: end tomwalters@0: if nargin < 3 tomwalters@0: start_time=0; tomwalters@0: end tomwalters@0: tomwalters@0: % wenn ein Spaltenvektor hinaufaddier werden soll tomwalters@0: if isnumeric(b) tomwalters@0: sr=GetSR(a); tomwalters@0: nr=size(b) tomwalters@0: if nr>1 tomwalters@0: temp=signal(b,sr); % erzeuge ein neues Signal aus den Werten tomwalters@0: sig=add(a,temp); % und lasse dann die beiden Signale zusammenaddieren tomwalters@0: else tomwalters@0: sig=a+b; tomwalters@0: end tomwalters@0: return; tomwalters@0: end tomwalters@0: tomwalters@0: tomwalters@0: tomwalters@0: % das resultierede Signal kann länger sein als die Ausgangssignale tomwalters@0: % erst feststellen, wie lang das nachher sein soll tomwalters@0: laenge1=getlength(a); tomwalters@0: laenge2=getlength(b); %so lang ist das zweite Signal tomwalters@0: if laenge2 binl2 % wenn das neue Signal länger wird tomwalters@0: temp=signal(lneu,sr1,a.name,a.unit_x,a.unit_y,a.start_time); tomwalters@0: % kopiere zuerst das alte Signal tomwalters@0: start=1; tomwalters@0: stop=time2bin(a,laenge1+getminimumtime(a)); tomwalters@0: temp.werte(start:stop)=a.werte(start:stop); tomwalters@0: % rekursiver Aufruf, denn nun ist das Signal lang genug tomwalters@0: sig=add(temp,b,start_time,dauer); tomwalters@0: return; tomwalters@0: end tomwalters@0: tomwalters@0: % normalfall: Das Ergebnissignal ist nun höchstens genauso lang tomwalters@0: sig=a; %kopieren des alten Signals in das Rückgabesignal tomwalters@0: start1=time2bin(a,start_time)+1; tomwalters@0: % stop1=time2bin(a,start_time+dauer-1/sr1); tomwalters@0: stop1=time2bin(a,start_time+dauer); tomwalters@0: start2=1; tomwalters@0: stop2=time2bin(a,dauer+getminimumtime(a)); tomwalters@0: tomwalters@0: % do some error checking: tomwalters@0: if stop2-start2 == stop1-start1 tomwalters@0: sig.werte(start1:stop1)=sig.werte(start1:stop1)+b.werte(start2:stop2); tomwalters@0: else tomwalters@0: if start1>1 tomwalters@0: stop1=start1+stop2-start2; tomwalters@0: sig.werte(start1:stop1)=sig.werte(start1:stop1)+b.werte(start2:stop2); tomwalters@0: else tomwalters@0: tomwalters@0: disp('signal::add problem with adding - havent added') tomwalters@0: end tomwalters@0: end tomwalters@0: tomwalters@0: return; tomwalters@0: tomwalters@0: tomwalters@0: tomwalters@0: