📄 test.m
字号:
%%%%%% The following tests should succeed.%%%% initialize the testunit_init;% make sure our imaginary unit isn't redefinedclear is1 = signal(0:2,1);s2 = signal(0:2,1/10);s3 = signal(0:2,10);s4 = signal(0:2,1);s5 = signal(0:-1:-2,1);s6 = signal([1 0 0 0],1);s7 = openwav('kaksi.wav');s8 = trim(s7,0.12,0.18);s9 = signal(ones(1,10),1);s10= signal([-1:1 -1:1 -1:1],1);s11 = signal(s7.s(1:5000),s7.time.fs);% test signal classunit_test('signal/signal 1', 1, 's1.s==[0 1 2] & s1.t==[0 1 2]');unit_test('signal/signal 2', 1, 's2.s==s3.s & s2.t==s3.t');unit_test('signal/abs', 1, 's1==abs(s5)');unit_test('signal/at', 1, 'at(s1,1)==2');res = cat(s1,s5);unit_test('signal/cat', 1, 'res.s==[0 1 2 0 -1 -2] & res.t==[0 1 2 3 4 5]');s6_c = cceps(-1*s6);expect = [0 -0.78539816339745 0 0.78539816339745];unit_test('signal/cceps', 1, 'abs(s6_c.s-expect)<1e-10 & s6_c.t==[0 1 2 3]');unit_test('signal/crossings', 1, 'abs(crossings(s10,-1,1)-[0 3 6])<1e-10');unit_test('signal/crossings', 1, 'abs(crossings(s10,0,1)-[1 4 7])<1e-10');unit_test('signal/crossings', 1, 'isempty(crossings(s10,1,1))');unit_test('signal/crossings', 1, 'isempty(crossings(s10,-1,-1))');unit_test('signal/crossings', 1, 'abs(crossings(s10,0,-1)-[2.5 5.5])<1e-10');unit_test('signal/crossings', 1, 'abs(crossings(s10,1,-1)-[2 5])<1e-10');unit_test('signal/crossings', 1, 'abs(crossings(s10,-1,0)-[0 3 6])<1e-10');unit_test('signal/crossings', 1, 'abs(crossings(s10,0,0)-[1 2.5 4 5.5 7])<1e-10');unit_test('signal/crossings', 1, 'abs(crossings(s10,1,0)-[2 5])<1e-10');res = dap(s8,4);expect = [1.00000000000000 -2.29749955746386 1.66758990385642 -0.29530839682445 -0.04940534915418];unit_test('signal/dap', 1, 'abs(res-expect)<1e-3');res = dap(s11,3);expect = [1.00000000000000 -2.20204968008106 1.54171765544407 -0.30536356848906];unit_test('signal/dap', 1, 'abs(res-expect)<1e-3');res = deriv(s3);unit_test('signal/deriv', 1, 'res.s==[10 10] & all(res.t-[0.05 0.15]<1e-10)');res = deriv(s3,1,2);unit_test('signal/deriv', 1, 'res.s==[0] & all(res.t-[0.1]<1e-10)');res = diff(s1);unit_test('signal/diff', 1, 'res.s==[1 1] & res.t==[0.5 1.5]');% unit_test('signal/display', 1, 0); no obvious testunit_test('signal/double', 1, 'double(s1)==s1.s');unit_test('signal/dur', 1, 'dur(s1)==3');res = s1(end);unit_test('signal/end', 1, 'res.s==2');unit_test('signal/eq', 1, 's1==s4');res = fft(s6);unit_test('signal/fft', 1, 'res.s==[1 1 1 1] & res.f==[0 0.25 0.5 0.75]');res = filter([0 1],1,s6);unit_test('signal/filter', 1, 'res.s==[0 1 0 0] & res.t==[0 1 2 3] & res.valid==2');res = filtfilt([0 1],1,s6);unit_test('signal/filtfilt', 1, 'all(res.s==[1 0 0 0]) & all(res.t==[0 1 2 3]) & all(res.valid==[2 3])');res=find_f0_acorr(s8);unit_test('signal/find_f0_acorr', 1, '110<res && res<111');res=find_f0(s8);unit_test('signal/find_f0', 1, '110<res && res<111');res=find_f0_yin(s8);unit_test('signal/find_f0_yin', 1, '110<res && res<111');res=find_f(s8);expect=[107.6660 226.0986 333.7646 441.4307];unit_test('signal/find_f', 1, 'abs(res(1:4)-expect)<1');expect=[ 0.07061021319788 0.36973812277686 0.37644955209663 -0.29910768106075 ... -0.96122822998841 -0.69311330512230 0.18312560921898 0.59102804404567 ... 0.29496473317229 -0.00933589598869 -0.01892839868263 ];res=fdshift(signal(sin(0:10).*hanning(11)',22050),0.5,'ideal');unit_test('signal/fdshift', 1, 'sum(abs(res.s-expect))<1e-10');res = flip(s1);unit_test('signal/flip', 1, 'fliplr(res.s) == s1.s & s1.t==res.t');res=icceps(s6,0);unit_test('signal/icceps', 1, 'res.s==icceps(s6.s,0)');unit_test('signal/interpolate', 1, 'abs(interpolate(s10,[1.2 5.6])-[0.2 -.2])<1e-10');unit_test('signal/gt', 1, 's1>0==[0 1 1]');unit_test('signal/len', 1, 'len(s1)==3');res=lpc(s8,4);expect=[1 -2.23956227309942 1.56595244136253 ... -0.23834024396643 -0.05480105573481];unit_test('signal/lpc', 1, 'abs(res-expect)<1e-3');unit_test('signal/lt', 1, 's1<1==[1 0 0]');unit_test('signal/max', 1, 'max(s1)==2');unit_test('signal/maxtime', 1, 'maxtime(s6)==3');res=medfilt1(s1,3);unit_test('signal/medfilt1', 1, 'res.s==[0 1 1] & res.t==[0 1 2]');unit_test('signal/min', 1, 'min(s1)==0');res=s1-s5;unit_test('signal/minus', 1, 'res.s==[0 2 4] & res.t==[0 1 2]');res=s1*2;unit_test('signal/mtimes', 1, 'res.s==[0 2 4] & res.t==[0 1 2]');res = mvdr(s8,4);expect = [1 -1.94932005118663 1.17429335154342 ... -0.16207492905511 -0.01492193601777];unit_test('signal/mvdr', 1, 'abs(res-expect)<1e-3');%unit_test('signal/plot', 1, 0);res=s5.^2;unit_test('signal/power', 1, 'res.s==[0 1 4] & res.t==[0 1 2]')res=s1+s5;unit_test('signal/plus', 1, 'res.s==[0 0 0] & res.t==[0 1 2]');res=s1+shift(s5,4);unit_test('signal/plus 2', 1, 'res.s==[0 1 2 0 0 -1 -2] & res.t==[0 1 2 3 4 5 6]');res=s1+shift(s5,2);unit_test('signal/plus 3', 1, 'res.s==[0 1 2 -1 -2] & res.t==[0 1 2 3 4]');res=shift(s1,1)+s9;unit_test('signal/plus 4', 1, 'res.s==[1 1 2 3 1 1 1 1 1 1] & res.t==0:9');res=rceps(-1*s6);unit_test('signal/rceps', 1, 'res.s==[0 0 0 0] & res.t==[0 1 2 3]');res=s1./2;unit_test('signal/rdivide', 1, 'res.s==[0 0.5 1] & res.t==[0 1 2]');res=1./trim(s1,1,2);unit_test('signal/rdivide', 1, 'res.s==[1 0.5] & res.t==[1 2]');unit_test('signal/real', 1, 'real(s6+i*s6)==s6');% note that validity is at the moment bogus in revfilt% the test is quite bad at the moment...res = revfilt([0 1],1,s6);unit_test('signal/revfilt', 1, 'res.s==[0 0 0 0] & res.t==[0 1 2 3]');res = resample(s6,0.5);unit_test('signal/resample', 1, 'abs(res.s-[0.5 0])<1e-10 & res.t==[0 1]');res = reverse(s1);unit_test('signal/reverse', 1, 'res.s==[2 1 0] & res.t==[0 1 2]');res = scale(s1,-1,1);unit_test('signal/scale', 1, 'res.s==[-1 0 1] & res.t==[0 1 2]');res = set(s1,'s',[0 3 6]);unit_test('signal/set', 1, 'res.s==[0 3 6] & res.t==[0 1 2]');%unit_test('signal/soundsc', 1, 0);res = shift(s1,5);unit_test('signal/shift', 1, 'res.s==[0 1 2] & res.t==[5 6 7]');res = sign(cat(s1,s5));unit_test('signal/sign', 1, 'res.s==[0 1 1 0 -1 -1] & res.t==[0 1 2 3 4 5]');ssa=s1; ssa.s=[2 3 4];unit_test('signal/subsasgn', 1, 'ssa.s==[2 3 4] & ssa.t==[0 1 2]');ssa=s1; ssa.t=[2 3 4];unit_test('signal/subsasgn', 1, 'ssa.s==[0 1 2] & ssa.t==[2 3 4]');ssa=s1; ssa.fs=2;unit_test('signal/subsasgn', 1, 'ssa.s==[0 1 2] & ssa.t==[0 .5 1]');ssa=s6; ssa(2:4)=[5 7 6];unit_test('signal/subsasgn', 1, 'ssa.s==[1 5 7 6] & ssa.t==[0 1 2 3]');ssa=s1; ssa(5)=2;unit_test('signal/subsasgn', 1, 'ssa.s==[0 1 2 0 2] & ssa.t==[0 1 2 3 4]');res=s1(2:3);unit_test('signal/subsref', 1, 'res.s==[1 2] & res.t==[1 2]');unit_test('signal/subsref', 1, 's1.s==[0 1 2] & s1.t==[0 1 2]');unit_test('signal/subsref', 1, 's1.s(1)==0 & s1.t(1)==0');unit_test('signal/subsref', 1, 's1.fs==1');unit_test('signal/subsref', 1, 's1.valid==1');res=ssa(:);unit_test('signal/subsref', 1, 'res.s==[0 1 2 0 2]');unit_test('signal/sum', 1, 'sum(s1)==3');res=taper(s9,2);expect=[0.34549150281253 0.90450849718747 1 1 1 1 1 1 0.90450849718747 0.34549150281253];unit_test('signal/taper', 1, 'abs(res.s-expect)<1e-10');unit_test('signal/times', 1, 's1.*s5==signal([0 -1 -4],1)');res=trim(cat(s1,s5),2,4);unit_test('signal/trim', 1, 'res.s==[2 0 -1] & res.t==[2 3 4]');res=trim(cat(s1,s5),s1);unit_test('signal/trim', 1, 'res.s==[0 1 2] & res.t==[0 1 2]');unit_test('signal/uminus', 1, '-s1==s5');res=valid(filter([0 1],1,s6));unit_test('signal/valid', 1, 'res.s==[1 0 0] & res.t==[1 2 3]');res = win(s9,@hamming);unit_test('signal/win', 1, 'all(res.s-(s9.s.*hamming(10)'')<1e-10)');res = wlsp(s8,4,4);expect = [1 -1.89754230013223 0.00133401877723 ... 1.89543140046593 -0.99919479474180];unit_test('signal/wlsp', 1, 'abs(res-expect)<1e-3');sigwavwrite({scale(s1,-1,65534/65536) scale(s5,-1,65534/65536)},'/tmp/unittest.wav');unit_test('sigwavwrite', 1, '1');res = xcorr(s9,'coeff');[c,lags]=xcorr(s9.s,'coeff');unit_test('signal/xcorr', 1, 'res==signal(c,lags/s9.fs)');% test spectrum classS1=spectrum([1 1 1 1],1);S2=spectrum([i i i i],1);S3=spectrum([1 0.5 0.5 1],1);unit_test('spectrum/spectrum', 1, 'S1.f==[0 0.25 0.5 0.75]');%unit_test('spectrum/abs 1', 1, 'sum(imag(abs(fft(s8))))==0');res=abs(S2);unit_test('spectrum/abs', 1, 'res.s==[1 1 1 1] & res.f==[0 0.25 0.5 0.75]');unit_test('spectrum/angle',1, 'angle(S2)==S1*(pi/2)');unit_test('spectrum/at',1, 'at(S3,0.25)==2');res=db(S1);unit_test('spectrum/db', 1, 'res.s==[0 0 0 0] & res.f==[0 0.25 0.5 0.75]');res=exp(S1);unit_test('spectrum/exp', 1, 'res.s==exp(S1.s)');unit_test('spectrum/half1', 1, 'half1(S1)==S1(1:3)');unit_test('spectrum/half2', 1, 'half2(S1)==S1(4)');res=ifft(S1);unit_test('spectrum/ifft', 1, 'res==s6');unit_test('spectrum/imag', 1, 'imag(S2)==S1');unit_test('spectrum/len', 1, 'len(S1)==4');unit_test('spectrum/log10', 1, 'log10(10*S1)==S1');unit_test('spectrum/log2', 1, 'log2(2*S1)==S1');unit_test('spectrum/max', 1, 'max(S3)==1');unit_test('spectrum/min', 1, 'min(S3)==0.5');res=2*S1;unit_test('spectrum/mtimes', 1, 'res.s==[2 2 2 2] & res.f==[0 0.25 0.5 0.75]');%unit_test('spectrum/plot', 1, 0);unit_test('spectrum/real', 1, 'real(S2)==0*S1');%unit_test('spectrum/semilogx', 1, 0);res=S2./S3;unit_test('spectrum/rdivide', 1, 'res.s==i*[1 2 2 1]');res=S1(2:3);unit_test('spectrum/subsref', 1, 'res.s==[1 1] & res.f==[0.25 0.5]');unit_test('spectrum/times', 1, 'S1.*S2==S2');res=S1+S2;unit_test('spectrum/plus', 1, 'res.s==(1+i)*[1 1 1 1] & res.f==[0 0.25 0.5 0.75]');res=S1-S2;unit_test('spectrum/minus', 1, 'res.s==(1-i)*[1 1 1 1] & res.f==[0 0.25 0.5 0.75]');res=S1.^2;unit_test('spectrum/power', 1, 'res.s==S1.s.^2 & res.f==S1.f');unit_test('spectrum/sum', 1, 'sum(S1)==4');%%%%%% print results%%%unit_results;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -