Advertisement
Guest User

Untitled

a guest
Mar 11th, 2015
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.72 KB | None | 0 0
  1. static void
  2. run(LV2_Handle instance,
  3.     uint32_t n_samples)
  4. {
  5.   Denoiser* denoiser = (Denoiser*)instance;
  6.  
  7.   const float* const input_left = denoiser->input_left;
  8.   const float* const input_right = denoiser->input_right;
  9.   float* const output_left = denoiser->output_left;
  10.   float* const output_right = denoiser->output_right;
  11.  
  12.   const float sample_rate = denoiser->sample_rate;
  13.  
  14.   float bw = *(denoiser->bandwidth);
  15.   float freq = *(denoiser->center_freq);
  16.   float k; // intermediate variable for calculating coefficients
  17.   float r; // ^
  18.   float a0,a1,a2,b1,b2; // IIR filter coefficients
  19.   float o_lb1,o_lb2, o_rb1, o_rb2; // previous left and right outputs
  20.   float i_lb1, i_lb2, i_rb1, i_rb2; // previous left and right inputs
  21.  
  22.   r = 1 - (3*(bw/sample_rate));
  23.   k = ( 1 - (2*r*cos(2*PI*(freq/sample_rate))) + (r*r) ) / ( 2 - (2*PI*(freq/sample_rate)) );
  24.  
  25.   a0 = k;
  26.   a1 = -2*k*cos(2*PI*(freq/sample_rate));
  27.   a2 = k;
  28.   b1 = 2*r*cos(2*PI*(freq/sample_rate));
  29.   b2 = -1*(r*r);
  30.  
  31.   o_lb1 = denoiser->o_lb1;
  32.   o_lb2 = denoiser->o_lb2;
  33.   o_rb1 = denoiser->o_rb1;
  34.   o_rb2 = denoiser->o_rb2;
  35.  
  36.   i_lb1 = denoiser->i_lb1;
  37.   i_lb2 = denoiser->i_lb2;
  38.   i_rb1 = denoiser->i_rb1;
  39.   i_rb2 = denoiser->i_rb2;
  40.  
  41.   for(int i = 0; i < n_samples ; i ++){
  42.     output_left[i] = (a0*input_left[i]) + (a1*i_lb1) + (a2*i_lb2) + (b1*o_lb1) + (b2*o_lb2);
  43.  
  44.     denoiser->i_lb2 = i_lb1;
  45.     denoiser->i_lb1 = input_left[i];
  46.     denoiser->o_lb2 = o_lb1;
  47.     denoiser->o_lb1 = output_left[i];
  48.  
  49.     output_right[i] = (a0*input_right[i]) + (a1*i_rb1) + (a2*i_rb2) + (b1*o_rb1) + (b2*o_rb2);
  50.  
  51.     denoiser->i_rb2 = i_rb1;
  52.     denoiser->i_rb1 = input_right[i];
  53.     denoiser->o_rb2 = o_rb1;
  54.     denoiser->o_rb1 = output_right[i];
  55.   }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement