Цифровая обработка сигналов

Если вы - начинающий в электронике, то задайте ваш вопрос тут. Расскажите что вы уже сделали чтобы найти ответ на свой вопрос, опишите свои рассуждения.
Firelander
Сообщения: 93

Сообщение Firelander » 19 июл 2016, 23:36

Курю я тут потихонечку ЦОС, в частности пытаюсь сделать CIC decimator. В теории я подкован плохо, стараюсь понять на практике. Готового кода на си не нашёл, накидал максимально в лоб со схемы. Но результаты на выходе получаются странные. Обычный двуполярный синус от -1 до 1 почему-то оказывается полностью сдвинут в положительную область, а амплитуда получается точно обратно пропорциональна частоте. Хотя АЧХ на низких частотах должна быть более-менее горизонтальной, а у меня как будто растет в бесконечность. Вот код, может есть какой-то очевидный косяк, который я в упор не замечаю. Или я что-то не понимаю в теории. Z^-1 это же просто предыдущее значение, там же нет никаких делений?

Код: Выделить всё

void cicDecimation(double *in, double *out, int n)
{
   const int R=8;
   const int N=2;
   int i;
   double acc1=0,acc2=0;
   double cc1=0,cc2=0;
   double iz1=0,iz2=0;
   double cz1=0,cz2=0;
   for(i=0;i<n;i++)
   {
      acc1=in[i]+iz1;
      iz1=acc1;
      acc2=acc1+iz2;
      iz2=acc2;


      if(i%R==0)
      {
         cc1=acc2-cz1;
         cz1=acc2;
         cc2=cc1-cz2;
         cz2=cc2;
         out[i/R]=cc2;   
      }

   }

}
Вложения
cic.png
примеры амплитуд синусов разной частоты
Multirate_Trans_Func_figure1 - копия.PNG
схема
Multirate_Trans_Func_figure1 - копия.PNG (9.92 КБ) 3850 просмотров

Firelander
Сообщения: 93

Сообщение Firelander » 20 июл 2016, 11:57

Утром на свежую голову всё-таки нашёл ошибку в коде. Да, пора бросать засиживаться до глубокого вечера. Ладно, наверное у меня ещё будут возникать вопросы по этой теме

Вернуться в «Для начинающих»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей