Передача аудио через Python через лазеры - PullRequest
5 голосов
/ 30 сентября 2011

В настоящее время я работаю над проектом, который до сих пор был относительно легким. Основной проект заключается в передаче данных / сообщений через лазеры с использованием аудио преобразования. В двух словах, процесс в настоящее время таков

  1. Пользователь вводит сообщение
  2. Сообщение превращается в двоичный файл
  3. Для каждого 1 и 0 в двоичном сообщении он воспроизводит соответствующий тон для сигнала, который, в моем случае, 250 Гц для 1 и 450 Гц для 0.
  4. Исходящий тон отправляется по стереокабелю на аудиопреобразователь, подключенный к лазеру
  5. Солнечная панель действует как микрофон и записывает входящий "звук" в виде файла
  6. Он воспроизводит файл и считывает тональные сигналы и пытается согласовать каждые 250 и 450 Гц с 1 или 0 (вот где моя проблема).

До тех пор, пока фактическая обработка звука не будет в порядке, моя текущая проблема заключается в следующем.

Я играю тоны каждый раз по x, на приемном конце он записывается по y времени, y время сокращается сэмплируется много раз и затем анализируется сэмпл за сэмплом, который затем регистрирует каждую частоту. Это неэффективно и неточно. У меня было много проблем, независимо от времени, когда я играю тоны, потому что он часто слышит тональный сигнал дважды или не слышит его вообще, что полностью сбрасывает целые сообщения.
Я пытался сопоставить частоту, с которой он сэмплирует, со временем воспроизведения каждого тона, но если не выровнять соответствующим образом, он не работает. У меня было только несколько успешных тестов на сообщения типа «test» и «hi». Я уже изучил bpsk и fsk, но мне кажется, что я уже делаю что-то подобное, но у меня плохой приемный конец, чтобы все это расшифровать.

Все это написано на Python, и я был бы очень признателен за любые советы, предложения или возможные реализации, которые вы можете предоставить. Также для эмиссии тона я использую pyaudiere, а для записи я использую pyaudio.

Спасибо!

-Steve

Ответы [ 4 ]

2 голосов
/ 30 сентября 2011

Звучит как аппаратная проблема.Я почти уверен, что - это работа для ФСК.Большинство современных систем FSK-типа используют ФАПЧ (микросхемы фазовой автоподстройки частоты) для фактического обнаружения.Частотно-вольтные или частотно-токовые цепи также могут использоваться.

Я видел практические схемы в десятках книг для любителей, в паспортах и ​​на веб-сайтах.Вот некоторые из них:

Схема для демодуляции сигнала FSK

Учебное пособие по ФАПЧ

Я надеюсь, что это не простоеще одно путешествие по кроличьей норе - удачи!

1 голос
/ 03 октября 2011

Я бы работал с принимающей стороной, используя два КИХ-фильтра, по одному для каждой частоты, которую вы пытаетесь обнаружить.Коэффициенты фильтров - это просто копия искомого сигнала (т. Е. 250 Гц в одном случае и 450 Гц в другом).Вам нужно будет посмотреть на выход вашей солнечной панели, чтобы решить, является ли это прямоугольной волной, синусоидальной волной или чем-то промежуточным.Длина фильтра соответствует длительности тона (т. Е. «Х» в вашем вопросе).Сэмплы подаются в оба фильтра параллельно.

Выход каждого фильтра должен быть выпрямлен (т.е. принять абсолютное значение) и сглажен.Сглаживание может быть выполнено с использованием простого скользящего среднего за период около половины x (вы можете поэкспериментировать, чтобы найти наилучшее значение).Затем, если вы сравниваете сглаженные значения (то есть a> b или b> a), вы должны получить поток из 0 и 1.

Что нужно знать: это предполагает, что канал ведет себя одинаково для обоихчастоты (то есть вы получаете аналогичные SNR и затухание).Возможно, вам придется немного подстроить свои частоты, потому что 450 Гц довольно близка к 500 Гц, а это гармоника 250 Гц.

1 голос
/ 30 сентября 2011

Проводили ли вы проверку работоспособности, прослушивая звуковые файлы (и передавая, и получая), или просматривая осциллограммы в звуковом редакторе, чтобы определить, звучат ли они приблизительно или выглядят одинаково?Таким образом, вы можете сузить проблему, чтобы сопоставить вызванные ошибки с анализом программного обеспечения.

Вашему программному обеспечению для декодирования / демодуляции потребуется метод синхронизации, который может определять и отслеживать времена, когда аудиосигнал изменяется от одной частоты модуляции.к другому, тогда вам нужно будет отдельно проверить этот метод синхронизации на наличие ошибок смещения.

0 голосов
/ 30 сентября 2011

Используйте представление сигнала самосинхронизации, такое как Манчестерский код .Таким образом, ваше время должно быть «достаточно хорошим», и вы в первую очередь беспокоитесь об обнаружении изменения, в данном случае, частоты.В связанной статье высокий и низкий уровни относятся к напряжению, но нет причин, по которым они должны это делать.Вы также можете легко использовать высокую и низкую частоту или включить / выключить один лазер.

...