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

Если вы - начинающий в электронике, то задайте ваш вопрос тут. Расскажите что вы уже сделали чтобы найти ответ на свой вопрос, опишите свои рассуждения.
Post Reply
Firelander
Posts: 93
Joined: 15 Jul 2015, 19:53

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

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

	}

}
Attachments
примеры амплитуд синусов разной частоты
примеры амплитуд синусов разной частоты
схема
схема
Multirate_Trans_Func_figure1 - копия.PNG (9.92 KiB) Viewed 5278 times
Firelander
Posts: 93
Joined: 15 Jul 2015, 19:53

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

Post by Firelander »

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