daniele@182: %% Buffer Test daniele@182: % Test script for the function audio->buffer which takes an audio object as daniele@182: % an input and buffers it into frames. The test assesses wether all the daniele@182: % possible buffer methods are invertible. daniele@182: %% daniele@182: daniele@182: N = 500; % number of audio samples daniele@182: TOL = 200; % tolerance (in decibels) daniele@182: verb = true; % verbose daniele@182: daniele@182: obj = audio(randn(N,1)); % audio object daniele@182: % wLengts: one window, two windows, maximum number of windows daniele@182: temp = factor(N); daniele@182: wLengths = [N; fix(N/2); fix(N/temp(end))]; daniele@182: % overlaps: zero, half window, max daniele@182: overlapNames = {'zero','half-window','maximum'}; daniele@182: overlaps = {@(n)0, @(n)n/2, @(n)n-1}; daniele@182: % windows: valid windows daniele@182: windows = {@hanning,@hamming,@triang,@rectwin}; daniele@182: % methods: valid methods daniele@182: methods = {'standard'}; daniele@182: daniele@182: daniele@182: nLen = length(wLengths); daniele@182: nOver = length(overlaps); daniele@182: nWin = length(windows); daniele@182: nMet = length(methods); daniele@182: count = 1; daniele@182: for iLen=1:nLen daniele@182: for iOver=1:nOver daniele@182: for iWin=1:nWin daniele@182: for iMet=1:nMet daniele@182: if verb daniele@182: printf('\n buffer test %d/%d - %d window length, %s overlap, %s window and %s method ... ',... daniele@182: count,nMet*nWin*nOver*nLen,wLengths(iLen),overlapNames{iOver},func2str(windows{iWin}),methods{iMet}); daniele@182: end daniele@182: obj = buffer(obj,wLengths(iLen),overlaps{iOver}(wLengths(iLen)),windows{iWin},methods{iMet}); daniele@182: s_rec = obj.unbuffer; daniele@182: if snr(obj.s,s_rec) > TOL daniele@182: if verb, printf('Passed'); end daniele@182: else daniele@182: error('Test failed!'); daniele@182: end daniele@182: count = count+1; daniele@182: end daniele@182: end daniele@182: end daniele@182: end