Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как лучше декодировать протокол DiSEqC.
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
Pat
Уважаемые, есть протокол DiSEqC, которым управляют оборудованием спутникового телевиденья.
Физический протокол показан на рисунке.
Нажмите для просмотра прикрепленного файла
Частота импульсов 22кГц.
Вот здесь я нашел прекрасную идею, как это реализовать в железе.
http://www.telesys.ru/wwwboards/mcontrol/3...es/195221.shtml
ЦИТИРУЮ:
>Если еще проще, то CAPTURE логикой измеряют длительность импульсов после >компаратора и фильтруют еще более простым фильтром типа
>y[n]=( y[n-1] - (y[n] >> 5) + (abs(x[n]) >> 5) );
>Работает тоже хорошо, проверено.

Через транзисторный ключ я подал сигнал на компаратор в ATmega16. По событию от компаратора делаю захват таймера1.

Формулу y[n]=( y[n-1] - (y[n] >> 5) + (abs(x[n]) >> 5) ); до конца не понял, да и речь там идет об определении занятости телефонной линии. Подозреваю, что там должны быть другие константы.
В формуле не понятно вот это (y[n] >> 5) ведь y[n] это то, что мы получаем в данный момент тогда, как этот y[n] можно делить на 32 еще не получив его.
Определение и дешифрацию протокола я вроде как сделал без всяких ЦФ, но получилось громоздко.
Посему прошу помощь клуба.
1 Может, кто объяснит формулу и что делать с (y[n] >> 5)?
2 Какие еще есть способы определить (выделить из помехи) 22кГц?
SSerge
Цитата(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.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.