diff --git a/matlab/osc/blip/eval_blit.m b/matlab/osc/blip/eval_blit.m index e3aae9e..3ce12df 100755 --- a/matlab/osc/blip/eval_blit.m +++ b/matlab/osc/blip/eval_blit.m @@ -1,24 +1,22 @@ function eval_blit() -sinc_use_lut = 0 +sinc_use_lut = 1 L = 96000; fs = 48000; -fstart = 440; -fend = 440; +fstart = 220; +fend = 880; df = (fend-fstart)/L # for saw -rho = 0.95; +rho = 1.0; nhw = 4096; Hw = kaiser(nhw, 8)'; max_m = fix((fs/fstart/2.0)) + 1 -sinc_table_calc = sinc_use_lut; - -if sinc_table_calc == 1 +if sinc_use_lut == 1 nharm = max_m nsin = 1024; xx = (0:nsin)/nsin - 0.5; @@ -38,6 +36,7 @@ saw = 0.0; tri = 0.0; a = 1; b = 1; + for n = 1:L, if x >= 0.5, @@ -51,21 +50,17 @@ for n = 1:L, nn = (x+0.5)*nsin + 1; ni = fix(nn); nf = nn - ni; - bbi = (bb(m, ni+1) - bb(m, ni))*nf + bb(m, ni); % Fractional delay (linear interpolation) - aai = (aa(ni+1) - aa(ni))*nf + aa(ni); % Fractional delay (linear interpolation) - if (aai ~= 0) - blit = fraq* bbi / aai * Hw(fix((x+0.5)*nhw)+1); - else - blit = fraq; - end + b = (bb(m, ni+1) - bb(m, ni))*nf + bb(m, ni); % Fractional delay (linear interpolation) + a = (aa(ni+1) - aa(ni))*nf + aa(ni); % Fractional delay (linear interpolation) else b = sin(m*x*pi); a = sin(x*pi); - if (a ~= 0) - blit = fraq * b/a * Hw(fix((x+0.5)*nhw)+1); - else - blit = fraq; - end + end + + if (a ~= 0) + blit = fraq * b/a * Hw(fix((x+0.5)*nhw)+1); + else + blit = fraq; end saw = rho*saw + (fraq - blit); @@ -85,8 +80,11 @@ close all figure; plot(1:L, vsaw, 1:L, vblit); grid; -wavwrite(0.5*vtri, fs, 'tri.wav'); -wavwrite(0.5*vsqr, fs, 'sqr.wav'); -wavwrite(0.5*vsaw, fs, 'saw.wav'); +N_UNDC = fs/100; + +a, b = undcc(N_UNDC); +wavwrite(0.5*filter(b, a, vtri), fs, 'tri.wav'); +wavwrite(0.5*filter(b, a, vsqr), fs, 'sqr.wav'); +wavwrite(0.5*filter(b, a, vsaw), fs, 'saw.wav'); wavwrite(0.5*vblit, fs, 'blit.wav');