
#include <stdio.h>
int d_latest_n=0;
int d_latest_m=0;
float d_fftaps[]={1.0,2.0,3.0};
float d_fbtaps[]={1.0,2.0,3.0};
float xv[]={0.0,0.0,0.0, 0.0,0.0,0.0};
float yv[]={0.0,0.0,0.0, 0.0,0.0,0.0};
float do_iir(float input)
{
  float	acc;
  unsigned	i = 0;
  unsigned	n = 3;
  unsigned      m = 3;

  int latest_n = d_latest_n;
  int latest_m = d_latest_m;
  /*printf("starti"); 
  for(int i=0;i<6;i++)
    printf("%i\t",i);
  printf("\n");*/
  /*printf("start ");  
  for(int i=0;i<6;i++)
    printf("%1.0f\t",xv[i]); 
  printf("\n");*/  

  printf("start ");  
  for(int i=0;i<6;i++)
    printf("%1.0f\t",xv[latest_n+i]); 
  printf("\n");  
  //printf("latest_n %i\n",latest_n); 
  acc = d_fftaps[0] * input;
  for (i = 1; i < n; i ++)
    acc += (d_fftaps[i] * xv[latest_n + i]);
  for (i = 1; i < m; i ++)
    acc += (d_fbtaps[i] * yv[latest_m + i]);

  // store the values twice to avoid having to handle wrap-around in the loop
  latest_n--;
  latest_m--;
  if (latest_n < 0)
    latest_n += n;
  if (latest_m < 0)
    latest_m += m;

  yv[latest_m] = acc;
  yv[latest_m+m] = acc;
  xv[latest_n] = input;
  xv[latest_n+n] = input;
  /*printf("endi  "); 
  for(int i=0;i<6;i++)
    printf("%i\t",i);
  printf("\n");*/
  printf("end   ");  
  for(int i=0;i<6;i++)
    printf("%1.0f\t",xv[latest_n+i]); 
  printf("\n");  
  printf("latest_n %i\n\n",latest_n); 
  /*latest_n--;
  latest_m--;
  if (latest_n < 0)
    latest_n += n;
  if (latest_m < 0)
    latest_m += m;*/

  d_latest_m = latest_m;
  d_latest_n = latest_n;
  return  acc;
}
int main()
{
 for(int i=0;i<10;i++)
   do_iir((float)i);

}

