Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
Вариант кодирования
Наиболее подходящим под эти требования я вижу:
1. DTMF – с аппаратным или софтовым декодированием
2. MFSK8 или MFSK16 – с программным формированием и декодированием символов.
Можно вспомнить различные старые протоколы – но опыт применения MFSK радиолюбителями показал его высокую эффективность. (http://www.qsl.net/zl1bpu/MFSK/tech.htm)
Принцип кодирования прост и надежен. Каждый тон имеет свой вес.
Tone Weight Tone Weight
0 0000 8 1100
1 0001 9 1101
2 0011 10 1111
3 0010 11 1110
4 0110 12 1010
5 0111 13 1011
6 0101 14 1001
7 0100 15 1000
Тоны можно выбрать свои, например минимальная частота 1000Гц, максимальная 2000 Гц с шагом 66,6 Гц.
Частоту оцифровки на приемной стороне возьмем, например, 8000 Гц.
Реализация кодирования и декодирования
Вот собственно в чем и проблема. Как кодировать и декодировать данные.
Сформировать синус не должно составить большой проблемы. Можно таблично, можно считать на ходу синус или еще что-то.
Проблема в декодировании.
Для расчета FFT требуется значительное время и обычный МК вряд ли справиться.
Хотелось бы использовать МК типа AVR или MSP430 – имею опыт работы с ними.
Наиболее интересны варианты декодирования:
1. С помощью цифровых узкополосных фильтров, например Герцеля.
2. Корреляционный приемник – умножать на опорные синусы из
таблицы для формирования передаваемых символов.
Я думаю прием можно сделать так:
После оцифровки отфильтровать согласованным фильтром. Далее
Сигнал подать на входы 16 полосовых фильтров. На выходе каждого из них определять средне выпрямленное значение (скользящее среднее) и сравнивать с порогом. При прохождении через максимум фиксировать прием символа.
Также неплохо выполнять цифровое АРУ (или аппаратное – менять входной делитель). Сделать два ФНЧ БИХ фильтра: для медленных и быстрых изменений сигнала: y = k1*y + k2*x