Решил опубликовать небольшой отчет о моих экспериметах по теме, может, кому-то будет интересно. Это мой дебют в DSP, поэтому, хотя прочтение Скляра и творит чудеса, надеюсь на помощь зала.
Небольшой обзор:
Теоретическая оценка емкости сжатого GSM канала, рекомендации по субоптимальному декодированию:
http://www.nativitysoftwares.com/downloads...M%20Network.pdfМетод кодирования позицией импульсов:
http://signal.ee.bilkent.edu.tr/defevent/papers/cr1512.pdf Классика от Кондоза (Суррейский университет)
http://www.diva-portal.org/smash/get/diva2.../FULLTEXT01.pdf Швеция, адаптации метода Кондоза для различных кодеков
www.3gpp.org/DynaReport/26268.htm Практическая реализация eCall-модема (Qualcomm)
Адаптация классических модуляций:
www.news.cs.nyu.edu/~jinyang/pub/hermes.pdf DFSK
http://www.esiee.fr/~chmaysst/RadioElektro..._finalpaper.pdf Франция, 4QAM и 4FSK
http://publications.lib.chalmers.se/record...ltext/72428.pdf Шведская дипломная: DPSK vs Syntetic
http://www.mii.lt/informatica/pdf/INFO745.pdf Чехия, PCCD-OFDM-ASK
Использование тональных псевдоречевых символов (Syntetic):
Работы Сапожникова (Автралия) по выбору алфавита методами стохастической оптимизации
http://v3solar.com/wp-content/uploads/2014...ueIEEEpaper.pdfhttp://lib.gen.in/next/MTAuMTAwNy9zMTEyNjU...zhnykov2012.pdfhttp://www.wseas.us/e-library/conferences/...st/33-CISST.pdf Иран, использование 3-х частотных символов
http://www.eurasip.org/Proceedings/Eusipco.../1569925355.pdf Иран, идея с расширением спектра
Кодирование данных в описателях голосовых кодеков:
http://www.emo.org.tr/ekler/acb89c94a3adb43_ek.pdf Турция, использование параметров GSM FR кодека
Основная цель - реализация криптофона. Получилось зафиксировать кодеки (GSM FR, EFR) с помощью АТ-команд GSM модулей Quectel. Поэтому, в отличие от универсальной приставки JackPair (ныне почившей?), кажется более практичным использовать свое железо и в части GSM. Модули позволяют встраивать пользовательский код в ARM чипсета в виде отдельной задачи. Планирую реализовать внутри модем, и подключасться к нему через блютуз модуля. Второе преимущество - исключение асинхронного аналгового аудио интерфейса между GSM и декодером.
После шатаний решил отказаться от Syntetic-методов (хотя они наиболее перспективны для низкобитрейтных кодеков типа AMR475) и попытался скрестить метод Кондоза с классической модуляцией. Результаты очень даже неплохие (лучше предлагаемых классических схем, в т.ч. и Hermes) - BER=10^-5 для GSM_FR/EFR при 1200bps. Другие кодеки: SILK 0.5*10^-2, G729 10^-2, ILBC 2*10^-2
Т.к. планировалось использовать MELPE1200, определил его битрейт как минимально необходимый, и структуру модема подганял под его блоки. Перепробовал множество варинатов модуляций, и убедился, что свойства канала концептульно отличаются от AWGN c вытекающими последствиями: снижение битрейта оптимальнее любых схем кодирования при любом оверхеде. Основным источником ошибок был джиттер фазы за счет аснихронной работы тандема кодеков канала и PCM сигнала, причем при небольших разностях сэмплрейтов (доли герца) иногда складывались очень неблагоприятные соотношения сдвигов, и шли пакеты ошибок длительностью в секунды. Никакой FEC не поможет, учитывая реалтайм-требования к голосовой связи.
Логичным был выбор BPSK сигнала 1333Hz (ровно 3+3 сэмплов на период c максимумами во 2-м и 5-м пульсах, прекрасно для RPE механизма GSM-FR). Другие (4- и 8-арные решетчатые) схемы с витерби и БЧХ давали худшие результаты. Эта схема давала хорошую возможность для фазовой синхронизации, поэтому применил когерентное декодировоание. Почитал Скляра, и навесил адаптивный еквалайзер.
Опционно добавил два варианта блокировки срабатывания VAD: шейпер (по Кондоз) и снижением амлитуды (идея от авторов hermes), оба работают и не добавляют BER/потерю синхро, важно выбрать интервал применения - от 67.5 до 270 mS нормального и измененного сигнала).
Т.о. получилось передать 90 бит в 540 сэмлах. Полезные 81 бит (MELPE1200 фрейм) разбил на 9 символов по 9 бит + бит четности. Интерливил данные: передаю сначала биты 0 всех 9-ти символов, потом биты 1,... в конце биты четности. Используя мягкое декодирование, в каждом символе могу корректировать бит с минимальной метрикой при ошибке четности. Такой простейший FEC позволяет вероятно исправить вспышки ошибок до 9 бит подряд (54 сэмла) в блоке 90 бит, что больше субфрейма кодеков (5 mS, 40 сэмлов) и не кратно ему.
Биты четности также используются для синхронизации "на лету" на границу блока: адаптивный механизм позволяет "ловить" синхронизацию уже на 3-м блоке (200 mS с любого места потока), и удерживать вплоть до 2% разницы между сэмплрейтами модулятора и демодулятора. Никаких стартовых синхро, трейнинг и т.п., особое внимание уделено жесткой синхронизации счетчиков блоков, т.к. они будут использоваться в крипто (CTR режим шифрования).
Тестовая реализация модема выполнена на С и использует аналоговый аудио интерфейс PC. Для обеспечения лучшей синхронизации используется сэмплрейт 48000Hz, и код модема заточен под него. Вариант с 8000Hz дает тот же BER при рассоглавании сємплретов менее 0.5% (что не всегда достижимо на реальных PC, см. блоги по FreeDV
http://freedv.org/tiki-index.phpи SmarthMic
http://www.rowetel.com/blog/?p=3125), еще менее ресурсоемок и будет встроен в GSM-модем Quetel M66 с использованием цифрового аудио, уже синхронного с сэмплированием.
Код собирается gcc на Linux, mingw на Windows (пока не готов вариант с NDK для Android) и использует alsa/wave аудио. Исходники и готовые статически линкованные бинарники (работают практически на любой 32/64 версии ОС) можно посмотреть тут:
http://torfone.org/download/gsmmdm2.zip После более тщательного тестирования выложу на github. Хотелось бы услышать замечания и советы.