|
|
  |
Вопросы по итеративному декодированию, Реализация CTC/BTC/LDPC кодов |
|
|
|
Mar 25 2015, 12:47
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Возник тут у меня вопрос, из класса вопросов "нутром чувствую что литр, а доказать не могу" (с). Итак : 1. возьмем созвездие BPSK с точками 1+1i и -1-1i. Его мощность равна 2. Мягкое решение по такому созвездию будем считать как LLR = re + im 2. возьмем комплексный генератор AWGN шума. Получим SNR = 0дб, для этого сделаем мощность шума равной 2. Сложим с сигналом из пункта 1. Для такой системы будет EbN0 = EsNo - 10*log10(1) = SNR - 10*log10(1) = 0дб. 3. возьмем созвездие BPSK с точками sqrt(2) и -sqrt(2). Его мощность равна 2. Мягкое решение по такому созвездию будем считать как LLR = re. 4. возьмем комплексный генератор AWGN шума из первого примера. Сложим с сигналом из пункта 3. Чему для такой системы будет равно EbN0 ? По идее должно быть тоже самое, но ведь по сути, с этим сигналом мы работаем как с вещественным и отбросили мнимую часть шума. Т.е. уменьшили мощность шума в 2 раза и EbNo не помешало бы подправить. Так как правильно ?
Эскизы прикрепленных изображений
--------------------
|
|
|
|
|
Mar 25 2015, 14:11
|
Местный
  
Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163

|
Цитата(des00 @ Mar 25 2015, 15:47)  Чему для такой системы будет равно EbN0 ? По идее должно быть тоже самое, но ведь по сути, с этим сигналом мы работаем как с вещественным и отбросили мнимую часть шума. Т.е. уменьшили мощность шума в 2 раза и EbNo не помешало бы подправить. Так как правильно ? СПМ шума не изменилась от того, что ты повернул созвездие. Энеригия, затраченная на передачу бита тоже не изменилась, следовательно Eb/N0 осталось тем же самым. Т.е. имеем два случая 1. Имеем два независимых AWGN канала с спм N0, по которым передаем параллельно одно и то же. 2. Сигнал с удвоенной энергетикой передается по AWGN каналу c спм N0. Отношение Eb/N0 одинаковое. Формулы с картинки странные - не очень понятен конекст - при одинаковой длительности символа и SNR получаем вдвое худшее Es/N0, но при этом передаем двое меньшее количество бит на символ?
Сообщение отредактировал andyp - Mar 25 2015, 14:15
|
|
|
|
|
Mar 25 2015, 14:49
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(andyp @ Mar 25 2015, 22:11)  Отношение Eb/N0 одинаковое. Формулы с картинки странные - не очень понятен конекст - при одинаковой длительности символа и SNR получаем вдвое худшее Es/N0, но при этом передаем двое меньшее количество бит на символ? Это скан с хелпа матлаба. Смотреть по ключевой фразе "AWGN Сhannel Noise Level" там раздел "Relationship Between EsNo and SNR". Все началось с простого скрипта : Код clear all;
format short;
EbNo = 3; EsNo = EbNo + 10*log10(1); % uncoded BPSK SNR = EsNo;
Nbits = 1e6;
msg = randi([0:1], 1, Nbits);
tx_symb = (2*msg-1) + 1i*(2*msg-1); tx_symb1 = sqrt(2)*real(tx_symb);
% rx_symb = awgn(tx_symb, SNR, 10*log10(2)); % rx_symb1 = awgn(tx_symb1, SNR, 10*log10(2)); rx_symb = awgn(tx_symb, SNR, 'measured'); rx_symb1 = awgn(tx_symb1, SNR, 'measured');
hd_bits = ((real(rx_symb) + imag(rx_symb)) >= 0); hd_bits1 = (rx_symb1 >= 0);
ber = biterr(msg, hd_bits)/Nbits; ber1 = biterr(msg, hd_bits1)/Nbits;
disp(['ber = ', num2str(ber), ' ber1 = ', num2str(ber1)]); и вот результат ber = 0.022964 ber1 = 0.078718 если сделать правку Код rx_symb1 = awgn(tx_symb1, SNR+3, 'measured'); то результат более ожидаем ber = 0.02301 ber1 = 0.022947
--------------------
|
|
|
|
|
Mar 25 2015, 15:23
|
Знающий
   
Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748

|
Для вещественных сигналов (созвездий) нужно добавлять 3 дБ. Вы должны принимать решение по одномерному созвездию, то есть использовать только одну координату. Поворот не делает созвездие двумерным. Код rx_symb = awgn(tx_symb, SNR+3, 'measured'); rx_symb1 = awgn(tx_symb1, SNR+3, 'measured'); hd_bits = (real(rx_symb)>= 0); hd_bits1 = (rx_symb1 >= 0);
|
|
|
|
|
Mar 25 2015, 15:28
|
Знающий
   
Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866

|
Дело кажется в реализации функции awgn. Добавляю шум вручную: Код Ps = 2; Pn = Ps * 10^(-SNR/10); noise = randn(1, Nbits)+1j*randn(1, Nbits); noise = noise * Pn; Pn_meas = noise*noise'/Nbits; rx_symb = tx_symb + noise; rx_symb1 = tx_symb1 + real(noise); Результат: ber = 0.07943 ber1 = 0.079298 Возможно там делается какая то нормировка.
|
|
|
|
|
Mar 25 2015, 15:33
|
Знающий
   
Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748

|
Цитата(serjj @ Mar 25 2015, 18:28)  Нельзя BPSK рассматривать как двумерное созвездие. Про комплекнсый и вещестыенный шум в справке по AWGN всё написано.
|
|
|
|
|
Mar 25 2015, 15:40
|
Знающий
   
Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866

|
В функции awgn есть такая проверка Код % --- Add the noise if(isreal(sig)) opType = 'real'; else opType = 'complex'; end Если в первом примере записать так: Код tx_symb = (2*msg-1) + 1i*(2*msg-1); tx_symb1 = sqrt(2)*real(tx_symb) + 1i*1e-15; То результаты для обоих созвездий примерно совпадают. Цитата Нельзя BPSK рассматривать как двумерное созвездие. Почему? Это такой же комплексный сигнал как и остальные.
|
|
|
|
|
Mar 25 2015, 15:54
|
Знающий
   
Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866

|
Вот в приведенном примере: Код hd_bits = ((real(rx_symb) + imag(rx_symb)) >= 0); Энергия для решения собирается с обеих координат иначе потеря в энергетике не менее 3 дБ (при условии 100% восстановленной фазы). К bpsk применимы все комплексные мат методы, что и для остальных psk, в т.ч. arg(x), которая не имеет смысла для вещественного/одномерного сигнала. Предлагаю спор о вещественности/материальности/еще-чего-то-там bpsk сигнала закрыть, что бы не засорять тему
|
|
|
|
|
Mar 25 2015, 16:45
|
Знающий
   
Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748

|
Цитата(serjj @ Mar 25 2015, 18:28)  Результат: ber = 0.07943 ber1 = 0.079298 Для SNR = 3 дБ BER = 0.022964. Цитата(serjj @ Mar 25 2015, 18:40)  Если в первом примере записать так: Код tx_symb = (2*msg-1) + 1i*(2*msg-1); tx_symb1 = sqrt(2)*real(tx_symb) + 1i*1e-15; Вы изначально вещественный сигнал tx_symb1 сделали комплексным, тогда, естественно, в awgn нужно использовать SNR. В случае же вещественного сигнала - (SNR + 3).
Сообщение отредактировал Grizzzly - Mar 25 2015, 17:14
|
|
|
|
|
Mar 26 2015, 06:50
|
Знающий
   
Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748

|
Да, вчера вечером затупил про одномерность повернутого BPSK... Нашел в архиве статью про добавление белого шума к сигнальным отсчетам. Там как раз про 3 дБ говорится.
10.1109_13.168713.pdf ( 492.69 килобайт )
Кол-во скачиваний: 217Про различия СПМ - когда N0, а когда N0/2. А в разделе "Relationship Among Eb/No, Es/No, and SNR Modes" говорится тоже самое, что в статье, только кратко: http://www.mathworks.com/help/comm/ref/awgnchannel.html
Сообщение отредактировал Grizzzly - Mar 26 2015, 06:58
|
|
|
|
|
Mar 26 2015, 08:44
|
Знающий
   
Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866

|
Почитал статью, спасибо. Но меня их подход решительно смутил. Выразили мощность полосового реального сигнала через 0-й отчёт автокорреляционной функции - ок, далее они говорят, что мощность комплексной огибающей на нуле такого сигнала можно выразить через сумму 0-х отчётов автокорреляционных функций квадратур re и im. Тоже нет вопросов. Но потом они удтверждают, что при переходе на комплексное представление сигнала мы имеем (математически) удвоение мощности, для этого они полагают, что максимум АКФ квадратур и АКФ полосового сигнала одинаковы по величине. Но пардонте, как же так? Вот накида скрипт (взял ЛЧМ для примера)
envelope_pwr.zip ( 959 байт )
Кол-во скачиваний: 31Из него видно, что при переносе сигнала с ПЧ на ноль энергия делится между квадратурами, так что суммарная энергия не изменяется. Тоже и для шумового процесса: берем действительный шум, умножаем его на комплексную несущую и измеряем мощность полученных re и im компонент комплексного шумового процесса. В скрипте это тоже приведено. Что касается АКФ, получил вот такую картинку:
Из неё видно, что в lag=0 АКФ полосового сигнала в 2 раза больше АКФ квадратуры. В общем у меня много вопросов к статье. Получается, что там ищутся объяснения математическим эффектам, которые не проявляются в реальной жизни. Поправте, если я рассуждаю неверно, всегда готов учиться
|
|
|
|
|
Mar 26 2015, 09:28
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Grizzzly @ Mar 25 2015, 23:23)  Вы должны принимать решение по одномерному созвездию, то есть использовать только одну координату. Поворот не делает созвездие двумерным. На каком основании именно должен? Есть квадратурный приемник, обработка идет в двух квадратурах. Как я их поверну для принятия решения дело десятое. Могу вообще перевести в полярные координаты и принимать решение по углу. Цитата(serjj @ Mar 25 2015, 23:28)  Дело кажется в реализации функции awgn. Добавляю шум вручную: проверка sum(abs(rx_symb - tx_symb).^2)/Nbits и sum(abs(rx_symb1 - tx_symb1).^2)/Nbits показывает что мощность шума у вас там разная. Цитата(serjj @ Mar 25 2015, 23:40)  Если в первом примере записать так: Код tx_symb = (2*msg-1) + 1i*(2*msg-1); tx_symb1 = sqrt(2)*real(tx_symb) + 1i*1e-15; То результаты для обоих созвездий примерно совпадают. Результат удивил. похоже что Цитата Возможно там делается какая то нормировка. вы правы.
--------------------
|
|
|
|
|
Mar 26 2015, 09:40
|
Знающий
   
Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748

|
Цитата(des00 @ Mar 26 2015, 12:28)  На каком основании именно должен? Есть квадратурный приемник, обработка идет в двух квадратурах. Как я их поверну для принятия решения дело десятое. Могу вообще перевести в полярные координаты и принимать решение по углу. С утра понял, что был неправ. Цитата(des00 @ Mar 26 2015, 12:28)  Результат удивил. похоже что Цитата Возможно там делается какая то нормировка.
вы правы. Для комплексного сигнала мощность шума делится пополам между квадратурами, а для вещественного она целиком добавляется к нему. Можно открыть функции awgn и wgn и посмотреть на эту реализацию. Код if(strcmp(cplxMode,'complex')) y = (sqrt(imp*noisePower/2))*(func(row, col)+1i*func(row, col)); else y = (sqrt(imp*noisePower))*func(row, col); end; noisePower = sigPower-reqSNR (в дБ) или noisePower = sigPower/reqSNR; Для ВЕЩЕСТВЕННЫХ сигналов должна быть (noisePower/2), как в данном коде: http://www.mathworks.com/matlabcentral/fil...tent/bpskAWGN.mВообще странно реализована функция awgn, в своё время с этим намучился, понял, что надо добавлять 3 дБ и успокоился, только сейчас так глубоко докопался. В Simulink таких проблем с AWGN Channel нет. Задаю для обычного BPSK Eb/N0 = 3 дБ и получаю BER =~0.025, что ожидаемо. Задаю BPSK с поворотом на 45 градусов против часой стрелки, получаю такой же BER. AWGN Channel правильно распознает типы данных и прибавляет нужный уровень шума.
Сообщение отредактировал Grizzzly - Mar 26 2015, 09:50
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|