Page 1 of 1

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

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

Code: Select all

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;	
		}

	}

}

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

Posted: 20 Jul 2016, 11:57
by Firelander
Утром на свежую голову всё-таки нашёл ошибку в коде. Да, пора бросать засиживаться до глубокого вечера. Ладно, наверное у меня ещё будут возникать вопросы по этой теме