Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: bit log-likelihood ratio
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
sergvks
На входе имеется DQPSK сигнал, как правильно посчитать log-likelihood ratio для каждого бита в символе ?
alex_os
Цитата(sergvks @ Jul 15 2008, 10:24) *
На входе имеется DQPSK сигнал, как правильно посчитать log-likelihood ratio для каждого бита в символе ?

Не знаю что такое DQPSK, для QPSK с созвездием вида
00 01

10 11

llr битов кажется пропорционален вещественной (мнимой) части принятого символа.
sergvks
Цитата(alex_os @ Jul 15 2008, 14:20) *
Не знаю что такое DQPSK


Имеется ввиду pi/4 dqpsk.

В случае BPSK если не ошибаюсь

для Binary Symmetric Channel (BSC):
lratio = bsc_data==1 ? (1-error_prob) / error_prob : error_prob / (1-error_prob);

для Additive White Gaussian Noise (AWGN) :
lratio = exp(2*awn_data/(NoiseDev*NoiseDev));

А вот как быть с pi/4 dqpsk и с реальным сигналом, когда заранее при приёме символа неизвестна ни вероятность ошибки, ни уровень шума в канале не совсем понятно.

ЗЫ
В более общем случае нужна функция, которая по точкам на комплексной плоскости будет вычислять LLR для отдельных битов КАМ-созвездия.
alex_os
Цитата(sergvks @ Jul 15 2008, 22:05) *
для Additive White Gaussian Noise (AWGN) :
lratio = exp(2*awn_data/(NoiseDev*NoiseDev));

Похоже тут exp лишняя. Для BPSK, если мы приняли символ y, llr есть отношение условных вероятностей:
Код

          llr = ln{ P(bit==1| y) /  P(bit==0| y) } = ln{ p(y|bit==1) / p(y|bit==0) } = 2*y/NoiseDisp  
          где
          p(y|bit==1) = exp(- (y - 1)^2/(2*NoiseDisp) ) - условная плотность вероятности, т.е.
          распределение   y при условии что была передана 1 (подразумевается, что при отсутствии
          шума  при     передаче бита '1' мы видим y=1 при передаче,  при '0' y = -1   )
  
           NoiseDisp - дисперсия шума.
          
            P(bit==1| y) =  P(bit==1)*p(y|bit==0) / P(y) - известная формула Байеса.


Цитата(sergvks @ Jul 15 2008, 22:05) *
А вот как быть с pi/4 dqpsk и с реальным сигналом, когда заранее при приёме символа неизвестна ни вероятность ошибки, ни уровень шума в канале не совсем понятно.



из формулы выше видно что llr пропорционален сигналу на выходе согласованного фильтра и обратно пропорционален отношению сигнал \шум (snr), здесь подразумевается что мощность сигнала = 1. Т.е
snr это общий масштабный множитель который ни на что не влияет. В практических приложениях важно знать какой бит был передан (т.е знак llr) а не вероятности нуля или единицы. Кормите этими
llr например декодер витерби или там max-log-map декодер внутри которых llr просто суммируются, т.е.
snr можно вынести за скобки smile.gif. В dqpsk меня смущает букофка d которая часто обозначает дифференциальное кодирование, можно конечно вывести формулу для llr qpsk c дифф кодированием, и llr будет зависеть еще от предидущего принятого символа, но ИМХО практической ценности это не
представляет..

Цитата(sergvks @ Jul 15 2008, 22:05) *
В более общем случае нужна функция, которая по точкам на комплексной плоскости будет вычислять LLR для отдельных битов КАМ-созвездия.

Для кам точно выражение для llr будет весьма громоздкое, и от snr так легко отделаться не удастся,
в некотором приближении для кам можно считать
llr = abs(y - C0)^2 - abs(y-C1)^2,
C0 - ближайшая точка созвездия где нужный бит=0,
C1 - ближайшая точка созвездия где нужный бит=1

зы где-то у меня валяется кусок классной книжки от Hanzo про FEc, попозже поищу и выложу на фтп.
petrov
Цитата(alex_os @ Jul 16 2008, 10:09) *
зы где-то у меня валяется кусок классной книжки от Hanzo про FEc, попозже поищу и выложу на фтп.


Полная:

Turbo Coding, Turbo Equalisation and Space-Time Coding for Transmission over Wireless Channels
L. Hanzo, T. H. Liew, B. L. Yeap

http://mihd.net/fbrz90/__cf34f7c__via_gigapedia.info__.html
sergvks
Сейчас жёсткое декодирование осуществляется дифференциальным методом:
bit0 = (I[n-1]*Q[n]-Q[n-1]*I[n])>0;
bit1 = (I[n-1]*I[n]+Q[n-1]*Q[n])>0;
Т.е. значение бита определяется знаком выражения в скобках. Поэтому вопрос сводится к тому что надо сделать с этими выражениями, чтобы правильно работали эти самые декодер витерби или там max-log-map декодер.
alex_os
Цитата(sergvks @ Jul 16 2008, 11:15) *
Сейчас жёсткое декодирование осуществляется дифференциальным методом:
bit0 = (I[n-1]*Q[n]-Q[n-1]*I[n])>0;
bit1 = (I[n-1]*I[n]+Q[n-1]*Q[n])>0;
Т.е. значение бита определяется знаком выражения в скобках. Поэтому вопрос сводится к тому что надо сделать с этими выражениями, чтобы правильно работали эти самые декодер витерби или там max-log-map декодер.

Вообще в правильных системах дифференциальное декодирование делают после FEC декодера а еще лучше чтобы вообще не было дифференциального. В конкретно случае Вы можете вполне честно считать
что
llr_bit0 = (I[n-1]*Q[n]-Q[n-1]*I[n]), llr_bit1 = (I[n-1]*I[n]+Q[n-1]*Q[n]);
Интересно что за протокол такой передачи данных?
Еще можно попытаться восстановить несущую + 1.5 дб.. 2 дб это даст.
sergvks
Вообще то я немного неправильно написал - это не декодирование, а демодуляция (это не протокол, а вид модуляции используется в системах связи TETRA, APCO25, DAMPS). То что когерентный приём даёт выигрыш в 1-2 дб я в курсе. Т.к. в TDMA системах размер кадра сравнительно мал, когерентный практически не используется.

Цитата(alex_os @ Jul 16 2008, 13:39) *
В конкретно случае Вы можете вполне честно считать что
llr_bit0 = (I[n-1]*Q[n]-Q[n-1]*I[n]), llr_bit1 = (I[n-1]*I[n]+Q[n-1]*Q[n]);


В данный момент я так и делаю, просто мне необходимо знать насколько это корректно.
alex_os
Цитата(sergvks @ Jul 17 2008, 09:49) *
Вообще то я немного неправильно написал - это не декодирование, а демодуляция (это не протокол, а вид модуляции используется в системах связи TETRA, APCO25, DAMPS). То что когерентный приём даёт выигрыш в 1-2 дб я в курсе. Т.к. в TDMA системах размер кадра сравнительно мал, когерентный практически не используется.
В данный момент я так и делаю, просто мне необходимо знать насколько это корректно.

Ну наверняка есть или пилоты или преамбула, ловите их и используете когерентный. Еще раньше попадалось куча статей , где для демодуляции дифференциальной psk решение принималось на по двум символам а по нескольким, я сам правда не пробовал такое делать, может кто-нибудь здесь скажет что-нибудь умное по этому поводу...
furymaxx
Цитата(alex_os @ Jul 17 2008, 21:33) *
Ну наверняка есть или пилоты или преамбула, ловите их и используете когерентный. Еще раньше попадалось куча статей , где для демодуляции дифференциальной psk решение принималось на по двум символам а по нескольким, я сам правда не пробовал такое делать, может кто-нибудь здесь скажет что-нибудь умное по этому поводу...


Можно хотя бы примерные названия статей?
alex_os
Цитата(furymaxx @ Jul 17 2008, 21:40) *
Можно хотя бы примерные названия статей?

примерно
искать гуглом DQPSK detection multiple symbol
sergvks
Цитата(alex_os @ Jul 17 2008, 21:33) *
Ну наверняка есть или пилоты или преамбула, ловите их и используете когерентный. Еще раньше попадалось куча статей , где для демодуляции дифференциальной psk решение принималось на по двум символам а по нескольким, я сам правда не пробовал такое делать, может кто-нибудь здесь скажет что-нибудь умное по этому поводу...

Дело в том что это радиоканал и для когерентного приёма необходимо подстраивать гетеродин приёмника, например, в спутниковом канале идёт сплошной поток данных и подстроить фазу нет проблем, а здесь время передачи кадра порядка десятка мс и как в этом случае сделать когерентный приём на AD9874 лично я не представляю, если кто научит, буду очень рад.
petrov
Цитата(sergvks @ Jul 18 2008, 10:00) *
Дело в том что это радиоканал и для когерентного приёма необходимо подстраивать гетеродин приёмника, например, в спутниковом канале идёт сплошной поток данных и подстроить фазу нет проблем, а здесь время передачи кадра порядка десятка мс и как в этом случае сделать когерентный приём на AD9874 лично я не представляю, если кто научит, буду очень рад.


Используйте feed-forward методы синхронизации, примеры здесь:
http://electronix.ru/forum/index.php?showtopic=23652
alex_os
Цитата(sergvks @ Jul 18 2008, 10:00) *
Дело в том что это радиоканал и для когерентного приёма необходимо подстраивать гетеродин приёмника, например, в спутниковом канале идёт сплошной поток данных и подстроить фазу нет проблем, а здесь время передачи кадра порядка десятка мс и как в этом случае сделать когерентный приём на AD9874 лично я не представляю, если кто научит, буду очень рад.

А зачем Вам гетеродин дергать? В цифре фазу несущей и доворачивайте, как нужно. Главное чтобы сигнал в полосу приемника пролез без искажений и при оцифровке наложений не было...
furymaxx
Цитата(alex_os @ Jul 17 2008, 23:37) *

Спасибо.
Еще вопрос: является ли это
llr_bit0 = (I[n-1]*Q[n]-Q[n-1]*I[n]), llr_bit1 = (I[n-1]*I[n]+Q[n-1]*Q[n])
именно логарифмическим отношением правдоподобия?
sergvks
Цитата(petrov @ Jul 18 2008, 12:36) *
Используйте feed-forward методы синхронизации, примеры здесь:
http://electronix.ru/forum/index.php?showtopic=23652


А есть примеры работающие для низких значений SNR<2Дб ?
petrov
Цитата(sergvks @ Jul 24 2008, 14:43) *
А есть примеры работающие для низких значений SNR<2Дб ?


нет
alex_os
Цитата(petrov @ Jul 18 2008, 12:36) *
Используйте feed-forward методы синхронизации, примеры здесь:
http://electronix.ru/forum/index.php?showtopic=23652

Вообще для мерзкого DQPSK c продергиванием на pi/4 это весьма забавно выглядит - либо возводить сигнал в 8ю степень, либо сначала восстановить тактовую и каждый символ поворачивать опору на пи/4 а потом возводить в 4ю степень smile.gif...
dsp85
Цитата(petrov @ Jul 16 2008, 10:54) *
Полная:

Turbo Coding, Turbo Equalisation and Space-Time Coding for Transmission over Wireless Channels
L. Hanzo, T. H. Liew, B. L. Yeap

http://mihd.net/fbrz90/__cf34f7c__via_gigapedia.info__.html

выложите, пожалуйста, еще разок полную версию.
dsp85
Цитата(petrov @ Jul 27 2010, 21:04) *

thanks
Dmitry-alt
Цитата(sergvks @ Jul 18 2008, 10:00) *
Дело в том что это радиоканал и для когерентного приёма необходимо подстраивать гетеродин приёмника, например, в спутниковом канале идёт сплошной поток данных и подстроить фазу нет проблем, а здесь время передачи кадра порядка десятка мс и как в этом случае сделать когерентный приём на AD9874 лично я не представляю, если кто научит, буду очень рад.


А вообще, о каких скоростях в канале идет речь? Каких отношениях сигнал/шум?
Или проще, что это за приложение? Может готовые решения какой-то части проблемы порекомендуем?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.