tomwalters@0: % method of class @frame tomwalters@0: % tomwalters@0: % INPUT VALUES: tomwalters@0: % tomwalters@0: % RETURN VALUE: tomwalters@0: % tomwalters@0: % tomwalters@0: % (c) 2003, University of Cambridge, Medical Research Council tomwalters@0: % Stefan Bleeck (stefan@bleeck.de) tomwalters@0: % http://www.mrc-cbu.cam.ac.uk/cnbh/aimmanual tomwalters@0: % $Date: 2003/01/17 16:57:46 $ tomwalters@0: % $Revision: 1.3 $ tomwalters@0: tomwalters@0: function fr=extractpitchregion(fr) tomwalters@0: % throws out the region to a certain periodicity in the auditory image tomwalters@0: tomwalters@0: tomwalters@0: global graphix;global starttime; tomwalters@0: graphix=0; tomwalters@0: tomwalters@0: % 0 von comps(0-2) tomwalters@0: % und dann langsam auf 1 bis comp(3) tomwalters@0: tomwalters@0: zerotime=1; tomwalters@0: attacktill=2; tomwalters@0: attacktodominant=4; tomwalters@0: dominanttime=7; tomwalters@0: decaytime=8; tomwalters@0: tomwalters@0: % zerotime=1.5; tomwalters@0: % attacktill=2.5; tomwalters@0: % attacktodominant=4; tomwalters@0: % dominanttime=7; tomwalters@0: % decaytime=8; tomwalters@0: tomwalters@0: dominant_scale_factor=1; tomwalters@0: tomwalters@0: tomwalters@0: nr_ch=getnrchannels(fr); tomwalters@0: cfs=getcf(fr); tomwalters@0: end_time=getmaximumtime(fr); tomwalters@0: sr=getsr(fr); tomwalters@0: geslen=getlength(fr); tomwalters@0: starttime=getminimumtime(fr); tomwalters@0: tomwalters@0: tomwalters@0: for i=1:nr_ch tomwalters@0: ch_fre=cfs(i); tomwalters@0: ch=getsinglechannel(fr,i); tomwalters@0: firsttime=-1/ch_fre*zerotime; % up to the second tomwalters@0: secondtime=-1/ch_fre*attacktill; tomwalters@0: thirdtime=-1/ch_fre*attacktodominant; tomwalters@0: sixtime=-1/ch_fre*dominanttime; tomwalters@0: seventime=-1/ch_fre*decaytime; tomwalters@0: tomwalters@0: ch=scalefun(ch,0,firsttime,0,0,'r'); tomwalters@0: ch=scalefun(ch,firsttime,secondtime,0,1,'g'); tomwalters@0: ch=scalefun(ch,secondtime,thirdtime,1,dominant_scale_factor,'k'); tomwalters@0: ch=scalefun(ch,thirdtime,sixtime,dominant_scale_factor,dominant_scale_factor,'y'); tomwalters@0: ch=scalefun(ch,sixtime,seventime,dominant_scale_factor,1,'c'); tomwalters@0: tomwalters@0: % scale the amplitude of higher cf-channels down tomwalters@0: % cutoff=2000; tomwalters@0: % db_per_octave=6; tomwalters@0: % scaler=getfiltervaluelowpass(ch_fre,cutoff,db_per_octave); tomwalters@0: % ch=ch*scaler; tomwalters@0: % tomwalters@0: % fr=setsinglechannel(fr,i,ch); tomwalters@0: end tomwalters@0: tomwalters@0: tomwalters@0: function fun=scalefun(fun,fromtime,totime,scaler2,scaler1,col) tomwalters@0: global starttime;global graphix; tomwalters@0: dur=abs(totime)-abs(fromtime); tomwalters@0: nr_points=time2bin(fun,fromtime)-time2bin(fun,totime); tomwalters@0: msig=linspace(scaler1,scaler2,nr_points); tomwalters@0: if fromtime < starttime tomwalters@0: return tomwalters@0: end tomwalters@0: if totime < starttime tomwalters@0: scaler1=scaler2+(scaler2-scaler1)/(fromtime-totime)*(starttime-totime); tomwalters@0: totime=starttime; tomwalters@0: nr_points=time2bin(fun,fromtime)-time2bin(fun,totime); tomwalters@0: msig=linspace(scaler1,scaler2,nr_points); tomwalters@0: end tomwalters@0: if nr_points > 0 tomwalters@0: fun=mult(fun,msig,totime,nr_points/getsr(fun)); tomwalters@0: end tomwalters@0: if graphix tomwalters@0: plot(fun,col);hold on; tomwalters@0: end tomwalters@0: tomwalters@0: return tomwalters@0: tomwalters@0: