sigmaN 0 1 августа, 2008 Опубликовано 1 августа, 2008 · Жалоба Нужно разобраться с FIR IIR фильтрами. Помогите литературой/советами. Задача сейчас: переписать функцию, реализующую 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; } } Нужна любая информация. Как теория, так и практические советы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 2 августа, 2008 Опубликовано 2 августа, 2008 · Жалоба С теорией разобрался. Начал с переписывания FIR фильтра 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, потому что for (i=1;i<N;i++) { y[i]=0; for (j=0;j<ord;j++) { if(i-j>=0) y[i]+=num[j]*x[i-j]; } } не работает. Может быть я чего-то не понял. Но вроди как это и есть FIR. Т.е. я смотрел на формулу и писал... Может быть кто-то подскажет в чём дело? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 3 августа, 2008 Опубликовано 3 августа, 2008 · Жалоба Каким компилятором вы пользуетесь? Если например VDSP или CCS то ведь там уже есть реализация фильтров. Не надо ничего самому придумывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться