Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите разобраться с цифровыми фильтрами
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
sigmaN
Нужно разобраться с 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
С теорией разобрался.
Начал с переписывания 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
Каким компилятором вы пользуетесь? Если например VDSP или CCS то ведь там уже есть реализация фильтров. Не надо ничего самому придумывать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.