Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LDPC-кодирование и синхронизация.
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
altral
Здравствуйте. Я пытаюсь создать в Simulink модель формирования и приема сигнала QAM-4 c АБГШ с применением LDPC-кодирования и синхронизации. Схему синхронизации я позаимствовал отсюда. При сравнительно небольшой фазе несущей все работает, но меня интересует ситуация, когда фаза становится сопоставимой с углами "симметрии" QAM-созвездия, то есть n*pi/2. Такую фазу становится невозможно обнаружить, и декодирование происходит с ошибками. Я пытался добавить после LDPC-кодера дифференциальный кодер, вычисляющий бегущую сумму дибитов, а на приеме перед LDPC-декодером - дифференциальный декодер, вычитающий из каждого дибита предыдущий. Но возникли две дополнительные проблемы:
1. Декодер убирает "лишнюю" фазу, но при этом невозможно узнать ее значение.
2. Декодер работает с битами, а LDPC-декодеру нужны значения правдоподобий.
Как можно решить эти проблемы? Уместно ли вообще дифференциальное кодирование в такой модели, или есть альтернативный подход?
Serg76
Фаза должна быть синхронизирована в демодуляторе до ближайшего крата, а неоднозначность можно убрать непосредственно в декодере либо по совместной схеме - декодер LDPC «толкает» демодулятор пока тот не залочится с точностью до фазы.
petrov
Цитата(altral @ Mar 21 2018, 11:45) *
Как можно решить эти проблемы? Уместно ли вообще дифференциальное кодирование в такой модели, или есть альтернативный подход?


Передавайте известную последовательность и по ней устраняйте фазовую неоднозначность.
altral
Цитата
Фаза должна быть синхронизирована в демодуляторе до ближайшего крата, а неоднозначность можно убрать непосредственно в декодере либо по совместной схеме - декодер LDPC «толкает» демодулятор пока тот не залочится с точностью до фазы.

Конечно, должна, и она синхронизируется. А как убирать неоднозначность в декодере? У меня возникает лишь два варианта: либо перебором, т. е. последовательно поворачивать восстановленную последовательность символов на pi/2, pi, 3*pi/2, 2*pi, и после декодирования смотреть, в каком случае наименьшее количество ошибок; либо ввести "служебный" символ в каждом фрейме, заранее известный приемной стороне, и по нему определять фазу неопределенности.

Цитата
Передавайте известную последовательность и по ней устраняйте фазовую неоднозначность.

Последовательность и так передается - в кодированном и модулированном виде.
petrov
Цитата(altral @ Mar 22 2018, 09:01) *
либо ввести "служебный" символ в каждом фрейме, заранее известный приемной стороне, и по нему определять фазу неопределенности.


Только не символ, а последовательность символов с хорошей АКФ, согласованным фильтром с пороговым устройством ищете её на приёме, смотрите в какой квадрант максимум попадает.
Serg76
Цитата(altral @ Mar 22 2018, 09:01) *
Конечно, должна, и она синхронизируется. А как убирать неоднозначность в декодере? У меня возникает лишь два варианта: либо перебором, т. е. последовательно поворачивать восстановленную последовательность символов на pi/2, pi, 3*pi/2, 2*pi, и после декодирования смотреть, в каком случае наименьшее количество ошибок; либо ввести "служебный" символ в каждом фрейме, заранее известный приемной стороне, и по нему определять фазу неопределенности.

По первому варианту так и поступают - можно крутить демодулированную последовательность, если нет обратной связи с демодулятором, либо по уровню ошибки с выхода декодера «толкать» дем-ор, если есть ОС. По второму варианту ответилpetrov
altral
Цитата(petrov @ Mar 22 2018, 09:31) *
Только не символ, а последовательность символов с хорошей АКФ, согласованным фильтром с пороговым устройством ищете её на приёме, смотрите в какой квадрант максимум попадает.

Попробую конкретизировать: входной сигнал проходит через последовательность "умножение на опорную несущую -> согласованный фильтр -> блок совместной синхронизации", на выходе которой получается разброс точек-символов комплексной плоскости. Мы берем "опорную" последовательность символов, и "прикладывая" ее к символам в пределах каждого фрейма, находим последовательность, которая в пределах шумовой погрешности отличается от "опорной" лишь на фазовый множитель, и по нему находим фазу. Правильно ли я все написал?
petrov
Цитата(altral @ Mar 23 2018, 10:12) *
Попробую конкретизировать: входной сигнал проходит через последовательность "умножение на опорную несущую -> согласованный фильтр -> блок совместной синхронизации", на выходе которой получается разброс точек-символов комплексной плоскости. Мы берем "опорную" последовательность символов, и "прикладывая" ее к символам в пределах каждого фрейма, находим последовательность, которая в пределах шумовой погрешности отличается от "опорной" лишь на фазовый множитель, и по нему находим фазу. Правильно ли я все написал?


А как вы находите границы блоков вашего LDPC кода?
altral
Цитата(petrov @ Mar 23 2018, 08:03) *
А как вы находите границы блоков вашего LDPC кода?

Возможно, это упрощение, но предполагается, что сигнал приходит на прием с начала первого блока, которое запаздывает на величину групповой задержки (она известна, так как известен формирующий фильтр) и задержки по такту (которая находится с помощью синхронизации). Складывая удвоенное количество символов групповой задержки (с учетом согласованного фильтра) и задержку в 1-2 символа, вносимую в процессе синхронизации, получаем величину, на которую начало блока отстоит от начала сигнала.
petrov
Цитата(altral @ Mar 23 2018, 13:33) *
Возможно, это упрощение, но предполагается, что сигнал приходит на прием с начала первого блока, которое запаздывает на величину групповой задержки (она известна, так как известен формирующий фильтр) и задержки по такту (которая находится с помощью синхронизации). Складывая удвоенное количество символов групповой задержки (с учетом согласованного фильтра) и задержку в 1-2 символа, вносимую в процессе синхронизации, получаем величину, на которую начало блока отстоит от начала сигнала.


Как вы на приёме точно, надёжно определяете начало сигнала? На пределе Шеннона, где LDPC позволяют работать.
altral
Цитата(petrov @ Mar 23 2018, 12:39) *
Как вы на приёме точно, надёжно определяете начало сигнала? На пределе Шеннона, где LDPC позволяют работать.

Начало приема совпадает с началом моделирования в Simulink. А как нужно?
petrov
Цитата(altral @ Mar 26 2018, 10:35) *
Начало приема совпадает с началом моделирования в Simulink. А как нужно?


Если так, то и фазу можно всегда правильную моделировать без неоднозначности. А если как в реальности, то никакого начала моделирования на приёме не известно.
altral
Цитата(petrov @ Mar 26 2018, 07:59) *
Если так, то и фазу можно всегда правильную моделировать без неоднозначности. А если как в реальности, то никакого начала моделирования на приёме не известно.

Как должно происходить моделирование в Simulnk, чтобы было "как в реальности"? И как в этом случае проводить прием сигнала, синхронизировать, разбивать на блоки?
petrov
Цитата(altral @ Mar 26 2018, 15:18) *
Как должно происходить моделирование в Simulnk, чтобы было "как в реальности"? И как в этом случае проводить прием сигнала, синхронизировать, разбивать на блоки?


согласованный фильтр -> модуль -> пороговое устройство -> максимум

Последовательности с хорошей АКФ(коды Баркера не включены):
M PSL Sample Code
6 2 110100
8 2 10010111
9 2 011010111
10 2 0101100111
12 2 100101110111
14 2 01010010000011
15 2 001100000101011
16 2 0110100001110111
17 2 00111011101001011
18 2 011001000011110101
19 2 1011011101110001111
20 2 01010001100000011011
21 2 101101011101110000011
22 3 0011100110110101011111
23 3 01110001111110101001001
24 3 011001001010111111100011
25 2 1001001010100000011100111
26 3 10001110000000101011011001
27 3 010010110111011101110000111
28 2 1000111100010001000100101101
29 3 10110010010101000000011100111
30 3 100011000101010010010000001111
31 3 0101010010010011000110000001111
32 3 00000001111001011010101011001100
33 3 011001100101010100101100001111111
34 3 1100110011111111100001101001010101
35 3 00000000111100101101010101100110011
36 3 001100110001010010100000100000111110
37 3 0010101110100001001110110111110011110
38 3 00000000111100001101001010101001100110
39 3 001001100110101000010111110111100111100
40 3 0010001000100011110111000011101001011010
41 3 00011100011101010010100100000001101100100
42 3 000100010001000111101110000111010010110100
43 3 0000000010110110010101011001100111000011100
44 3 00001111111011001110110010110010101011010111
45 3 000101010111100001100110001101101101111110110
46 3 0000111100000011001111011110110110010101010110
47 3 00001101001101001111110100001010001100110001000
48 3 000101010110101101100001111001100100111111110011
49 4 0000100101010101111101100011110011110010001101111
50 4 00001001011000011000111010101111000010011001101111
51 3 000111000111111100010001100100010010101001001001011
52 4 0000100101000101101011100000111100110010010001101111
53 4 00001001100101010101001111111100011010010110001101111
54 4 000010011001101010001010000001010010110011110001101111
55 4 0000100110000100110101010100001111000110010010001101111
56 4 00001001100110111010101011001011010001111011110001101111
57 4 000010010011010001010100011101101011000100011110001101111
58 4 0000100011110011100101010001011100100111101101011001101111
59 4 00001001001110100111000000100101000101000011101110001101111
60 4 000010101011100011011111000011001001011100110010010100101111
61 4 0000001011011010001001100010011000111100111101010001101010000
62 4 00000000101101011001100110001101001100101100000111010001010000
63 4 000010011001111010110100010010001110001011001010111110001101111
64 4 0100000010010000101000101110100111100110001100100011011111000010
65 4 00000001011011100000010110000110110011011110011100101010001010000
66 4 000000011010011011010001010100011100111001111100010010101101000010
67 4 0100000010100000110110010011010101100011110100100001001110011000010
68 4 00000000100111100100100111100011011001100010101010001110101001010000
69 4 000100110111111011011000010011010100000111010000100011000111000010101
altral
Цитата(petrov @ Mar 26 2018, 14:26) *
согласованный фильтр -> модуль -> пороговое устройство -> максимум

Последовательности с хорошей АКФ(коды Баркера не включены):
M PSL Sample Code

Что собой представляют модуль, пороговое устройство, максимум, что такое M, PSL, Sample Code? Разъясните, если не трудно, или хотя бы укажите источники, где все это есть.
petrov
Цитата(altral @ Mar 27 2018, 11:04) *
Что собой представляют модуль, пороговое устройство, максимум, что такое M, PSL, Sample Code? Разъясните, если не трудно, или хотя бы укажите источники, где все это есть.


Модуль - модуль комплексного числа.
Пороговое устройство - > порога, обнаруживаем последовательность.
Максисмум - положение максимума модуля на выходе согласованного фильтра - наилучшая оценка времени прихода последовательности.
М - длина.
PSL - максимальный уровень боковых лепестков АКФ.
Sample Code - собственно последовательность с хорошей АКФ.
https://en.wikipedia.org/wiki/Barker_code
altral
Цитата(petrov @ Mar 27 2018, 08:41) *
Модуль - модуль комплексного числа.
Пороговое устройство - > порога, обнаруживаем последовательность.
Максисмум - положение максимума модуля на выходе согласованного фильтра - наилучшая оценка времени прихода последовательности.
М - длина.
PSL - максимальный уровень боковых лепестков АКФ.
Sample Code - собственно последовательность с хорошей АКФ.

Я попытался представить эту идею в виде условной блок-схемы (на рисунке). Для сигнала с разбросом точек считается корреляция (Correlation function) с заданной последовательностью, преобразованной из битовой формы в модулированную, затем берется модуль, находится максимум. Допустимо ли такое представление? Как должно выглядеть пороговое устройство, как оно функционирует при наличии шума?

petrov
Цитата(altral @ Mar 30 2018, 12:04) *
Я попытался представить эту идею в виде условной блок-схемы (на рисунке).


Какой результат моделирования? Пока отбросьте лишнее. Просто посылаем одну отдельную BPSK поледовательность баркера -> согласованный фильтр с последовательностью -> модуль -> смотрим сигнал.
altral
Цитата(petrov @ Mar 30 2018, 11:10) *
Какой результат моделирования? Пока отбросьте лишнее. Просто посылаем одну отдельную BPSK поледовательность баркера -> согласованный фильтр с последовательностью -> модуль -> смотрим сигнал.

Упростил модель (Barker.zip), результат моделирования на рисунке. Все так?
Нажмите для просмотра прикрепленного файла

petrov
Цитата(altral @ Mar 30 2018, 15:33) *
Упростил модель (Barker.zip), результат моделирования на рисунке. Все так?


Теперь с корнями из приподнятых косинусов, скажем 8 отсчётов на символ.
altral
Цитата(petrov @ Mar 30 2018, 13:12) *
Теперь с корнями из приподнятых косинусов, скажем 8 отсчётов на символ.

Нажмите для просмотра прикрепленного файла



petrov
Вот по превышению какого-то уровня на выходе модуля определяем наличие известной последовательности, вычисляя положение максимума определяем время прихода, вычисляя в максимуме аргумент находим фазу, на которую повёрнуто созвездие. При наличии символьной и фазовой синхронизаций до этого, всё очевидным образом упрощается.
dcs
Цитата(petrov @ Apr 2 2018, 15:42) *
Вот по превышению какого-то уровня на выходе модуля определяем наличие известной последовательности


а где можно почитать как этот порог задавать (вычислять) ?

-спасибо
petrov
Цитата(dcs @ Apr 3 2018, 09:47) *
а где можно почитать как этот порог задавать (вычислять) ?


В книгах по радиолокации, статистической радиотехники. Обнаружение сигналов, критерий Неймана-Пирсона, вероятность правильного обнаружения, вероятность ложной тревоги.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.