Цитата(Pat @ Feb 11 2006, 00:20)

Формулу y[n]=( y[n-1] - (y[n] >> 5) + (abs(x[n]) >> 5) ); до конца не понял, да и речь там идет об определении занятости телефонной линии. Подозреваю, что там должны быть другие константы.
В формуле не понятно вот это (y[n] >> 5) ведь y[n] это то, что мы получаем в данный момент тогда, как этот y[n] можно делить на 32 еще не получив его.
Определение и дешифрацию протокола я вроде как сделал без всяких ЦФ, но получилось громоздко.
Посему прошу помощь клуба.
1 Может, кто объяснит формулу и что делать с (y[n] >> 5)?
Вообще-то это не формула в смысле математики, а оператор присваивания. И y[n] это просто n-ный элемент массива.
Теперь откуда растут ноги у этого оператора.
Возьмём интегрирующую RC-цепь. Обозначим напряжение на её входе в момент времени i буквой X(i), а на выходе Y(i). В момент времени i-1 через резистор течёт ток I = (Y(i-1)-X(i-1))/R, отчего напряжение на конденсаторе за время tau увеличивается примерно на I*tau/C.
Итого:
Y(i) = Y(i-1) + (tau/(R*C))*(Y(i-1)-X(i-1));
Реализация на С, постоянная времени RC-цепочки в 32 раза больше шага дискретизации по времени (tau). Здесь x не сдвигается чтобы не терять младшие биты, а в результате в y сохраняется сдвинутый на 5 разрядов влево выход фильтра (Y(i)).
Код
int RCfilter(int x)
{
static long y=0;
y = y - (y>>5) + x;
return (int)(y >> 5);
}
Собственно никаких массивов как видим не требуется.
Цитата
2 Какие еще есть способы определить (выделить из помехи) 22кГц?
Можно посчитать коэффициенты ряда Фурье для интересующей частоты f0. Т.е. помножить сигнал на синус и косинус и по отдельности просуммировать за время N периодов частоты f0, после чего обе суммы возвести в квадрат и сложить. Получится величина пропорциональная энергии сигнала в полосе частот порядка f0/N с центральной частотой f0.
Russia est omnis divisa in partes octo.