[an error occurred while processing this directive]
|
Програмка тут не причем, я ее собственно и не смотрел, а просто взал значения из приведеных вами таблиц. Для метода, коим вы делаете кореляцию, эталонные таблицы синуса и косинуса расчитаны неверно.
А оптимальную частоту следует выбираеть исходя из возможностей контроллера и отношения сигнал/шум на входе. Нужно считать, или погонять модель в MatLab-е.
А для начала попробуйте хотя бы 16 отсчетов на период.
Ну и пример чего то похожего, приметительно к радиоканалу.
// - timer 2 interrupt -----------------------------------
void Timer2_ISR (void) interrupt 5 using 1
{
unsigned char comp,temp_w;
unsigned int temp_i;
comp = (CPT0CN&0x40)?0xf0:0; // samples
TF2H = 0; // clear Timer2 interrupt flag
if (m_TonesDeCode) // 146 Hz tone decode route
{
// tabble_scr means 0 to 256. 8 periodes of a ones period 146 Hz tone frequency
// start value sinx = 0x10; cosx = 0x18;
if (!(((unsigned char)sinx^comp)&0x10)) ++sin_count;
if (!(((unsigned char)cosx^comp)&0x10)) ++cos_count;
++sinx; ++cosx; ++tabble_scr;
if (!tabble_scr)
{
f_EventTimer2 = On;
temp_i = ((unsigned int)(sin_count*sin_count+cos_count*cos_count));
if (temp_i>0x031f) TRX_temp = 1;
else TRX_temp = 0;
}в секции main инициализация всякий раз, когда нужно ловить эту частоту.
//--------------------------------------------------
sinx = 0x10; cosx = 0x18;
sin_count=0; cos_count=0;
m_TonesDeCode = On; tabble_scr = 0;
timer_val = (unsigned int)(SYSCLK/TONEsample +12);
//--------------------------------------------------
E-mail: info@telesys.ru