Задача сейчас: переписать функцию, реализующую direct form 2 transposed в direct form I с максимальной оптимизацией.
Слышал, что в direct form I можно больше использовать MAC и выиграть в производительности.
На данный момент iir функция выглядит так:
Код
#define MAC16_16(c,a,b) ((c)+(a)*(b))
void iir_mem16(const spx_word16_t *x, const spx_coef_t *den, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack)
{
int i,j;
spx_word16_t yi,nyi;
for (i=0;i<N;i++)
{
yi = x[i]+mem[0];
nyi = -yi;
for (j=0;j<ord-1;j++)
{
mem[j] = MAC16_16(mem[j+1],den[j],nyi);
}
mem[ord-1] = den[ord-1]*nyi;
y[i] = yi;
}
}
void iir_mem16(const spx_word16_t *x, const spx_coef_t *den, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack)
{
int i,j;
spx_word16_t yi,nyi;
for (i=0;i<N;i++)
{
yi = x[i]+mem[0];
nyi = -yi;
for (j=0;j<ord-1;j++)
{
mem[j] = MAC16_16(mem[j+1],den[j],nyi);
}
mem[ord-1] = den[ord-1]*nyi;
y[i] = yi;
}
}
Нужна любая информация. Как теория, так и практические советы.