JS/TS библиотека для кодирования и декодирования FSK сигнала
Нужно реализовать или существенно доработать существующую библиотеку на JavaScript/TypeScript, которая способна кодировать и декодировать FSK аудиосигнал, пригодный для работы с AX25 протоколом. Эта библиотека должна уметь принимать и передавать такие сигналы через аудиоканал (например, динамик и микрофон браузера), без использования специальных разрешений или дополнительных подключаемых устройств.
Предоплата 40 000 ₽
При идеальном результате могу вернуть до 100% — 40 000 ₽Цель и задачи работы
Цель задачи — разработать, протестировать и подготовить к использованию модуль, реализующий кодирование и декодирование FSK-сигналов, подходящих для AX25-протокола. Эта библиотека станет частью инструментария для связи устройств через звук, без сетевых подключений. Задача включает как техническую реализацию, так и продуманную архитектуру, пригодную для встраивания в более крупный проект.
Основные задачи:
- Провести анализ текущих open-source решений и их ограничений.
- Выделить оптимальные параметры сигнала (частоты, скорость передачи, структура пакета).
- Реализовать или переработать библиотеку под требования AX25 и работы в браузере.
- Обеспечить стабильную синхронизацию и декодирование входящих сигналов.
- Написать тесты и продемонстрировать работу на простом примере.
Содержание работы
Для начала нужно изучить две основные библиотеки:
- modem.js — содержит базовую реализацию FSK, но с ошибками и плохой синхронизацией;
- gibberlink — более музыкальная, но в ней сложно использовать AX25.
Важно понять ограничения этих реализаций и предложить способ их преодоления. Возможно, будет полезно вычленить рабочие фрагменты из обеих библиотек и объединить их с улучшенной логикой обработки сигнала.
Далее предстоит:
- Создать новый репозиторий (или форк одного из указанных) с полноценной структурой проекта.
- Реализовать кодировщик AX25 в виде аудиосигнала (используя Web Audio API).
- Реализовать декодировщик, который способен различать приходящий аудиосигнал и корректно извлекать из него данные.
- Продумать тестовую среду (например, генерация сигнала и одновременное его принятие для отладки).
- Подготовить документацию по API библиотеки.
Всё должно работать в браузере, без специальных разрешений и внешних зависимостей (например, без WebUSB, WebSerial и т.п.).
Результат (его описание) и критерии завершения работы
На выходе должна получиться библиотека, написанная на TypeScript (допустим частичный JS, если необходимо), с открытым исходным кодом, доступная для подключения в любой браузерный проект. Основные функции:
- Генерация FSK-сигнала из строки.
- Воспроизведение FSK-сигнала через динамик.
- Приём аудиосигнала с микрофона.
- Распознавание и декодирование FSK в строку.
- Поддержка AX25 формата или совместимость с ним.
Критерии завершения:
- Работающий пример с передачей и приёмом в пределах одного устройства (замкнутый цикл).
- Поддержка частот и скорости, совместимых с AX25.
- Документация по использованию библиотеки.
- Покрытие базовыми тестами.
- Код в git, с чистыми коммитами и понятной историей.
Бонус: если библиотека покажет стабильную работу при передаче между двумя устройствами (например, двух браузеров на телефонах) — это может считаться выдающимся результатом, что открывает возможность полного возврата оплаты или дополнительного вознаграждения.