annotate util/classes/tests/test_buffer.m @ 182:f8bc99a5470c danieleb

Added test for audio buffer function
author Daniele Barchiesi <daniele.barchiesi@eecs.qmul.ac.uk>
date Mon, 09 Jan 2012 12:58:00 +0000
parents
children
rev   line source
daniele@182 1 %% Buffer Test
daniele@182 2 % Test script for the function audio->buffer which takes an audio object as
daniele@182 3 % an input and buffers it into frames. The test assesses wether all the
daniele@182 4 % possible buffer methods are invertible.
daniele@182 5 %%
daniele@182 6
daniele@182 7 N = 500; % number of audio samples
daniele@182 8 TOL = 200; % tolerance (in decibels)
daniele@182 9 verb = true; % verbose
daniele@182 10
daniele@182 11 obj = audio(randn(N,1)); % audio object
daniele@182 12 % wLengts: one window, two windows, maximum number of windows
daniele@182 13 temp = factor(N);
daniele@182 14 wLengths = [N; fix(N/2); fix(N/temp(end))];
daniele@182 15 % overlaps: zero, half window, max
daniele@182 16 overlapNames = {'zero','half-window','maximum'};
daniele@182 17 overlaps = {@(n)0, @(n)n/2, @(n)n-1};
daniele@182 18 % windows: valid windows
daniele@182 19 windows = {@hanning,@hamming,@triang,@rectwin};
daniele@182 20 % methods: valid methods
daniele@182 21 methods = {'standard'};
daniele@182 22
daniele@182 23
daniele@182 24 nLen = length(wLengths);
daniele@182 25 nOver = length(overlaps);
daniele@182 26 nWin = length(windows);
daniele@182 27 nMet = length(methods);
daniele@182 28 count = 1;
daniele@182 29 for iLen=1:nLen
daniele@182 30 for iOver=1:nOver
daniele@182 31 for iWin=1:nWin
daniele@182 32 for iMet=1:nMet
daniele@182 33 if verb
daniele@182 34 printf('\n buffer test %d/%d - %d window length, %s overlap, %s window and %s method ... ',...
daniele@182 35 count,nMet*nWin*nOver*nLen,wLengths(iLen),overlapNames{iOver},func2str(windows{iWin}),methods{iMet});
daniele@182 36 end
daniele@182 37 obj = buffer(obj,wLengths(iLen),overlaps{iOver}(wLengths(iLen)),windows{iWin},methods{iMet});
daniele@182 38 s_rec = obj.unbuffer;
daniele@182 39 if snr(obj.s,s_rec) > TOL
daniele@182 40 if verb, printf('Passed'); end
daniele@182 41 else
daniele@182 42 error('Test failed!');
daniele@182 43 end
daniele@182 44 count = count+1;
daniele@182 45 end
daniele@182 46 end
daniele@182 47 end
daniele@182 48 end