[an error occurred while processing this directive]
|
его имп. х-ки не выражается степенью двойки.
Пример:
Для сохранения входных отсчетов используется циркулярный буфер "buffer_lp" длиной 32 байта, а 32 коэффициента имп. х-ки хранятся в массиве "coeffs_lp":
unsigned char low_pass_filter (unsigned char sample)
{
unsigned char i;
unsigned long int out_lp;
out_lp=0;
buffer_lp[offset_input]=sample;
for (i=0;i<32;i++) out_lp=out_lp + (unsigned long int)buffer_lp[(offset_input-i)&0x1f]*coeffs_lp[i];
offset_input=(offset_input+1)&0x1f;
return (out_lp>>12);
}
Если количество коэффициентов выражается степенью двойки, новое смещение в буфере вычисляется очень просто. Например, для буфера из 32 байт:
offset_input=(offset_input+1)&0x1f;
Для, например, 29-байтового буфера такой прием не подходит. Есть ли готовые эффективные решения, подходящие для такого случая ?