Второй день мучаюсь, не могу до конца понять логики работы функции
Код
void fir_mem16(const float *x, const float *num, float *y, int N, int ord, float *mem, char *stack)
{
   int i,j;
   float xi,yi;

   for (i=0;i<N;i++)
   {
      xi=x[i];
      y[i] = x[i]+mem[0];

      for (j=0;j<ord-1;j++)
      {
         mem[j] = mem[j+1]+num[j]*xi;
      }
      mem[ord-1] = num[ord-1]*xi;
   }
}

Говорят, это FIR в Direct Form 2 transponded. Я никак не могу проследить работу с этим mem.
Смысл, то вроде понятен: умножить входящий сигнал на коефициенты и сложить всё это. И так для каждого отсчёта. Помогите перевести эту фунуцию в более читабельный вид.
т.е., я думаю в DF1. Я пытался, но у меня изза недостатка опыта ничего не выходит.
я думаю, в Direct form 1 будет проще её считать на DSP, c использованием операции MAC...