desc:WMW Alpha 0.01

slider1:Tolerance=6<6,12>Tolerance %

in_pin:left input
in_pin:right input
out_pin:left output
out_pin:right output

@init
Ext_Noinit=1;
// dbmax=18
// F=125,400,1250,4000
QI=1;
QO=0.5;

////////////
// BiQuad //
////////////

function BiQuad(dbmax,F,Q,Tolerance) 
Local (A,Ft,w0,Qt,alpha,b0,b1,b2,a0,a1,a2) 

  ( 
  dbgain=dbmax*rand(1)*Tolerance/100*sign(0.5-rand(1));
  A=10^(dbgain/40);
  
  Ft=F*(1+rand(1)*0.25*sign(0.5-rand(1)));
  w0=2*$pi*Ft/srate;
  
  Qt=0.7*(1+rand(1)*Tolerance/100*sign(0.5-rand(1)));
  alpha=sin(w0)/(2*Qt);
  
  b0 =   1 + alpha*A;
  b1 =  -2*cos(w0);
  b2 =   1 - alpha*A;
  a0 =   1 + alpha/A;
  a1 =  -2*cos(w0);
  a2 =   1 - alpha/A;
  
  b0p=b0/a0; 
  b1p=b1/a0;
  b2p=b2/a0;
  a1p=a1/a0;
  a2p=a2/a0;

  );
  


@slider
biquad(18,125,QO,Tolerance);
b0p0=b0p; b1p0=b1p; b2p0=b2p; a1p0=a1p; a2p0=a2p;

biquad(18,125,QO,Tolerance);
b0p1=b0p; b1p1=b1p; b2p1=b2p; a1p1=a1p; a2p1=a2p;

biquad(18,400,QI,Tolerance);

b0p2=b0p; b1p2=b1p; b2p2=b2p; a1p2=a1p; a2p2=a2p;
biquad(18,400,QI,Tolerance);

b0p3=b0p; b1p3=b1p; b2p3=b2p; a1p3=a1p; a2p3=a2p;

biquad(18,1250,QI,Tolerance);
b0p4=b0p; b1p4=b1p; b2p4=b2p; a1p4=a1p; a2p4=a2p;

biquad(18,1250,QI,Tolerance);
b0p5=b0p; b1p5=b1p; b2p5=b2p; a1p5=a1p; a2p5=a2p;

biquad(18,4000,QO,Tolerance);
b0p6=b0p; b1p6=b1p; b2p6=b2p; a1p6=a1p; a2p6=a2p;

biquad(18,4000,QO,Tolerance);
b0p7=b0p; b1p7=b1p; b2p7=b2p; a1p7=a1p; a2p7=a2p;


@block


@sample
in0=spl0;
in1=spl1;

out0 = b0p0*in0 + b1p0*in01 + b2p0*in02 - a1p0*out01 - a2p0*out02;
out1 = b0p1*in1 + b1p1*in11 + b2p1*in12 - a1p1*out11 - a2p1*out12;

in02=in01 ; in01=in0 ;
in12=in11 ; in11=in1 ;

out02=out01 ; out01=in0=out0;
out12=out11 ; out11=in1=out1;

out0 = b0p2*in0 + b1p2*in21 + b2p2*in22 - a1p2*out21 - a2p2*out22;
out1 = b0p3*in1 + b1p3*in31 + b2p3*in32 - a1p3*out31 - a2p3*out32;

in22=in21 ; in21=in0 ;
in32=in31 ; in31=in1 ;

out22=out21 ; out21=in0=out0;
out32=out31 ; out31=in1=out1;

out0 = b0p4*in0 + b1p4*in41 + b2p4*in42 - a1p4*out41 - a2p4*out42;
out1 = b0p5*in1 + b1p5*in51 + b2p5*in52 - a1p5*out51 - a2p5*out52;

in42=in41 ; in41=in0 ;
in52=in51 ; in51=in1 ;

out42=out41 ; out41=in0=out0;
out52=out51 ; out51=in1=out1;

out0 = b0p6*in0 + b1p6*in61 + b2p6*in62 - a1p6*out61 - a2p6*out62;
out1 = b0p7*in1 + b1p7*in71 + b2p7*in72 - a1p7*out71 - a2p7*out72;

in62=in61 ; in61=in0 ;
in72=in71 ; in71=in1 ;

out62=out61 ; out61=in0=out0;
out72=out71 ; out71=in1=out1;

spl0=out0;
spl1=out1;
