В настоящее время я работаю над проектом, который до сих пор был относительно легким. Основной проект заключается в передаче данных / сообщений через лазеры с использованием аудио преобразования.
В двух словах, процесс в настоящее время таков
- Пользователь вводит сообщение
- Сообщение превращается в двоичный файл
- Для каждого 1 и 0 в двоичном сообщении он воспроизводит соответствующий тон для сигнала, который, в моем случае, 250 Гц для 1 и 450 Гц для 0.
- Исходящий тон отправляется по стереокабелю на аудиопреобразователь, подключенный к лазеру
- Солнечная панель действует как микрофон и записывает входящий "звук" в виде файла
- Он воспроизводит файл и считывает тональные сигналы и пытается согласовать каждые 250 и 450 Гц с 1 или 0 (вот где моя проблема).
До тех пор, пока фактическая обработка звука не будет в порядке, моя текущая проблема заключается в следующем.
Я играю тоны каждый раз по x, на приемном конце он записывается по y времени, y время сокращается сэмплируется много раз и затем анализируется сэмпл за сэмплом, который затем регистрирует каждую частоту. Это неэффективно и неточно. У меня было много проблем, независимо от времени, когда я играю тоны, потому что он часто слышит тональный сигнал дважды или не слышит его вообще, что полностью сбрасывает целые сообщения.
Я пытался сопоставить частоту, с которой он сэмплирует, со временем воспроизведения каждого тона, но если не выровнять соответствующим образом, он не работает. У меня было только несколько успешных тестов на сообщения типа «test» и «hi». Я уже изучил bpsk и fsk, но мне кажется, что я уже делаю что-то подобное, но у меня плохой приемный конец, чтобы все это расшифровать.
Все это написано на Python, и я был бы очень признателен за любые советы, предложения или возможные реализации, которые вы можете предоставить. Также для эмиссии тона я использую pyaudiere
, а для записи я использую pyaudio
.
Спасибо!
-Steve