Esempio n. 1
0
sample_t
simple_mean_filter (parampointer_t parampointer)
{
  longsample_t sum;
  sample_t sample;
  long i;

  advance_current_pos (&parampointer->buffer, parampointer->filterno);

  sum.left = 0;
  sum.right = 0;

  for (i = 0; i <= parampointer->postlength1 + parampointer->prelength1;
       i++)
    {
      sample = get_from_buffer (&parampointer->buffer,
				i - parampointer->postlength1);
      sum.left += sample.left;
      sum.right += sample.right;
    }

  sample.left = sum.left / (parampointer->postlength1 +
			    parampointer->prelength1 + 1);
  sample.right = sum.right / (parampointer->postlength1 +
			      parampointer->prelength1 + 1);

  return sample;
}
Esempio n. 2
0
sample_t
monoize_filter (parampointer_t parampointer)
{
  sample_t sample;
  longsample_t sum;

  advance_current_pos (&parampointer->buffer, parampointer->filterno);

  sample = get_from_buffer (&parampointer->buffer, 0);
  sum.left = (sample.left + sample.right) / 2;
  sample.left = sum.left;
  sample.right = sum.left;

  return sample;
}
Esempio n. 3
0
sample_t
experiment_filter (parampointer_t parampointer)
{
  sample_t sample;
  longsample_t longsample;
/* doublesample_t doublesample; */

  advance_current_pos (&parampointer->buffer, parampointer->filterno);

/* Example: a smoothing filter (lowpass, that is):

   y[t] = { x[t-2] + 5*x[t-1] + 13*x[t] + 5*x[t+1] + x[t+2] } / 25
 */

  /* zero totals */
  longsample.left = 0;
  longsample.right = 0;

  /* compute the weighted sum */
  sample = get_from_buffer (&parampointer->buffer, -2);
  longsample.left += sample.left;
  longsample.right += sample.right;

  sample = get_from_buffer (&parampointer->buffer, -1);
  longsample.left += 5 * sample.left;
  longsample.right += 5 * sample.right;

  sample = get_from_buffer (&parampointer->buffer, 0);
  longsample.left += 13 * sample.left;
  longsample.right += 13 * sample.right;

  sample = get_from_buffer (&parampointer->buffer, 1);
  longsample.left += 5 * sample.left;
  longsample.right += 5 * sample.right;

  sample = get_from_buffer (&parampointer->buffer, 2);
  longsample.left += sample.left;
  longsample.right += sample.right;

  /* devide by the total weight */
  sample.left = longsample.left / 25;
  sample.right = longsample.right / 25;

  /* return the computed sample */
  return sample;
}