реклама на сайте
подробности

 
 
> LDPC код из стандарта DVB-S2, BER, отношение сигнал-шум, DVB-S2, LDPC
Vehfl
сообщение Nov 13 2012, 10:33
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 9-11-12
Пользователь №: 74 305



Есть программа на C++ для моделирования кодов LDPC для стандарта DVB-S2, в программе есть матрицы из стандарта, задающие коды, есть модем и канал связи с возможностью установки отношения Eb/No. Для всех кодов кроме скоростей 2/5, 1/3, 1/4 получились приемлимые графики зависимости BER (Bit Error Rate) от Eb/No, сходящиеся с теоретическими из статей. Для скоростей 1/4, 1/3, 2/5 декодер не работает, сам добавляет ошибки даже, если в канале ошибок не было. Может это опечатка в матрицах, взятых из стандарта. Ниже приведен стандарт. Не знаете с чем может быть связано, что не работают три скорости?
Прикрепленные файлы
Прикрепленный файл  DVB_S2_en_302307v010201p.pdf ( 682.13 килобайт ) Кол-во скачиваний: 181
 
Go to the top of the page
 
+Quote Post
5 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 67)
Serg76
сообщение Nov 13 2012, 13:59
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(Vehfl @ Nov 13 2012, 13:33) *
Есть программа на C++ для моделирования кодов LDPC для стандарта DVB-S2, в программе есть матрицы из стандарта, задающие коды, есть модем и канал связи с возможностью установки отношения Eb/No. Для всех кодов кроме скоростей 2/5, 1/3, 1/4 получились приемлимые графики зависимости BER (Bit Error Rate) от Eb/No, сходящиеся с теоретическими из статей. Для скоростей 1/4, 1/3, 2/5 декодер не работает, сам добавляет ошибки даже, если в канале ошибок не было. Может это опечатка в матрицах, взятых из стандарта. Ниже приведен стандарт. Не знаете с чем может быть связано, что не работают три скорости?

Промоделировал своими средствами для QPSK 1/4 при разных С/Ш - все работает, ошибки исправляются. Ищите ошибки в модели. Товарищи, которые делали по стандарту, говорят, что в матрицах опечаток нет.
Go to the top of the page
 
+Quote Post
Vehfl
сообщение Nov 13 2012, 16:24
Сообщение #3





Группа: Участник
Сообщений: 14
Регистрация: 9-11-12
Пользователь №: 74 305



Цитата(Serg76 @ Nov 13 2012, 17:59) *
Промоделировал своими средствами для QPSK 1/4 при разных С/Ш - все работает, ошибки исправляются. Ищите ошибки в модели. Товарищи, которые делали по стандарту, говорят, что в матрицах опечаток нет.

Случайно не в матлабе моделировали? У меня в матлабе при отношении С/Ш=0, BER=0. Ведь физически такого не может быть?

Код программы в матлабе:
CODE
format long
clear all;

r=2/3
H = dvbs2ldpc®;
%e=0
% spy(H); % Visualize the location of nonzero elements in H.

% Construct a default LDPC encoder object
henc = fec.ldpcenc(H);

for SNRdB = 0

for n=1:100;
% Generate a random binary message
msg = randint(1,henc.NumInfoBits,2);

% Encode the message
codeword = encode(henc, msg);

% Verify the parity checks (which should be a zero vector)
paritychecks = mod(henc.ParityCheckMatrix * codeword', 2);

hdec = fec.ldpcdec(H);

% Construct a BPSK modulator object
modObj = modem.pskmod('M',2,'InputType','Bit');

% Modulate the signal (map bit 0 to 1 + 0i, bit 1 to -1 + 0i)
modulatedsig = modulate(modObj, codeword);

% Noise parameters

sigma = sqrt(10^(-SNRdB/10));

% Transmit signal through AWGN channel
receivedsig = awgn(modulatedsig, SNRdB, 0); % Signal power = 0 dBW

% % Visualize received signal
% scatterplot(receivedsig)

% Construct a BPSK demodulator object to compute
% log-likelihood ratios
demodObj = modem.pskdemod(modObj,'DecisionType','LLR', ...
'NoiseVariance',sigma^2);

% Compute log-likelihood ratios (AWGN channel)
llr = demodulate(demodObj, receivedsig);

% Decode received signal
decodedmsg = decode(hdec, llr);

N_err=nnz(decodedmsg-msg);

% % Actual number of iterations executed
% disp(['Number of iterations executed = ' ...
% num2str(hdec.ActualNumIterations)]);
% % Number of parity-checks violated
% disp(['Number of parity-checks violated = ' ...
% num2str(sum(hdec.FinalParityChecks))]);
% % Compare with original message
% disp(['Number of bits incorrectly decoded = ' ...
% num2str(N_err)])


a(n)=N_err; % Общее количество ошибок

end

BER=sum(a)/(n*henc.NumInfoBits)


end
BER
FER=(nnz(a))/n
Go to the top of the page
 
+Quote Post
Serg76
сообщение Nov 13 2012, 16:30
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



программная модель на C++. попробовал пару режимов, один из них без внесения ошибок в канал, второй при вероятности битовой ошибки на входе где-то 4е-2. в обоих случаях все ошибки были исправлены, точнее во втором случае.

Сообщение отредактировал Serg76 - Nov 13 2012, 16:33
Go to the top of the page
 
+Quote Post
Mogwaika
сообщение Nov 13 2012, 16:49
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 11-09-11
Пользователь №: 67 121



Цитата(Vehfl @ Nov 13 2012, 20:24) *
Случайно не в матлабе моделировали? У меня в матлабе при отношении С/Ш=0, BER=0. Ведь физически такого не может быть?


Почему не может? у меня 9.259259259259259e-07 получилось... а могло и не получиться.
Запускайте подольше и параллельно несколько потоков.
Go to the top of the page
 
+Quote Post
Serg76
сообщение Nov 13 2012, 17:18
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(Vehfl @ Nov 13 2012, 19:24) *
У меня в матлабе при отношении С/Ш=0, BER=0. Ведь физически такого не может быть?

Для режима QPSK 1/4 вполне может быть, код достаточно мощный, а вот то, что он вносит ошибки при их отсутствии в канале, то это уже ошибка в модели.

по спецификации для QPSK 1/4 FER = 1e-7 при Es/No = -2,35 дБ.

Сообщение отредактировал Serg76 - Nov 13 2012, 17:10
Go to the top of the page
 
+Quote Post
slash_spb
сообщение Nov 15 2012, 15:49
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 20-03-06
Пользователь №: 15 425



У вас реализация с плавающей точкой? В реализациях с фиксированной точкой декодер начинает сам вносить ошибки при больших снрах когда нет проверки на четность(наличию ошибок в блоке) после каждой итерации, либо что-то с нормировкой мягких решений на входе декодера. Ну это так, вдруг поможет. Хотя наверное ошибка в модели.
Go to the top of the page
 
+Quote Post
Serg76
сообщение Nov 15 2012, 16:52
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(slash_spb @ Nov 15 2012, 19:49) *
У вас реализация с плавающей точкой? В реализациях с фиксированной точкой декодер начинает сам вносить ошибки при больших снрах когда нет проверки на четность(наличию ошибок в блоке) после каждой итерации, либо что-то с нормировкой мягких решений на входе декодера.

такого я еще не слышал sm.gif
Go to the top of the page
 
+Quote Post
icyrock
сообщение Nov 19 2012, 08:44
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 27-04-07
Из: Санкт-Петербург
Пользователь №: 27 351



Стандарт точен. Я сам проверял (у меня собственная модель) на всех кодовых скоростях.

Сообщение отредактировал icyrock - Nov 19 2012, 08:53
Go to the top of the page
 
+Quote Post
Vehfl
сообщение Nov 19 2012, 08:58
Сообщение #10





Группа: Участник
Сообщений: 14
Регистрация: 9-11-12
Пользователь №: 74 305



Цитата(slash_spb @ Nov 15 2012, 18:49) *
У вас реализация с плавающей точкой? В реализациях с фиксированной точкой декодер начинает сам вносить ошибки при больших снрах когда нет проверки на четность(наличию ошибок в блоке) после каждой итерации, либо что-то с нормировкой мягких решений на входе декодера. Ну это так, вдруг поможет. Хотя наверное ошибка в модели.


Пожалуйста можете поподробней и что вы имеете ввиду под реализацией с фиксированной точкой?

Go to the top of the page
 
+Quote Post
slash_spb
сообщение Nov 20 2012, 07:37
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 20-03-06
Пользователь №: 15 425



Цитата(Vehfl @ Nov 19 2012, 11:58) *
Пожалуйста можете поподробней и что вы имеете ввиду под реализацией с фиксированной точкой?


Имел ввиду реализацию декодера с фиксированной точкой, т.е. все метрики имеют ограниченный динамический диапазон. При работе с таким декодером сталкивался с тем что декодер вносил ошибки и было это конечно от неправильной реализации алгоритма декодирования, хотя он как вносил ошибки так и исправлял. Как вариант может у вас реализация декодера с фиксированной точкой и переполнение метрик наступает только на на указанных вами скоростях?
Go to the top of the page
 
+Quote Post
Vehfl
сообщение Nov 22 2012, 13:03
Сообщение #12





Группа: Участник
Сообщений: 14
Регистрация: 9-11-12
Пользователь №: 74 305



Не могли бы поделиться алгоритмом декодирования который использовали. Спасибо.
Go to the top of the page
 
+Quote Post
slash_spb
сообщение Nov 22 2012, 15:31
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 20-03-06
Пользователь №: 15 425



Цитата(Vehfl @ Nov 22 2012, 16:03) *
Не могли бы поделиться алгоритмом декодирования который использовали. Спасибо.


Алгоритм декодирования MIN-SUM, такой же как в DVB-S2, только нет коррекции. Ну еще он с одним проходом по строкам кодовой матрице. У меня он есть на матлабе, на си нет. Вам исходник нужен, я правильно понял?
Go to the top of the page
 
+Quote Post
Vehfl
сообщение Nov 26 2012, 15:18
Сообщение #14





Группа: Участник
Сообщений: 14
Регистрация: 9-11-12
Пользователь №: 74 305



Цитата(slash_spb @ Nov 22 2012, 18:31) *
Вам исходник нужен, я правильно понял?

Да, это было бы прекрасно иметь наглядный алгоритм декодирования.
Go to the top of the page
 
+Quote Post
dimez
сообщение Nov 27 2012, 05:12
Сообщение #15





Группа: Новичок
Сообщений: 2
Регистрация: 27-11-12
Пользователь №: 74 575



Могу выправить вам алгоритм и проконсультировать, за плату. Пишите в личку.
Go to the top of the page
 
+Quote Post
Vehfl
сообщение Nov 28 2012, 09:37
Сообщение #16





Группа: Участник
Сообщений: 14
Регистрация: 9-11-12
Пользователь №: 74 305



Цитата(slash_spb @ Nov 22 2012, 18:31) *
Алгоритм декодирования MIN-SUM, такой же как в DVB-S2, только нет коррекции. Ну еще он с одним проходом по строкам кодовой матрице. У меня он есть на матлабе, на си нет. Вам исходник нужен, я правильно понял?

Был бы признателен если бы вы предоставили закодированные блоки с исходными сообщениями для нескольких скоростей скажем для 1/2,2/5 и 1/3. У нас есть подозрения на неправильную работу кодера.
Go to the top of the page
 
+Quote Post
slash_spb
сообщение Nov 29 2012, 14:47
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 20-03-06
Пользователь №: 15 425



Цитата(Vehfl @ Nov 28 2012, 12:37) *
Был бы признателен если бы вы предоставили закодированные блоки с исходными сообщениями для нескольких скоростей скажем для 1/2,2/5 и 1/3. У нас есть подозрения на неправильную работу кодера.


Не совсем понял) Вы вроде приводили скрипт в котором можете с легкостью с генерировать нужные кодовые блоки.

Код
function [vHat n] = decodeLogMinSumOffsetSinglePassFpga(rx, H, iteration, beta)

llr_bit_width = 8;

max_val = (2^(llr_bit_width-1))-1;
min_val = -(2^(llr_bit_width-1));

[M N] = size(H);

Lci = rx';

% Initialization
Lrji = zeros(M, N);
Pibetaij = zeros(M, N);

Zn   = Lci;

for n = 1:iteration
  
   Lrji_prev =  Lrji;
  
   betaij  = ( repmat( Zn, M, 1 ).*H - Lrji );
  
   %Limit data by bit width value. Like in fpga.
    for i=1:size(betaij,1)*size(betaij,2)
              
        if (betaij(i) > max_val)
          betaij(i) = max_val;
        end
        
        if (betaij(i) < min_val)
          betaij(i) = min_val;
        end
    end    
  
   %In convertion two's compliment to absolute value
   %didn't add 1 to save some resources
    %for i=1:size(betaij,1)*size(betaij,2)
    %  if ( betaij(i) < 0 )
    %    betaij(i) = betaij(i) + 1;  
    %  end
    %end
  
   betaij  = abs( betaij );
   alphaij = nonzerosign( repmat( Zn, M, 1 ).*H - Lrji );

   % ----- Horizontal and Vertical step -----
   for i = 1:M
      
      % Find non-zeros in the column
      c1 = find(H(i, :));
      
      for k = 1:length(c1)

         % Maximum betaij\c1(k) - beta
         beta_row = betaij(i, c1);
         beta_row(k) = realmax;
         minOfbetaij = min( beta_row ) - beta;
         minOfbetaij = max( [minOfbetaij 0] );
        
         % Multiplication alphaij\c1(k) (use '*' since alphaij are -1/1s)
         prodOfalphaij = prod(alphaij(i, c1))*alphaij(i, c1(k));
        
         % Update L(rji)
         Lrji(i, c1(k)) = prodOfalphaij*( minOfbetaij );
                  
         Zn_inc = Lrji(i, c1(k)) - Lrji_prev(i, c1(k));
        
         if ( Zn_inc  > max_val )
             Zn_inc = max_val;
         end
        
         if ( Zn_inc  < min_val )
             Zn_inc = min_val;
         end
                
         Zn( c1(k) ) = Zn( c1(k) ) + Zn_inc;
        
         if ( Zn( c1(k) ) > max_val )
             Zn( c1(k) ) = max_val;
         end
        
         if ( Zn( c1(k) ) < min_val )
             Zn( c1(k) ) = min_val;
         end
        
      end % for k

   end % for i
  
   %check parity
   if ( n ~= 1 )
     bits = ( nonzerosign( Zn_prev ) - 1 ) / -2;
     if ( sum(mod(H*bits',2)) == 0 )
       break;
     end
   end
  
   Zn_prev = Zn;
end % for n

for i=1:length(Zn)
  if( (Zn(i)) < 0 )
     vHat(i) = 1;
  else
     vHat(i) = 0;
  end
end
%nn = n_last;


Мягкие решения делятся на delta=0.075, beta = 2. Ну этот алгоритм для фиксированной точки с ограничением динамическим диапазоном.
Go to the top of the page
 
+Quote Post
agate
сообщение Nov 30 2012, 02:42
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 19-06-10
Пользователь №: 58 021



А в RTL кто нибудь имеет DVB-S2 декодер?
Go to the top of the page
 
+Quote Post
Vehfl
сообщение Nov 30 2012, 06:54
Сообщение #19





Группа: Участник
Сообщений: 14
Регистрация: 9-11-12
Пользователь №: 74 305



Цитата(slash_spb @ Nov 29 2012, 17:47) *
Не совсем понял) Вы вроде приводили скрипт в котором можете с легкостью с генерировать нужные кодовые блоки.


Спасибо

Думал что может в кодере из matlab тоже ошибка. У вас нету сведений о его правильности?
Go to the top of the page
 
+Quote Post
slash_spb
сообщение Nov 30 2012, 07:42
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 20-03-06
Пользователь №: 15 425



Цитата(Vehfl @ Nov 30 2012, 09:54) *
Спасибо

Думал что может в кодере из matlab тоже ошибка. У вас нету сведений о его правильности?


Думаю в matlab'е с кодированием все правильно, такую бы ошибку быстро нашли бы. Но можно проверить. А по поводу ваших скоростей, кодирование не работает на скоростях где число проверочных бит больше чем число данных. Наверное да, кодер. Хотя алгоритм кодирования в dvb-s2 относительно просто.
Go to the top of the page
 
+Quote Post
Vehfl
сообщение Nov 30 2012, 11:05
Сообщение #21





Группа: Участник
Сообщений: 14
Регистрация: 9-11-12
Пользователь №: 74 305



Цитата(slash_spb @ Nov 30 2012, 10:42) *
Думаю в matlab'е с кодированием все правильно, такую бы ошибку быстро нашли бы. Но можно проверить. А по поводу ваших скоростей, кодирование не работает на скоростях где число проверочных бит больше чем число данных. Наверное да, кодер. Хотя алгоритм кодирования в dvb-s2 относительно просто.

Тогда был бы признателен если вы как-нибудь передали мне блоки закодированные, например на почту. Вы могли бы послать мне их?
Go to the top of the page
 
+Quote Post
slash_spb
сообщение Dec 5 2012, 09:50
Сообщение #22


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 20-03-06
Пользователь №: 15 425



Цитата(Vehfl @ Nov 30 2012, 14:05) *
Тогда был бы признателен если вы как-нибудь передали мне блоки закодированные, например на почту. Вы могли бы послать мне их?


Хотя я ошибся, кодирование там не простое, т.к. используется ступенчатая матрица. Кодированные блоки вы с легкостью получите в матлабе и они будут правильные, я бы вам их и послал) Скорее всего тот кодек LDPC который вы используете был написан для стандартов WiMAX, WiFi в которых минимальная скорость кодирования 1/2. В стандарте WiMAX описано три алгоритма кодирования, какой-то из них реализован в вашем кодеке. Ну может не в чистом виде, а в адаптированном для DVB-S2. Для меньших скоростей, которые используются в DVB-S2, нужно использовать алгоритм описанный в этом стандарте. Как-то так)

Сообщение отредактировал slash_spb - Dec 5 2012, 09:53
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Jan 20 2014, 09:14
Сообщение #23


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



Не стал открывать новую ветку. Встала задача по реализации LDPC-кодера по стандарту DVB-S2 на ПЛИС. Разобравшись с алгоритмом формирования проверочных битов (как мне показалось), взялся за реализацию. Взял длину блока 64800 и скорость 1/2. Практически тут же уткнулся в проблему - "как это можно сделать"? Из таблицы стандарта получается так, что каждый информационный бит участвует в формировании минимум 8 проверочных бит. В итоге каждому проверочному биту с учетом цикличности соответствует около 5 информационных бит. Так вот, как можно приняв один информационный бит, добавить его одновременно к 8 проверочным битам (это 1 шаг расчета проверочных бит)? Если использовать блоки памяти, то можно ли одновременно записывать в 1 блок по нескольким адресам? Если например взять несколько блоков, то наверно это возможно, но таких блоков на мой взгляд нужно в данном примере 360.. это какую же ПЛИС надо использовать? Если делать все на регистрах, то у меня Quartus II не смог откомпилировать такой объем адресации. Из возможных вариантов - это использование опорной частоты минимум в 5 раз выше информационной скорости, чтобы последовательно записывать результаты в память. Может кто сталкивался с этой проблемой?
Go to the top of the page
 
+Quote Post
Serg76
сообщение Jan 20 2014, 11:19
Сообщение #24


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Придется Вам еще почитать, потому как для этих кодов принято оперировать понятиями кодовых и проверочных узлов, кодовые - соответсвуют битам всего принятого кодового слова, включая информационные и проверочные биты, а проверочные - соответствуют ортогональным проверочным уравнениям.
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Jan 21 2014, 06:58
Сообщение #25


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



Я не против почитать, но было бы чего... Оперировать можно чем угодно, лишь бы только понимать о чем речь. Основная информация на мою тематику на буржуйском языке, а там кто как переведет. В ИНЕТе наткнулся на пару статей по реализации LDPC-кодера. Обе недоступны бесплатно. Вот одна из них... http://link.springer.com/chapter/10.1007%2...-642-35603-2_34 К моей радости они дают 2 первые страницы статьи, на одной из которой приведена искомая архитектура, но не все в ней понятно... Например, почему выполняются 360-битные операции... для чего нужен цикличный сдвиг в регистрах... и по структуре получается, что не Р(i)=Р(i) xor P(i-1), a сложение через 360 бит.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Serg76
сообщение Jan 21 2014, 07:31
Сообщение #26


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Не надо, как говорится, рассказывать сказки, литературы по LDPC полно разной. Да, большинство на английском, но тут уж извините. попадаются статьи и на русском, как говорится, ищите и обрящите )))) для начала откройте стандарт по DVB-S2 ETSI EN302307, где расписано как формируются строки проверочной матрицы

Кстати, там же вкратце приведен алгоритм декодирования на примере расширенного кода Хемминга
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Jan 21 2014, 08:45
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(Neznaika @ Jan 20 2014, 13:14) *
Не стал открывать новую ветку.


Ну во-первых для кода 1/2 кол-во рёбер графа ("эджей") равно (226800 - 1), то есть всего 3.5 штуки на один выходной бит.
Один эдж это один ксор, одно чтение и одна запись. Так как у вас память двупортовая в плисине, то значит частота повысится всего в 3.5 раза, а для самого злостного кода 3/5 - в 4.4 раза.

Распараллеливание в любое кол-во раз до 360 тоже легко делается, вечером объясню, если ещё нужно будет, а щас времени совсем нет..
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Jan 21 2014, 11:56
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



Спасибо за ответы) Со стандарта я конечно же и начинал... в нем указано как формируется кодовое слово (считаются проверочные биты), про матрицу не помню. Что касается разных переводов, то в одной литературе variable node и information node, как я понял одно и тоже... смысл один и тот же. Ну да бог ним) Почесал в очередной раз репу... пригляделся к способу формирования проверочных битов в памяти приведенной выше архитектуры. В первой строке похоже стоят проверочные биты... P0, P90, P180... и т.д... а в первом столбце P0, P1, Р2 и т.д.... Тогда действительно можно первую строку посчитать за один такт, зная правильные индексы информационных бит и применяя сдвиг в 360-битных регистрах, так чтобы, например, P0 соответствовали биты в регистрах его формирующих. Информационные биты идут в последовательном порядке... и правильно сдвинув регистры, а потом сложив мы получив верные Рi во всей 360-битной строке. Эти самые индексы можно, как мне кажется легко вычислить используя таблицы из Appendix A прикрепленной статьи. Но вот дальше интересно... пусть сохраним первую строку в буфере... вычисляем 2-ую строку... складываем ее с первой... вычисляем третью.. складываем со второй... вроде все получается... Р1=Р1 xor P0, P2=P2 xor P1... это что касается первого столбца... Р91=Р91 xor P90, P92=P92 xor P91... что касается второго... Но! Нет связи между Р89 и Р90... в стандарте вроде процесс идет непрерывно... и мы должны проделать операцию P90=P90 xor P89.... здесь же она выпадает... Почему? Или я опять не правильно где то понял?


Цитата(Dr.Alex @ Jan 21 2014, 12:45) *
Ну во-первых для кода 1/2 кол-во рёбер графа ("эджей") равно (226800 - 1), то есть всего 3.5 штуки на один выходной бит.
Один эдж это один ксор, одно чтение и одна запись. Так как у вас память двупортовая в плисине, то значит частота повысится всего в 3.5 раза, а для самого злостного кода 3/5 - в 4.4 раза.

Распараллеливание в любое кол-во раз до 360 тоже легко делается, вечером объясню, если ещё нужно будет, а щас времени совсем нет..

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

Сообщение отредактировал Neznaika - Jan 21 2014, 11:57
Прикрепленные файлы
Прикрепленный файл  Investigation_of_LDPC_code_in_DVB_S2.pdf ( 1.49 мегабайт ) Кол-во скачиваний: 228
 
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Jan 21 2014, 22:00
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(Neznaika @ Jan 21 2014, 15:56) *
Мне казалось, что частота для 1/2 может повыситься только в 2 раза, ведь на 1 информационный приходится 2 бита кода.


Ну вы же сами писали про "использование опорной частоты минимум в 5 раз выше информационной скорости", только посчитали неверно.
На каждый парити-нод в коде 1/2 влияют 7 инфо-нодов (это называется "градус" нода). Кроме нулевого парити-нода - у него градус всегда на 1 меньше. Всего парити-нодов 32400, а всего бит на выходе 64800. Поэтому на каждый выходной бит по 3.5 операций.

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

Разбираться досконально с первой половиной вашего поста у меня нет возможности, так что просто скажу в каком порядке вам нужно работать::

1) Написать на сях кодер, использующий таблицу из стандарта, тупо по алгоритму из стандарта, безо всякого параллелизма. Это будет образцовый кодер, там трудно ошибиться.

2) Написать кодер, использующий "инверсную" таблицу из вашей доки, опять же безо всякого параллелизма. Сравнить с образцовым.

3) Если правильно, добавить параллелизм (раз 4-8, больше не нужно).

С проблемой из первой половины поста вы разберётесь ещё когда будете делать первый пункт.
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Jan 22 2014, 05:53
Сообщение #30


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



Спасибо) В целом стратегия понятна. Любопытно все-таки разобраться с "непоняткой" в архитектуре. Как говорится мы не ищем легких путей, и не из тех, кто "умный" и"нормальный герой") Так что барабан мне в руки...
Go to the top of the page
 
+Quote Post
SKov
сообщение Jan 22 2014, 12:57
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(Dr.Alex @ Jan 22 2014, 02:00) *
..это называется "градус" нода..

Интересный термин. Можно какую-то ссылку, где бы он использовался?
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Jan 22 2014, 17:12
Сообщение #32


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(SKov @ Jan 22 2014, 16:57) *
Интересный термин. Можно какую-то ссылку, где бы он использовался?

Да хотя бы в стандарте поищите "degree"..

The number of edges adjacent to a node is called the degree of that node.

Прикрепленные файлы
Прикрепленный файл  en_302307v010201p.pdf ( 682.13 килобайт ) Кол-во скачиваний: 58
 
Go to the top of the page
 
+Quote Post
SKov
сообщение Jan 22 2014, 18:01
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(Dr.Alex @ Jan 22 2014, 21:12) *
Да хотя бы в стандарте поищите "degree"..

The number of edges adjacent to a node is called the degree of that node.

Спасибо, я понял.
Перевод degree как градус в данном контексте - это сильно! wink.gif
Порядок, степень, валентность, да что угодно, но не градус.
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Jan 28 2014, 08:37
Сообщение #34


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



В процессе реализации кодера возник небольшой вопрос. Собрать то я собрал кодер для N=64800, но отладить его в симуляторе Quartus довольно сложно из-за большого объема данных. Симулирует около 15 минут. Решил переключиться на короткий код N=16200, симуляция занимает около 1.5-2 минут. Так вот стал копаться с таблицами, написал программу для получения инверсной таблицы для короткого кода. Но какого размера брать входные сообщения? Например для 1/2 q=25... напрашиваются сообщения в 16200/2/25=324 бита. В стандарте вроде как приведен пример для длинного кода и длина сообщений 360 бит. В какой то статье видел фразу, что М=360 для всех кодов. То ли имеется в виду для всех кодовых скоростей длинного кода, то ли для кодов включая короткие. Взял 360 бит, рассчитал под них инверсную таблицу, получилась цикличная таблица, но в ней кое-где отсутствует некоторые позиции информационных бит для проверочных бит с шагом 25 (В частности: P_186 {I_169,I_236,I_5767,I_6091,I_6875,I_7199,I_7369,I_7436} и P_211{I_170,I_237,I_5768,I_6092,I_6876,I_7370,I_7437}) . Может все-таки надо брать длину в 324 бита или это связано с тем что код короткий, а может вообще ошибка в программе расчета?

Сообщение отредактировал Neznaika - Jan 28 2014, 08:47
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Jan 28 2014, 20:14
Сообщение #35


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Эхе-хе.... Незнайка - Незнайка.. Откуда вы всё это взяли..

Длина "сообщения" шортфрейма 1/2 составляет 7200 бит.

Не надо так уверенно говорить что вы там "написали программу для инверсной таблицы" и всё такое, это не столь простое дело.
Ведь вы даже ещё не разобрались с кодом, что для меня очевидно. Поэтому забудьте о шквартусе и симуляции, а пишите на сях, как я вам говорил, пишите и сравнивайте.
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Jan 29 2014, 06:13
Сообщение #36


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



Да-да) До вчерашнего вечера я думал что при 1/2 в коротком коде 8100 информационных бит. Покопался в ИНЕТе и все-таки раздобыл статью в которой была исчерпывающая таблица) Думаю достаточно скорректировать программу для инверсной таблицы под 7200 бит и будет то, что нужно. Она по-любому написана, только вот считает пока не правильно crying.gif



Сменил количество информационных символов и уваля! Инверсная таблица получилась такая какая и должна быть) yeah.gif
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Jan 29 2014, 07:01
Сообщение #37


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(Neznaika @ Jan 29 2014, 08:13) *
Покопался в ИНЕТе и все-таки раздобыл статью в которой была исчерпывающая таблица

А можно эту статью посмотреть?
Go to the top of the page
 
+Quote Post
Serg76
сообщение Jan 29 2014, 07:14
Сообщение #38


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Мдя..., это по нашему. Вместо того, чтобы изучить стандарт, в котором собрана вся необходимая информация, Незнайка шерстит ИНЕТ и ищет инфу в непонятных статьях. Ну что же, Бог в помощь ))))
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Jan 29 2014, 07:59
Сообщение #39


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Присоединяюсь, в стандарте всё это есть. Кстати и документик-то небольшой, 78 страниц всего.. И всё на видных местах, казалось бы..
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Jan 29 2014, 08:16
Сообщение #40


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



Цитата(_Anatoliy @ Jan 29 2014, 11:01) *
А можно эту статью посмотреть?


Действительно есть) Таблица 5b... она в разделе БЧХ находилась, потому и не попалась на глаза... но благодаря моей уникальной невнимательности были найдены несколько полезных статей, где более полно и раскрыто написано о LDPC кодировании/декодировании по DVB-S2 maniac.gif
Прикрепленные файлы
Прикрепленный файл  RATE_ADAPTIVE_TECHNIQUES_FOR_FREE_SPACE_OPTICAL_CHANNELS.pdf ( 4.83 мегабайт ) Кол-во скачиваний: 241
 
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Jan 29 2014, 08:38
Сообщение #41


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(Neznaika @ Jan 29 2014, 10:16) *
Действительно есть) Таблица 5b... она в разделе БЧХ находилась, потому и не попалась на глаза... но благодаря моей уникальной невнимательности были найдены несколько полезных статей, где более полно и раскрыто написано о LDPC кодировании/декодировании по DVB-S2 maniac.gif

Спасибо!
А по невнимательности мы ещё посоревноваться сможем,коллега rolleyes.gif
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Feb 19 2014, 09:06
Сообщение #42


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



И снова здравствуйте! Были сделаны 2 варианта кодеров с разными структурами и затрачиваемыми ресурсами. Можно и 3 вариант замутить, он будет оптимальнее первых, но не суть. Взялся теперь за реализацию декодера. Довольно много тонкостей и деталей по оптимизации архитектуры с использованием регулярности кода. В одной статье наткнулся на предлагаемую архитектуру, но никак не могу понять откуда берутся адреса сдвигов для Barrel Shifter и адреса для чтения из RAM значений ветвей Check Node. Схему и статью прилагаю. Помогите прозреть!

Сообщение отредактировал Neznaika - Feb 19 2014, 09:12
Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  date05.pdf ( 93.17 килобайт ) Кол-во скачиваний: 110
 
Go to the top of the page
 
+Quote Post
Maverick
сообщение Feb 19 2014, 09:22
Сообщение #43


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(Neznaika @ Feb 19 2014, 11:06) *
И снова здравствуйте! Были сделаны 2 варианта кодеров с разными структурами и затрачиваемыми ресурсами. Можно и 3 вариант замутить, он будет оптимальнее первых, но не суть. Взялся теперь за реализацию декодера. Довольно много тонкостей и деталей по оптимизации архитектуры с использованием регулярности кода. В одной статье наткнулся на предлагаемую архитектуру, но никак не могу понять откуда берутся адреса сдвигов для Barrel Shifter и адреса для чтения из RAM значений ветвей Check Node. Схему и статью прилагаю. Помогите прозреть!

спасибо за статью - интересная...


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
andyp
сообщение Feb 19 2014, 09:52
Сообщение #44


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Не знаток DVD-S2 кода, но:

Shift Value с Figure 3 - это x из формулы (2) статьи. Про x говорится, что он определяется в стандарте и зависит от скорости кода (code rate).

"Reading address - это вроде бы q из того же соотношения. Но тут я не до конца уверен." - здесь точно наврал. q - это размер банка на стадии Check Nodes Message Mapping

Сообщение отредактировал andyp - Feb 19 2014, 09:58
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Feb 19 2014, 11:07
Сообщение #45


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



"The shuffling offsets and addresses can be extracted from the x tables provided by [2]" - Сдвиги перестановщика (на мой взгляд Berrel Shifter) и адреса могут быть получены из Х-таблиц ссылки/статьи [2]... [2] - это стандарт DVB-S2 в котором приведены таблицы перестановок, но как получаются из них адреса и сдвиги, приведенные на рисунке? Для меня загадка...
Go to the top of the page
 
+Quote Post
andyp
сообщение Feb 19 2014, 21:36
Сообщение #46


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Думал долго... Для меня тоже. Как работает shuffling network - вообще вопрос. Первый Read address на мой взгляд должен быть 54 т.к. именно этот CN обновляется первым. Хотя, может и не понимаю что...
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Feb 19 2014, 22:02
Сообщение #47


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(andyp @ Feb 20 2014, 01:36) *
Думал долго... Для меня тоже. Как работает shuffling network - вообще вопрос. Первый Read address на мой взгляд должен быть 54 т.к. именно этот CN обновляется первым. Хотя, может и не понимаю что...


Совершенно неважно, какой ЧН "обновляется первым", тем более что в статье распараллеливание в 360 раз, и кстати первым месседжем может быть любой из 7 (в 1/2 градус чекнодов равен 7).

А те числа могут быть просто случайными. Поскоку принцип очевиден, то сами они ничего не решают.
Go to the top of the page
 
+Quote Post
andyp
сообщение Feb 19 2014, 23:42
Сообщение #48


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(Dr.Alex @ Feb 20 2014, 02:02) *
Совершенно неважно, какой ЧН "обновляется первым", тем более что в статье распараллеливание в 360 раз, и кстати первым месседжем может быть любой из 7 (в 1/2 градус чекнодов равен 7).

А те числа могут быть просто случайными. Поскоку принцип очевиден, то сами они ничего не решают.


Не уверен на счет того, что все CN имеют одинаковую степень.Для нулевого CN в таблице стандарта только 4 подходщих значения х (равных 0 или кратных 90) - 2700, 6030, 0,16290. Остальные ребра в нулевой CN вроде не попадают.
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Feb 20 2014, 00:00
Сообщение #49


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(andyp @ Feb 20 2014, 03:42) *
Не уверен на счет того, что все CN имеют одинаковую степень.Для нулевого CN в таблице стандарта только 4 подходщих значения х (равных 0 или кратных 90) - 2700, 6030, 0,16290. Остальные ребра в нулевой CN вроде не попадают.


А вам и не нужно быть уверенным, я вам это просто сообщаю как факт. В нормал фреймах градусы чекнодов одинаковы, только у нулевого градус на единицу меньше. Почему вы насчитали для нулевого 4 вместо 6 я тоже знаю, но уж сами разберитесь (если вам вообще это нужно конечно..)
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Feb 20 2014, 06:44
Сообщение #50


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



Спасибо за ответы) Пока не верю в случайность чисел... еще покумекаю... Нашел очередную статью, где на одном из слайдов указан принцип формирования адресов сдвигов и адресов chek node. На мой взгляд так и должно быть, но опять не вижу пока соответствия с выше приведенным рисунком. Есть такой товарищ... Falcao, вот он много чего наработал на эту тему... но опять таки не все ясно... эту же архитектуру он немного раскрывает, но опускает адресацию, ссылаясь на недоступную мне статью...
Gomes, M., Falcão, G., Silva, V., Ferreira, V., Sengo, A., and Falcão, M. (2007b). Flexible
Parallel Architecture for DVB-S2 LDPC Decoders. In Proceedings of the IEEE Global
Telecommunications Conf. (GLOBECOM’07), pages 3265–3269.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  thesis_v1.ppt ( 2.73 мегабайт ) Кол-во скачиваний: 83
 
Go to the top of the page
 
+Quote Post
andyp
сообщение Feb 20 2014, 10:26
Сообщение #51


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(Dr.Alex @ Feb 20 2014, 04:00) *
А вам и не нужно быть уверенным, я вам это просто сообщаю как факт. В нормал фреймах градусы чекнодов одинаковы, только у нулевого градус на единицу меньше. Почему вы насчитали для нулевого 4 вместо 6 я тоже знаю, но уж сами разберитесь (если вам вообще это нужно конечно..)


Поутру разобрался, хотя и не нужно было sm.gif. Еще 2 ребра получаются от parity nodes.
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Jun 19 2014, 06:46
Сообщение #52


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



Всем привет!
Подниму в очередной раз эту тему...
На данный момент загвоздка в реализации блока обработки метрик CN-узла.
В прилагаемом документе есть описание MSA-алгоритма (стр.27) и схемы блоков его реализующих (стр.77-78). По формулам алгоритма особых вопросов нет, кроме треугольничка означающего видимо дополнительную коррекцию при вычислении, приближающую MSA к алгоритму SPA. Как я понимаю это осуществляется при помощи блоков BOXPLUS и BOXMINUS. Если в BOXPLUS еще как то можно разобраться и увидеть смысл, то BOXMINUS для меня стал загадкой. Для чего реализовывать операцию (a+б)-(a-б)=2б? И в целом... каким таким образом можно последовательным путем находить минимумы среди набора метрик за исключением одной... их несколько раз что ли нужно прогонять через блок обработки?

Сообщение отредактировал Neznaika - Jun 19 2014, 08:08
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  Tese_Gabriel_Fernandes.pdf ( 3.69 мегабайт ) Кол-во скачиваний: 135
 
Go to the top of the page
 
+Quote Post
AspireSky
сообщение Jun 29 2014, 11:21
Сообщение #53





Группа: Участник
Сообщений: 11
Регистрация: 13-11-11
Пользователь №: 68 288



Добрый день уважаемые форумчане
Помогите плиз.. с таким вопросом . Реализовал по Морелосе-Сарагосе (который идет в приложении) программный декодер LLR LDPC (мягкий вход/жесткий выход, расчеты по видимому с плавающей точкой). Но меня очень не устраивает скорость. Подскажите может кто в теме мягкие схемы декодирования пригодные для программной реализации или хотябы литературу по которой можно реализовать (желательно кто на практике проверил).

Си-код прикрепил в виде файла-txt
Прикрепленные файлы
Прикрепленный файл  llr_pearl.txt ( 12.94 килобайт ) Кол-во скачиваний: 48
Прикрепленный файл  llr_pearl.txt ( 12.94 килобайт ) Кол-во скачиваний: 36
 
Go to the top of the page
 
+Quote Post
Maverick
сообщение Jun 29 2014, 15:04
Сообщение #54


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(AspireSky @ Jun 29 2014, 14:21) *
Добрый день уважаемые форумчане
Помогите плиз.. с таким вопросом . Реализовал по Морелосе-Сарагосе (который идет в приложении) программный декодер LLR LDPC (мягкий вход/жесткий выход, расчеты по видимому с плавающей точкой). Но меня очень не устраивает скорость. Подскажите может кто в теме мягкие схемы декодирования пригодные для программной реализации или хотябы литературу по которой можно реализовать (желательно кто на практике проверил).

Си-код прикрепил в виде файла-txt

посмотрите в сторону Min-Sum Algorithm


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
AspireSky
сообщение Jun 29 2014, 18:29
Сообщение #55





Группа: Участник
Сообщений: 11
Регистрация: 13-11-11
Пользователь №: 68 288



Цитата(Maverick @ Jun 29 2014, 18:04) *
посмотрите в сторону Min-Sum Algorithm


нет ли у вас статьи по которой можно было бы реализовать, простой для понимания
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Dec 9 2014, 14:13
Сообщение #56


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



Всем привет! Подниму ка я снова эту тему. Сделал модель LDPC кодека на C++ по DVB-S2 стандарту, опираясь на структуры предложенные Falcao. Его статья прикреплена к посту. Так вот встала проблема со сходимостью алгоритма. В прикрепленном рисунке представлена архитектура блока обрабатывающего ветви в CN-режиме. В этом же режиме происходит одновременное обновление как памяти сообщений проверочных узлов CN, так и памяти сообщений проверочных узлов PN. Причем как я понимаю в представленной архитектуре режимы CN и VN для PN здесь объединены. В регистре Reg MEM сохраняются сообщения Pm-1, обновляемые после сложения LrPNm со значениями из канальной памяти Channel (LpNm) на каждом такте. Так вот... вычисление LpNm-1 происходит благодаря сложению LrNm-1 со значением обновленной величины из Reg Mem. Так вот сделав вычисление LpNm-1 и обновив сообщение в памяти PN Message получил определенную сходимость алгоритма... но на мой взгляд не достаточную. Например, если на входе декодера 775 ошибок в 7200 информационных битах (R=4/9. N=16400 бит), то по итерациям декодер будет исправлять ошибки следующим образом: 775-> 424, 267, 162, 95, 64, 48, 32, 26... и потом с 16-ой итерации остается постоянно 12 ошибок. При в двое меньшем количестве ошибок получаем чистую работу декодера, т.е. 368->53, 12, 1, 0... 4 итерации и 0 ошибок. Чуть ранее, копаясь в ошибках алгоритма добавлял к LqPNm соответствующие канальные значения LpNm, а сложения с Reg Mem не делал. В результате сходимость алгоритма выглядела более внушительно: 775-> 424, 237, 118, 51, 21, 3, 0... Вроде бы логически ошибки не происходит, идет независимое обновление сообщений Pm и Pm-1 во внешней памяти PN message и внутренней памяти Reg Mem. Кто-нибудь получал похожие результаты или может есть у кого то какое то мнение на этот счет? Было бы интересно докопаться до истины...
Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  HDL_for_DVB_S2.pdf ( 169.61 килобайт ) Кол-во скачиваний: 54
 
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Dec 9 2014, 14:48
Сообщение #57


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Нет возможности (да наверно и необходимости) разбираться в деталях вашей реализвции, но............ кто ж так измеряет "сходимость"??
И что это вообще такое? И зачем у вас подсчитывается кол-во ошибок?? Вы же не рид-соломон делаете..

На декодер нужно подавать сигнал + гаусовский шум, и считать не "ошибки", а сигнал/шум, и сравнивать его с пределом для данного кода, который известен.

Когда окажется, что ваш декодер обеспечивает этот предел, тогда уже можно будет говорить о кол-ве итераций, при которм тот или иной SNR достигается.
Go to the top of the page
 
+Quote Post
petrov
сообщение Dec 9 2014, 14:51
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(Neznaika @ Dec 9 2014, 17:13) *
Было бы интересно докопаться до истины...


http://en.wikipedia.org/wiki/EXIT_chart
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Dec 10 2014, 06:41
Сообщение #59


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



В моделе на С++ я ко входному сигналу декодера добавляю гауссовский шум с помощью функции RandG и дополнительно смотрю сколько ошибок получается. Например, если без шума входной сигнал А=[-0.5, +0.5], то с шумом A+RandG(0,N). Допустим N=0.4, то какое здесь будет отношение сигнал/шум? Я слышал о 3 сигмах и могу предположить, что с/ш=20Log(0.5/(3*(0.4^2)))=0.3 дБ... Возможно я и ошибаюсь, но не в этом суть... я лишь хотел узнать, кто копался с LDPC по стандарту DVB-S2 и имеет какое то представление о работе алгоритма. Было бы любопытно сравнить полученные результаты... Предложенные в найденных мной статьях BER-ы лишь частично удовлетворяют мое любопытство, так как зачастую не указывается число итераций или рассмотрен блок длинной в 64800 бит.

Сообщение отредактировал Neznaika - Dec 10 2014, 06:43
Go to the top of the page
 
+Quote Post
des00
сообщение Dec 10 2014, 06:45
Сообщение #60


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



в матлабе же есть DVB-S2 LDPC кодеры, собрать стенд дело простое и удовлетворить все что хотите


--------------------
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Dec 10 2014, 07:08
Сообщение #61


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(Neznaika @ Dec 10 2014, 10:41) *
Возможно я и ошибаюсь, но не в этом суть...


Замечательно. Вы не знаете, насколько далеко от предела работает ваш "декодер", то есть, фактически, работает ли он вообще, но суть, оказывается, не в этом.. :-))))


Цитата(Neznaika @ Dec 10 2014, 10:41) *
я лишь хотел узнать, кто копался с LDPC по стандарту DVB-S2 и имеет какое то представление о работе алгоритма. Было бы любопытно сравнить полученные результаты...


Как вы можете сравнить результаты, если у вас их нет? У меня написано несколько разных декодеров, и я могу назвать децибелы и итерации. Это и есть результат.

Я не знаю что такое RandG, но по всей видимости N=0.4 это и есть сигма. А что там дальше за бред? Почему сигма возводится в квадрат, а амплитуда сигнала при этом НЕ возводится? Сигнал было бы удобнее сделать от -1 до +1, тогда его мощность единица.
В вашем случае SNR = 20log(0.5/0.4)=1.9 дБ.
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Dec 10 2014, 07:49
Сообщение #62


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



Цитата(Dr.Alex @ Dec 10 2014, 11:08) *
Замечательно. Вы не знаете, насколько далеко от предела работает ваш "декодер", то есть, фактически, работает ли он вообще, но суть, оказывается, не в этом.. :-))))




Как вы можете сравнить результаты, если у вас их нет? У меня написано несколько разных декодеров, и я могу назвать децибелы и итерации. Это и есть результат.

Я не знаю что такое RandG, но по всей видимости N=0.4 это и есть сигма. А что там дальше за бред? Почему сигма возводится в квадрат, а амплитуда сигнала при этом НЕ возводится? Сигнал было бы удобнее сделать от -1 до +1, тогда его мощность единица.
В вашем случае SNR = 20log(0.5/0.4)=1.9 дБ.


Конечно я не знаю, ведь только собрал декодер и приступил к его изучению.. о том, что он как то работает я сужу по его способности исправлять ошибки. Тот кто возился с архитектурой, представленной в упомянутой мной статье думаю поймет о чем я говорил ранее.

Как я заметил количество ошибок во входном сигнале несколько зависит от входного отношения с/ш. На мой взгляд не трудно провести соответствие между этими величинами и итоговым результатом.

Вот что такое RandG вы действительно можете не знать... следовательно не можете знать, какие параметры там используются. За ваше предположение спасибо) Сигнал амплитудой 0.5 я сделал потому, что входные значения декодера у меня представлены в дополнительном коде и должны находится в диапазоне [-1,1). Вместе с шумом такой сигнал на мой взгляд более равномерно находится в нем, хотя некоторые выборки на копейку выходят за него, что контролируется.

Сообщение отредактировал Neznaika - Dec 10 2014, 07:52
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Dec 10 2014, 09:09
Сообщение #63


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(Neznaika @ Dec 10 2014, 11:49) *
Конечно я не знаю, ведь только собрал декодер и приступил к его изучению.. о том, что он как то работает я сужу по его способности исправлять ошибки.


Цитата(Neznaika @ Dec 10 2014, 11:49) *
Как я заметил количество ошибок во входном сигнале несколько зависит от входного отношения с/ш. На мой взгляд не трудно провести соответствие между этими величинами и итоговым результатом.


Цитата(Neznaika @ Dec 10 2014, 11:49) *
Сигнал амплитудой 0.5 я сделал потому, что входные значения декодера у меня представлены в дополнительном коде и должны находится в диапазоне [-1,1).


Мда, похоже, наставить вас на путь истинный только патриарху всея Руси под силу.

Видимо, бесполезно также объяснять, что на декодер подаются LLR, а вовсе не то что вы приняли из канала. Конечно, в случае гауссова шума подсчёт LLR это всего лишь умножение на константу, но результат почти всегда будет больше 1, иногда намного. Поэтому какой бы "дополнительный код" у вас не был, должно быть известно, сколько бит отводится под целую часть, и сколько под дробную.
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Dec 10 2014, 09:32
Сообщение #64


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



Цитата(Dr.Alex @ Dec 10 2014, 13:09) *
Мда, похоже, наставить вас на путь истинный только патриарху всея Руси под силу.

Видимо, бесполезно также объяснять, что на декодер подаются LLR, а вовсе не то что вы приняли из канала. Конечно, в случае гауссова шума подсчёт LLR это всего лишь умножение на константу, но результат почти всегда будет больше 1, иногда намного. Поэтому какой бы "дополнительный код" у вас не был, должно быть известно, сколько бит отводится под целую часть, и сколько под дробную.


Из всего выше приведенного мне понравилась идея des00 о сборе стенда в матлабе, лицензию на который вчера оплатили. Надеюсь удастся прояснить некоторые детали.

Патриарх мой близкий друг и иногда я с ним общаюсь, когда совсем что то не получается, а истинный путь известен только богу.

Речь шла о разной сходимости алгоритма при 2-х разных вариантах его реализации, потому я не сильно заморачивался в идеальности входного сигнала декодера. Если вам не трудно, то поясните, пожалуйста, как с вашей точки зрения в моделе должны вычисляться LLR, подаваемые на вход декодера. Пусть разрядность LLR 5 бит, 1 бит под целую и 4 бита под дробную части. Как я понимаю... 0х10 - это -1.0, а 0x0f - это 0.9375.
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Dec 10 2014, 09:44
Сообщение #65


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(Neznaika @ Dec 10 2014, 13:32) *
разрядность LLR 5 бит, 1 бит под целую и 4 бита под дробную части. Как я понимаю... 0х10 - это -1.0, а 0x0f - это 0.9375.


Неправильно канешна. Это значит у вас УЖЕ диапазон от -2 до +2. Но этого мало, в статьях видел что при менее чем 6-битной арифметике требования стандарта вообще не достигаются.

LLR = 2x/sigma^2, где х выход канала.

UPD: Впрочем, если в доке формат называется 1.4, то значит диапазон от -1 до 1.
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Dec 10 2014, 10:40
Сообщение #66


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



Цитата(Dr.Alex @ Dec 10 2014, 13:44) *
Неправильно канешна. Это значит у вас УЖЕ диапазон от -2 до +2. Но этого мало, в статьях видел что при менее чем 6-битной арифметике требования стандарта вообще не достигаются.

LLR = 2x/sigma^2, где х выход канала.

UPD: Впрочем, если в доке формат называется 1.4, то значит диапазон от -1 до 1.


Что касается выбранной разрядности, то могу лишь сослаться на Falcao по чьим статьям и реализую проект. Там не указан формат.. просто дана оптимальная разрядность входного сигнала на декодер в 5 бит.

По поводу LLR... пусть из кодера идут данные... C=1, 0, 1... модулятор их преобразует в Ch=-1, 1, -1... далее добавляем шум с помощью функции RandG, одним параметром из которого является sigma, т.е. Cn=Сh+RandG(0,sigma), далее получаем LLR=2*Cn/(sigma^2)... я вас правильно понял?
Ну и в этом случае входное отношение с/ш=20Log(1.0/sigma)?
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Dec 10 2014, 10:52
Сообщение #67


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Да. Или проще —20log(sigma)
Go to the top of the page
 
+Quote Post
Tpeck
сообщение Oct 5 2017, 15:36
Сообщение #68


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 14-03-06
Пользователь №: 15 243



Всем доброго времени суток.
Вот и меня настигла данная задача :0)
Помогите разобраться где я не прав.
Имеем DVBS2, R=1/4 и R=9/10.
Для R=1/4.
Грубо говоря к каждой CN подходит 4 узла VN или от каждая VN (в среднем) участвует в вычисление 3 CN.
Тогда для расчета CN(j,i) необходимо произвести 48600*3*4 условных операций в результате получим 48600*4 CN.
Для обновления 3*64800 VN(i,j) необходимо произвести 4*3*64800 условных операции.

Для R=9/10.
Грубо говоря к каждой CN подходит 30 узлов VN или от каждая VN (в среднем) участвует в вычисление 3 CN.
Тогда для расчета CN(j,i) необходимо произвести 6480*29*30 условных операций в результате получим 6480*30 CN.
Для обновления 3*64800 VN(i,j) необходимо произвести 30*3*64800 условных операции.
У меня получилось что для одной итерации 9/10 необходимо произвести ~ в 10 раз больше условных операций, чем для скорости R=1/4.
Что-то мне подсказывает, что я сильно не прав, но вот где не прав. Понять не могу.
Помогите пожалуйста. Спасибо.
PS: Хотя если что пропускная способность у всех скоростей -+20%, а R=9/10 данных отдает в 3.9 раза больше, то все равно не сходится....
Ведь пропускная способность у них одинаковая

Статья в прикрепленном файле.
Go to the top of the page
 
+Quote Post

5 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 14:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.02344 секунд с 7
ELECTRONIX ©2004-2016