Как декодировать амплитудную модуляцию, когда сигнал пересекает ноль?

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


person SoftEgg    schedule 30.12.2019    source источник
comment
Обычно вы умножаете свой сигнал на синусоиду с несущей частотой f_c, а затем отфильтровываете полученный сигнал 2f_c — обычно достаточно простого фильтра нижних частот. Для большей точности вы можете умножить на синусоидальную и косинусоидальную несущую, отфильтровать, а затем вычислить квадрат амплитуды сигнала, чтобы вы могли быть фазово-инвариантными. При правильной фильтрации (после умножения сигнала) вам не придется беспокоиться об артефактах пересечения нуля.   -  person nneonneo    schedule 30.12.2019
comment
Кроме того, я настоятельно рекомендую сделать это в такой среде, как GnuRadio, в которой уже есть высококачественные реализации всех соответствующих фильтров, таких как AM-приемники.   -  person nneonneo    schedule 30.12.2019
comment
@nneonneo Похоже, что реализация детектора продукта, которая, как я беспокоился, будет чувствительна к отсутствию точной несущей частоты и фазы ... не так ли? Кроме того, не будет ли простой фильтр нижних частот просто сглаживать некоторые пики и при этом терять отрицательные данные? Это не одноразовая вещь, а то, что требует отдельной программы. Я не могу попросить пользователя перетащить файлы данных в Gnu Radio для интерпретации, поэтому я должен иметь возможность включить их в свой исходный код.   -  person SoftEgg    schedule 30.12.2019
comment
Детектор произведения, использующий как синус, так и косинус, будет устойчив к частотным и фазовым ошибкам. Это более или менее демодулятор I-Q, который выдает только амплитуду. Если вы выполните продукт, вы обнаружите, что частота «несущей» значительно возрастает, и поэтому ее легче сгладить с помощью фильтра нижних частот.   -  person nneonneo    schedule 30.12.2019


Ответы (2)


Сложный (квадратурный или IQ) детектор продукта — это то, что нужно. Даже если ваша несущая демодуляции просто близка и не точна; небольшая ошибка частоты просто означает, что результат будет иметь смещение постоянного тока, которое можно удалить на более позднем этапе обработки.

person hotpaw2    schedule 30.12.2019

Вам нужно будет определить фазу несущей, а затем вы можете использовать детектор продукта. Квадратурный детектор позволил бы вам определить фазу постфактум, но, поскольку вы все равно должны это сделать, вы можете сделать это сначала.

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

person Matt Timmermans    schedule 30.12.2019