mayton2019
@mayton2019
Bigdata Engineer

Как программно декодировать 4-QAM сигнал в диапазоне звуковых частот?

Есть pet-project. Что-то вроде модема. Занимаюсь давно. Не спеша. И чисто из интереса к обработке сигналов.
Кодирую бинарный файл и получаю на выходе звуковой файл 4-QAM с несущей в 260 Гц в формате WAV.
Фазы соотв четыре штуки 45 градусов, 225, 315 e.t.c. Амплитуда берется по максимуму для 16 битного звука.
1 канал - моно. Длина импульса модулирующего сигнала ... пока еще не определена. Я буду искать ее
экспериментально чисто по результатам успешного декодирования.

Возникли вопросы с декодером. Как должен работать алгоритм пилот-тона? И как обеспечить синхронизацию
если во время декодирования фаза начнет "уползать" в сторону? Это будет неизбежно если я
файл буду передавать по голосовым каналам (радио, mp3).
  • Вопрос задан
  • 177 просмотров
Решения вопроса 1
Griboks
@Griboks
Как программно декодировать 4-QAM сигнал

QAM4 - можно рассматривать как QPSK, которую в свою очередь можно рассматривать как 2xBPSK, т. е. как два независимых сигнала Cos и Sin одинаковой частоты и амплитуды, но сдвинутых по фазе. Иными словами, решить систему уравнений вида sin+cos=A. В любом случае вы вычисляете точку на созвездии, а затем принимаете решение, какой именно из 4 фиксированных эта точка является.

Как должен работать алгоритм пилот-тона? И как обеспечить синхронизацию
если во время декодирования фаза начнет "уползать" в сторону?

Синхросигнал должен выполнять две функции:
1) Маркировать начало передачи или иным образом синхронизировать такты (фронт волны).
2) Детектировать условия среды передачи. Зная отправленный и имея принятый синхросигнал, можно определить параметры среды и определить корректирующие коэффициенты для дальнейшего приёма. В данном случае, это будет нулевая фаза и амплитуда.

Таким образом синхросигнал должен фиксировать все три параметра синусоид. Далее, принимая сигнал с данными, можно уже декодировать их.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019 Автор вопроса
Bigdata Engineer
QAM4 - можно рассматривать как QPSK, которую в свою очередь можно рассматривать как 2xBPSK, т. е. как два независимых сигнала Cos и Sin одинаковой частоты и амплитуды, но сдвинутых по фазе. Иными словами, решить систему уравнений вида sin+cos=A. В любом случае вы вычисляете точку на созвездии, а затем принимаете решение, какой именно из 4 фиксированных эта точка является.

Да. Я решил умножать измеряемый сигнал скалярно на синусоиду и косинусоиду. Для простоты Это будет
вектор кратный периоду семплов. Причем максимально большой чтоб не делать лишних расчетов.
И максимально маленький чтоб не превышать половину (или меньше) импульс модулирующего.
В результате получим набор звездочек. Они будут прыгать и плавать по комплексной плоскости и дальше
надо будет угадывать что есть что.

1) Маркировать начало передачи или иным образом синхронизировать такты (фронт волны).
2) Детектировать условия среды передачи. Зная отправленный и имея принятый синхросигнал, можно определить параметры среды и определить корректирующие коэффициенты для дальнейшего приёма. В данном случае, это будет нулевая фаза и амплитуда.

Я думал так. Пускай QAM фазы кодируют 00,01,10,11 биты соотвественно. Тогда пилот-тон будет длинной последовательностью (3 секунды) фазы 00 после которой любое изменение будет означать начало передачи.

Если в пилоте фаза 00 сместится с 45 градусов допустим на 130 - мне будет пофиг. Я просто буду считать ее
началом отсчета. Вычту из всех фаз 130. Ф1 = 130 градусов.

Далее. Если звезды будут дрейфовать или поворачиваться по кругу мне придется на ходу подстраивать
эту фазу Ф1. Вот как ее подстраивать я еще не придумал.

UPD: Не туда закинул. Модератор перекинь пожалуйста в комментарии.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы