wolffd@0: function test_auditory(test) wolffd@0: % function test_auditory(test) wolffd@0: % Test each of the functions in the Auditory Toolbox. The single argument wolffd@0: % is a string, containing the word 'all' or the name of one routine from the wolffd@0: % toolbox. This routine defaults to running all tests. There is a pause after wolffd@0: % each plot, so be sure to hit the return key so the testing can proceed. wolffd@0: % wolffd@0: wolffd@0: % (c) 1998 Interval Research Corporation wolffd@0: wolffd@0: if nargin < 1 wolffd@0: test = 'all'; wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'agc') | strcmp(test,'all') wolffd@0: disp('agc test'); wolffd@0: set_window_size(200, 150); wolffd@0: agc(ones(1,20), [.5;.5]) wolffd@0: plot(agc(ones(1,30), [.8; .5])); pause; wolffd@0: plot(agc(ones(1,30),[.4;.5])); pause; wolffd@0: plot(agc(ones(1,30),[.4;.1])); pause; wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'CorrelogramArray') | strcmp(test,'all') wolffd@0: disp('CorrelogramArray test'); wolffd@0: u=MakeVowel(4000,FMPoints(4000,120),16000,'u'); wolffd@0: soundsc(u,16000) wolffd@0: coch=LyonPassiveEar(u,16000,1,4,.25); wolffd@0: width = 256; wolffd@0: cor=CorrelogramArray(coch,16000,16,width); wolffd@0: [pixels frames] = size(cor); wolffd@0: colormap(1-gray); wolffd@0: for j=1:frames wolffd@0: imagesc(reshape(cor(:,j),pixels/width,width)); wolffd@0: drawnow; wolffd@0: end wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'CorrelogramFrame') | strcmp(test,'all') wolffd@0: disp('CorrelogramFrame test'); wolffd@0: for j=20:-1:1 wolffd@0: c(j,:) = max(0,sin((1:256)/256*(21-j)*3*2*pi)); wolffd@0: end wolffd@0: picture=CorrelogramFrame(c,128,1,256); wolffd@0: imagesc(picture) wolffd@0: colormap(1-gray) wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'CorrelogramMovie') | strcmp(test,'all') wolffd@0: disp('CorrelogramMovie test'); wolffd@0: u=MakeVowel(4000,FMPoints(4000,120),16000,'u'); wolffd@0: soundsc(u,16000) wolffd@0: coch=LyonPassiveEar(u,16000,1,4,.25); wolffd@0: mov=CorrelogramMovie(coch,16000,16,256); wolffd@0: movie(mov,-10,16) wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'CorrelogramPitch') | strcmp(test,'all') wolffd@0: disp('CorrelogramPitch test'); wolffd@0: u=MakeVowel(20000,FMPoints(20000,120),22254,'u'); wolffd@0: cor=CorrelogramArray(u,22254,50,256); wolffd@0: p=CorrelogramPitch(cor,256,22254); wolffd@0: plot(p) wolffd@0: axis([0 45 110 130]); pause; wolffd@0: wolffd@0: coch=LyonPassiveEar(u,22254,1,4,.5); wolffd@0: cor=CorrelogramArray(coch,22254,50,256); wolffd@0: p=CorrelogramPitch(cor,256,22254); wolffd@0: plot(p) wolffd@0: axis([0 45 110 130]); pause; wolffd@0: wolffd@0: u=MakeVowel(20000,FMPoints(20000,120),22254,'u'); wolffd@0: n=randn([1 20000]).*(1:20000)/20000; wolffd@0: un=u+n/4; wolffd@0: coch=LyonPassiveEar(un,22254,1,4,.5); wolffd@0: cor=CorrelogramArray(coch,22254,50,256); wolffd@0: [pitch sal]=CorrelogramPitch(cor,256,22254,100,200); wolffd@0: plot(pitch); pause wolffd@0: plot(sal); pause wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'DesignLyonFilters') | strcmp(test,'all') wolffd@0: disp('DesignLyonFilters test'); wolffd@0: filts=DesignLyonFilters(16000); wolffd@0: size(filts) wolffd@0: filts(1:5,:) wolffd@0: wolffd@0: resp=soscascade([1 zeros(1,255)],filts); wolffd@0: freqResp=20*log10(abs(fft(resp(1:5:88,:)'))); wolffd@0: freqScale=(0:255)/256*16000; wolffd@0: semilogx(freqScale(1:128),freqResp(1:128,:)) wolffd@0: axis([100 10000 -60 20]); pause; wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'EpsilonFromTauFS') | strcmp(test,'all') wolffd@0: disp('EpsilonFromTauFS test'); wolffd@0: eps=EpsilonFromTauFS(5,1) wolffd@0: filter(1, [1 eps-1],[1 zeros(1,9)]) wolffd@0: sosfilters([1 zeros(1,9)],[1 0 0 eps-1 0]) wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'ERBSpace') | strcmp(test,'all') wolffd@0: set_window_size(250, 150); wolffd@0: disp('ERBSpace test') wolffd@0: plot(ERBSpace) wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'FMPoints') | strcmp(test,'all') wolffd@0: disp('FMPoints test'); wolffd@0: u=MakeVowel(20000,FMPoints(20000,120), 22050,'u'); wolffd@0: soundsc(u/max(u), 22050) wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'FreqResp') | strcmp(test,'all') wolffd@0: disp('FreqResp test'); wolffd@0: filts=DesignLyonFilters(16000); wolffd@0: f=10:10:7990; wolffd@0: resp=FreqResp(filts(2, :), f, 16000); wolffd@0: semilogx(f,resp); wolffd@0: axis([100 10000 -50 20]); wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'LyonPassiveEar') | strcmp(test,'all') wolffd@0: disp('LyonPassiveEar test'); wolffd@0: is=LyonPassiveEar([1 zeros(1,255)],16000,1); wolffd@0: imagesc(min(is, 0.0004)); pause wolffd@0: wolffd@0: s=sin((0:2041)/20000*2*pi*1000); wolffd@0: ys=LyonPassiveEar(s,20000,20); wolffd@0: imagesc(ys/max(max(ys))); pause; wolffd@0: wolffd@0: tap = wavread('tapestry.wav'); wolffd@0: coch=LyonPassiveEar(tap,16000,100); wolffd@0: imagesc(coch/max(max(coch))); pause; wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'MakeERBFilters') | strcmp(test,'all') wolffd@0: disp('MakeERBFilters test'); wolffd@0: fcoefs = MakeERBFilters(16000,10,100); wolffd@0: y = ERBFilterBank([1 zeros(1,511)], fcoefs); wolffd@0: resp = 20*log10(abs(fft(y'))); wolffd@0: freqScale = (0:511)/512*16000; wolffd@0: semilogx(freqScale(1:255),resp(1:255,:)); wolffd@0: axis([100 16000 -60 0]) wolffd@0: xlabel('Frequency (Hz)'); wolffd@0: ylabel('Filter Response (dB)'); pause; wolffd@0: wolffd@0: tap = wavread('tapestry.wav'); wolffd@0: fcoefs=MakeERBFilters(16000,40,100); wolffd@0: coch=ERBFilterBank(tap, fcoefs); wolffd@0: for j=1:size(coch,1) wolffd@0: c=max(coch(j,:),0); wolffd@0: c=filter([1],[1 -.99],c); wolffd@0: coch(j,:)=c; wolffd@0: end wolffd@0: imagesc(coch); wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'MakeVowel') | strcmp(test,'all') wolffd@0: disp('MakeVowel test'); wolffd@0: vowels=[MakeVowel(10000,100,16000,'a') ... wolffd@0: MakeVowel(10000,100,16000,'i') ... wolffd@0: MakeVowel(10000,100,16000,'u')]; wolffd@0: soundsc(vowels,16000); wolffd@0: wolffd@0: vowels=[MakeVowel(1000,100,16000,'a')... wolffd@0: MakeVowel(1000,100,16000,'i') ... wolffd@0: MakeVowel(1000,100,16000,'u')]; wolffd@0: s=spectrogram(vowels,256,2,2); wolffd@0: imagesc(s); pause wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'MeddisHairCell') | strcmp(test,'all') wolffd@0: disp('MeddisHairCell test'); wolffd@0: tone=sin((0:4999)/20000*2*pi*1000); wolffd@0: s=[zeros(1,5000) ... wolffd@0: tone*10^(40/20-1.35) zeros(1,5000) ... wolffd@0: tone*10^(45/20-1.35) zeros(1,5000) ... wolffd@0: tone*10^(50/20-1.35) zeros(1,5000) ... wolffd@0: tone*10^(55/20-1.35) zeros(1,5000) ... wolffd@0: tone*10^(60/20-1.35) zeros(1,5000) ... wolffd@0: tone*10^(65/20-1.35) zeros(1,5000) ... wolffd@0: tone*10^(70/20-1.35) zeros(1,5000) ... wolffd@0: tone*10^(75/20-1.35) zeros(1,5000) ... wolffd@0: tone*10^(80/20-1.35)]; wolffd@0: y=MeddisHairCell(s,20000); wolffd@0: plot((1:90000)/20000,y(1:90000)); pause wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'mfcc') | strcmp(test,'all') wolffd@0: disp('mfcc test'); wolffd@0: set_window_size(348, 188); wolffd@0: tap = wavread('tapestry.wav'); wolffd@0: [ceps,freqresp,fb,fbrecon,freqrecon] = mfcc(tap,16000,100); wolffd@0: imagesc(ceps); wolffd@0: colormap(1-gray); pause wolffd@0: imagesc(flipud(freqresp)); pause wolffd@0: imagesc(flipud(fb)); pause wolffd@0: imagesc(flipud(fbrecon)); pause wolffd@0: imagesc(flipud(freqrecon)); pause wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'proclpc') | strcmp(test,'all') wolffd@0: disp('proclpc test'); wolffd@0: set_window_size(348, 188); wolffd@0: [tap sr]= wavread('tapestry.wav'); wolffd@0: lpc_spec(tap,sr,13); pause wolffd@0: lpc_spec(tap,sr,26); pause wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'rasta') | strcmp(test,'all') wolffd@0: disp('rasta test'); wolffd@0: tap = wavread('tapestry.wav'); wolffd@0: [ceps,freqresp,fb,fbrecon,freqrecon] = mfcc(tap,16000,100); wolffd@0: rastaout = rasta(ceps,100); wolffd@0: wolffd@0: mfccDCTMatrix = 1/sqrt(40/2)*cos((0:(13-1))' * ... wolffd@0: (2*(0:(40-1))+1) * pi/2/40); wolffd@0: mfccDCTMatrix(1,:) = mfccDCTMatrix(1,:)*sqrt(2)/2; wolffd@0: wolffd@0: rastarecon = 0*fbrecon; wolffd@0: for i=1:size(rastaout,2) wolffd@0: rastarecon(:,i) = mfccDCTMatrix' * rastaout(:,i); wolffd@0: end wolffd@0: imagesc(flipud(rastarecon)); wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'SecondOrderFilter') | strcmp(test,'all') wolffd@0: disp('SecondOrderFilter test'); wolffd@0: f=10:10:7990; wolffd@0: sos=SecondOrderFilter(3000,5,16000) wolffd@0: filt=[1 0 0 sos(2:3)] wolffd@0: semilogx(f,FreqResp(filt,f,16000)); pause wolffd@0: wolffd@0: filt=[sos 0 0] wolffd@0: semilogx(f,FreqResp(filt,f,16000)); pause wolffd@0: wolffd@0: sos=SecondOrderFilter(3000,2,16000) wolffd@0: filt=[sos 0 0] wolffd@0: semilogx(f,FreqResp(filt,f,16000)); pause wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'SeneffEar') | strcmp(test,'all') wolffd@0: disp('SeneffEar test'); wolffd@0: s=[zeros(1,160) sin(2000*2*pi/16000*(1:1120))]; wolffd@0: y=SeneffEar(s,16000,15); pause; wolffd@0: wolffd@0: tap = wavread('tapestry.wav'); wolffd@0: hc=SeneffEar(tap,16000); wolffd@0: for j=1:40 wolffd@0: c=hc(j,:); wolffd@0: c=filter([1],[1, -.99],c); wolffd@0: h(j,:)=c(1:100:50381); wolffd@0: end wolffd@0: clf; imagesc(h); pause; wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'SetGain') | strcmp(test,'all') wolffd@0: disp('SetGain test'); wolffd@0: filts=DesignLyonFilters(16000); wolffd@0: filt=filts(42,:) wolffd@0: f=10:10:7990; wolffd@0: semilogx(f,FreqResp(filt,f,16000)); pause; wolffd@0: wolffd@0: newFilt = SetGain(filt, 10, 1960, 16000); wolffd@0: semilogx(f, FreqResp(newFilt, f, 16000)); pause wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'soscascade') | strcmp(test,'all') wolffd@0: disp('soscascade test'); wolffd@0: soscascade([1 0 0 0 0],[1 0 0 -.9 0;1 1 0 0 0]) wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'sosfilters') | strcmp(test,'all') wolffd@0: disp('sosfilters test'); wolffd@0: sosfilters([1 0 0 0 0 0],[1 0 0 -.9 0;1 0 0 -.8 0]) wolffd@0: sosfilters([1 0 0 0 0 0;2 0 0 0 0 0], ... wolffd@0: [1 0 0 -.9 0;1 0 0 -.8 0]) wolffd@0: sosfilters([1 0 0 0 0 0;2 0 0 0 0 0],[1 0 0 -.9 0]) wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'spectrogram') | strcmp(test,'all') wolffd@0: disp('spectrogram test'); wolffd@0: tap = wavread('tapestry.wav'); wolffd@0: spec=spectrogram(tap,64,2,1); wolffd@0: imagesc(spec); pause; wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'synlpc') | strcmp(test,'all') wolffd@0: disp('synlpc test'); wolffd@0: [tap sr] = wavread('tapestry.wav'); wolffd@0: [aCoeff,resid,pitch,G,parcor,stream] = proclpc(tap,sr,13); wolffd@0: syntap = synlpc(aCoeff, stream, sr, G);; wolffd@0: soundsc(syntap,16000); wolffd@0: wolffd@0: [aCoeff,resid,pitch,G,parcor,stream] = proclpc(tap,sr,13); wolffd@0: stream=randn(size(stream)); wolffd@0: syntap = synlpc(aCoeff, stream, sr, G);; wolffd@0: soundsc(syntap,16000); wolffd@0: end wolffd@0: wolffd@0: if strcmp(test,'WhiteVowel') | strcmp(test,'all') wolffd@0: disp('WhiteVowel test'); wolffd@0: [tap sr] = wavread('tapestry.wav'); wolffd@0: whitetap = WhiteVowel(tap,16000,13,1000); wolffd@0: soundsc(whitetap, 16000); wolffd@0: end wolffd@0: wolffd@0: function lpc_spec(tap,sr,L) wolffd@0: [aCoeff,resid,pitch,G,parcor,stream] = proclpc(tap,sr,L); wolffd@0: cft=0:(1/255):1; wolffd@0: spec = zeros(128, size(aCoeff,2)); wolffd@0: for nframe=1:size(aCoeff,2) wolffd@0: gain=20*log10(G(nframe)) * 0; wolffd@0: for index=1:size(aCoeff,1) wolffd@0: gain = gain + aCoeff(index,nframe)*exp(-i*2*pi*cft).^index; wolffd@0: end wolffd@0: gain = abs(1./gain); wolffd@0: spec(:,nframe) = 20*log10(gain(1:128))'; wolffd@0: end wolffd@0: imagesc(flipud(spec)); wolffd@0: wolffd@0: wolffd@0: wolffd@0: function set_window_size(width, height) wolffd@0: cursize = get(gcf, 'position'); wolffd@0: cursize(3) = width+1; wolffd@0: cursize(4) = height+1; wolffd@0: set(gcf, 'position', cursize); wolffd@0: wolffd@0: wolffd@0: