[an error occurred while processing this directive]
Ответ: (+)
(«Телесистемы»: Конференция 'Цифровые сигнальные процессоры (DSP) и их применение')

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

Отправлено SM 31 марта 2004 г. 20:50
В ответ на: Ответ: отправлено st256 31 марта 2004 г. 20:36

квантователь квантователю рознь... Я беру конкретный пример G.723.1 а например в простом GSM'e - так там вообще принцип возбуждения не такой, и сложный векторный квантователь не используется...

Вот он - этот МОНСТР. Причем далеко не весь, а кусочек :)))))


/*-------------------------------------------------------------------
* Search the optimum positions of the four pulses which maximize
* square(correlation) / energy
* The search is performed in four nested loops. At each loop, one
* pulse contribution is added to the correlation and energy.
*
* The fourth loop is entered only if the correlation due to the
* contribution of the first three pulses exceeds the preset
* threshold.
*/

/* Default values */

ip0 = 0;
ip1 = 2;
ip2 = 4;
ip3 = 6;
shif = 0;
psc = (FLOAT)0.0;
alpha = (FLOAT)1.0;
time = max_time + extra;

/* Four loops to search innovation code. */
/* Init. pointers that depend on first loop */

ptr_ri0i0 = rri0i0;
ptr_ri0i1 = rri0i1;
ptr_ri0i2 = rri0i2;
ptr_ri0i3 = rri0i3;

/* first pulse loop */

for (i0=0; i0 < SubFrLen; i0 +=STEP)
{
ps0 = Dn[i0];
ps0a = Dn[i0+1];
alp0 = *ptr_ri0i0++;

/* Init. pointers that depend on second loop */

ptr_ri1i1 = rri1i1;
ptr_ri1i2 = rri1i2;
ptr_ri1i3 = rri1i3;

/* second pulse loop */

for (i1=2; i1 < SubFrLen; i1 +=STEP)
{
ps1 = ps0 + Dn[i1];
ps1a = ps0a + Dn[i1+1];

alp1 = alp0 + *ptr_ri1i1++ + *ptr_ri0i1++;

/* Init. pointers that depend on third loop */

ptr_ri2i2 = rri2i2;
ptr_ri2i3 = rri2i3;

/* third pulse loop */

for (i2 = 4; i2 < SubFrLen2; i2 +=STEP)
{
ps2 = ps1 + Dn[i2];
ps2a = ps1a + Dn[i2+1];

alp2 = alp1 + *ptr_ri2i2++ + *ptr_ri0i2++ + *ptr_ri1i2++;

/* Decide the shift */

shift = 0;
if (ps2a > ps2)
{
shift = 1;
ps2 = ps2a;
}

/* Test threshold */

if (ps2 > thres)
{

/* Init. pointers that depend on 4th loop */

ptr_ri3i3 = rri3i3;

/* 4th pulse loop */

for (i3 = 6; i3 < SubFrLen2; i3 +=STEP)
{
ps3 = ps2 + Dn[i3+shift];
alp3 = alp2 + *ptr_ri3i3++ +
*ptr_ri0i3++ + *ptr_ri1i3++ + *ptr_ri2i3++;

ps3c = ps3 * ps3;
if ((ps3c * alpha) > (psc * alp3))
{
psc = ps3c;
alpha = alp3;
ip0 = i0;
ip1 = i1;
ip2 = i2;
ip3 = i3;
shif = shift;
}
}

time--;

/* Maximum time finish */

if (time <= 0)
goto end_search;
ptr_ri0i3 -= NB_POS;
ptr_ri1i3 -= NB_POS;
}

else
ptr_ri2i3 += NB_POS;
}

ptr_ri0i2 -= NB_POS;
ptr_ri1i3 += NB_POS;
}

ptr_ri0i2 += NB_POS;
ptr_ri0i3 += NB_POS;
}

end_search:

extra = time;


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

Ответы


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

Имя (обязательно): 
Пароль: 
E-mail: 

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

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

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


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru