[an error occurred while processing this directive]
Пимерно так и делал, работает но уж больно громоздко получается ниже привел код может чего лишнего нагородил?(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено F8 16 января 2006 г. 14:13
В ответ на: Цифр. полосовой фильтр + отправлено argus98 16 января 2006 г. 13:13


void TBzDetector::Update()
{
if(BzTimer)BzTimer--;
if(--BzTimeout == 0)BzCounter = 0;
S16 tmp;
/*читаю данные из АЦП дпнные загружаются в переменную tmp*/
while(ReadCycleBuffer((U16*)&tmp, (TCycleBuffer*)&BzDataBuffer, BZ_BUFFER_SIZE))
{
tmp -=532;
if(tmp > 250)tmp = 250;
if(tmp < -250)tmp = -250;
/*Пропускаю через полосовой фильтр*/
tmp =Filter(tmp, &BzFilter0,14)> >3;

U32 d0 = TBzDetector::d0;
d0++;
TBzDetector::d0 = d0;
/*децимация в 2 раза*/
if((d0 & 0x01) == 0)
{
/*Отбрасываю отриц. значения("выпрямляю")*/
if(tmp < 0)tmp = 0;
/*Пропускаю через НЧ(500Гц) фильтр*/
tmp =Filter(tmp, &BzFilter2, 14)> >6;

/*децимация в 4 раза*/
if((d0 & 0x07) == 0)
{
/*Пропускаю через НЧ(125Гц) фильтр*/
tmp = Filter(tmp,&BzFilter1,14)> >3;
//if((d0 & 0x0F) == 0)
//{

//S-среднее значение амплитуты сигнала после фильтра
S32 S = TBzDetector::S;

if(S > 80)
{
if(BzDetection)//BzDetection-bool переменная = true если сигнал детектирован
{
if(tmp < (S- (S> >2)- 20))
{
BzDetection = false;
}
}
else
{
if(tmp > (S + (S> >2) + 40))
{ //BzTimer - текущее значение периода сигнала в ms
//OldBzTime - прошлое значение периода сигнала в ms
S32 delta = OldBzTime - BzTimer;
delta = delta > 0 ? delta : -delta;
if((BzTimer != 0)&&(BzTimer < (MAX_BZ_TIME - 500))&&(delta < 16))
{
BzTimeout = 1500;//
BzCounter++;//Счетчик коротких гудков
}
else BzCounter = 0;

OldBzTime = BzTimer;
BzTimer = MAX_BZ_TIME;

BzDetection = true;
}
}
}
else{BzDetection = false;};
/*децимация в 8 раза*/
if((d0 & 0x3F) == 0)
{/*Пропускаю через НЧ(15Гц) фильтр*/
tmp = Filter(tmp,&BzFilter3,14)> >6;
/*децимация в 4 раза*/
if((d0 & 0xFF) == 0)
{
/*Пропускаю через НЧ(1Гц) фильтр*/
TBzDetector::S = Filter(tmp,&BzFilter4,14)> >6;//Получаю среднее значение амплитуды
}
}
//}
}
}
}
}


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru