Я пытаюсь декодировать сигнал изображения от отправителя изображения телефона Mitsubishi VisiTel в программе C++. Он закодирован как аналоговый аудиосигнал, модулированный синусоидальной несущей частотой ~ 1764 Гц.
Я читаю звук со входа звуковой карты как 8-битный со знаком на частоте 44,1 кГц, что дает период около 25 отсчетов для перевозчик. Очевидно, что аналоговый сигнал не будет хорошо ложиться на границы выборки, поэтому предположим, что это может сместиться на +/-1 выборку.
Мои первые попытки декодировать сигнал заключались в том, чтобы взять пики сигнала и назначить их как значения пикселей. Это почти сработало, но казалось, что некоторые пиксели «не совпадают по фазе», и изображение в конечном итоге будет искажаться.
В конце концов я получил сигнал, отделив тактовую частоту пикселей от пиков и привязав ее к сэмплам. Мне также приходилось измерять время каждой строки развертки отдельно, так как она каким-то образом не заканчивалась кратным пикселю.
Но этот сигнал был не совсем точным, тёмные области как-то инвертировались.
Изображение с перевернутыми темными областями
В конце концов я понял, что на переходе свет/темнота был разрыв фазы . Это указывало мне на то, что сигнал модуляции проходил через нулевую точку, вызывая разрыв фазы в результирующем сигнале, поскольку он приводит к отрицательному значению несущей, изменяя соотношение пик/минимум на противоположное.
Разрыв в AM-сигнале Хотя я мог бы попытаться изменить конечный автомат для обнаружения этого типа перехода, кажется, что это будет довольно беспорядочно и склонен к ошибкам.
Я продолжаю думать, что должен быть правильный математический способ демодуляции АМ-сигнала, когда модулятор пересекает нулевую точку. Но все примеры, которые я нахожу, кажутся простыми детекторами огибающей на основе пиков. Объяснения детектора продукта, которые я нашел, похоже, рассчитывают на то, что ваша несущая и фаза абсолютно правильны, и я не уверен, что это все еще дает мне что-то для сигналов пересечения нуля.
Каков правильный одобренный стороной способ демодуляции Сигналы AM, где модулятор пересекает ноль?
Как декодировать амплитудную модуляцию, когда сигнал пересекает ноль?
Ответы (2)
Сложный (квадратурный или IQ) детектор продукта — это то, что нужно. Даже если ваша несущая демодуляции просто близка и не точна; небольшая ошибка частоты просто означает, что результат будет иметь смещение постоянного тока, которое можно удалить на более позднем этапе обработки.
Вам нужно будет определить фазу несущей, а затем вы можете использовать детектор продукта. Квадратурный детектор позволил бы вам определить фазу постфактум, но, поскольку вы все равно должны это сделать, вы можете сделать это сначала.
Весьма вероятно, что VisiTel передает какой-то сигнал синхронизации перед изображением, которое использовалось бы для определения фазы несущей и для указания начала передачи изображения на приемник. Вероятно, вы должны использовать это по прямому назначению.