Перейти к содержанию

    

LDPC код из стандарта DVB-S2

Есть программа на 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Есть программа на 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 при разных С/Ш - все работает, ошибки исправляются. Ищите ошибки в модели. Товарищи, которые делали по стандарту, говорят, что в матрицах опечаток нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Промоделировал своими средствами для QPSK 1/4 при разных С/Ш - все работает, ошибки исправляются. Ищите ошибки в модели. Товарищи, которые делали по стандарту, говорят, что в матрицах опечаток нет.

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

 

Код программы в матлабе:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем Serg76

Поделиться сообщением


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

 

Почему не может? у меня 9.259259259259259e-07 получилось... а могло и не получиться.

Запускайте подольше и параллельно несколько потоков.

Поделиться сообщением


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

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

 

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

Изменено пользователем Serg76

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


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

такого я еще не слышал :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем icyrock

Поделиться сообщением


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

 

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

 

 

Поделиться сообщением


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

 

Имел ввиду реализацию декодера с фиксированной точкой, т.е. все метрики имеют ограниченный динамический диапазон. При работе с таким декодером сталкивался с тем что декодер вносил ошибки и было это конечно от неправильной реализации алгоритма декодирования, хотя он как вносил ошибки так и исправлял. Как вариант может у вас реализация декодера с фиксированной точкой и переполнение метрик наступает только на на указанных вами скоростях?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могли бы поделиться алгоритмом декодирования который использовали. Спасибо.

Поделиться сообщением


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

 

Алгоритм декодирования MIN-SUM, такой же как в DVB-S2, только нет коррекции. Ну еще он с одним проходом по строкам кодовой матрице. У меня он есть на матлабе, на си нет. Вам исходник нужен, я правильно понял?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Вам исходник нужен, я правильно понял?

Да, это было бы прекрасно иметь наглядный алгоритм декодирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Могу выправить вам алгоритм и проконсультировать, за плату. Пишите в личку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация