Я не знаю, как они это делают, но вот как я это делаю:
Если это строка, то убедитесь, что она не длинная (чем длиннее, тем выше вероятность ошибки).Предположим, что мы работаем с важной частью кода ASCII, а именно с номером символа 127, тогда все, что вам нужно, это 7 бит на символ.Преобразуйте этот символ в биты и смодулируйте эти биты, используя QFSK (есть несколько вариантов на выбор, основанные на сдвиге частоты оказались самыми надежными из всех, что я пробовал из обычных ... Я создал свою собственную модуляциюсхема для этого варианта использования).Выберите несущие частоты как 18,5,19,19,5 и 20 кГц (если вы хотите быть математически строгим в своем дизайне, выберите значения частоты, которые гарантируют вам как ортогональность, так и непрерывность фазы при переходах символов, если вы не можете, хороший обходной путьчтобы избежать резких переходов символов, нужно умножить ваши символы на окно одинакового размера, например гауссовский или бартлет).По моему опыту, вы можете перемещать эти значения в диапазоне от 17,5 до 20,5 кГц (если вы снизитесь, это начнет беспокоить людей, использующих ваше приложение, если вы поднимитесь выше, частотная характеристика микрофона среднего типа ослабит вашу передачу и вызовет нежелательные ошибки).
На стороне приемника реализуйте приемник с корреляцией или согласованным фильтром (приемник FFT также работает, особенно с нулевым, но он может быть немного медленнее, я бы не рекомендовал Goertzel, потому что из-за сдвига частотычтобы эффект Доплера или нелинейность динамика-микрофона могли повлиять на ваш прием).Как только вы получите поток битов, сделайте из них символы, и вы восстановите свое сообщение
. Если вы сталкиваетесь с слишком большим количеством ошибок вещания, попробуйте выбрать большее количество выборок на символ или полосовую фильтрацию каждого значения частоты, прежде чем даватьих к демодулятору, используя код с исправлением ошибок, такой как BCH или Reed Solomon, иногда единственный способ обеспечить безошибочную связь.
Одна тема, о которой все всегда забывают говорить, это синхронизация (узнать на приемникесторона, когда передача началась), вы должны проявить творческий подход и провести множество тестов с большим количеством телефонов, прежде чем сможете получить фактический порог обнаружения, который работает на всех, обратите внимание, что это также может зависеть от расстояния
Если вы не знакомы с этими предметами, я бы порекомендовал пару замечательных книг:
Техники цифровой модуляции от Fuqin Xiong
ЦИФРОВЫЕ СВЯЗИ Основы и приложения от BERNARD SKLAR
Цифровая связь от Джона Г. Проакиса