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