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

Посоветуйте помехоустойчивый код

Посоветуйте помехоустойчивый код. Имеется блок данных длиной 132 бита, его можно дополнить до 216 бит.

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


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

On 12/24/2020 at 9:58 AM, uriy said:

Посоветуйте помехоустойчивый код. Имеется блок данных длиной 132 бита, его можно дополнить до 216 бит.

Reed-solomon не подходит ?

https://opencores.org/projects?expanded=Arithmetic%20core%2CECC%20core

А Где в Ижевске работаете ?

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


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

On 12/24/2020 at 12:58 PM, uriy said:

Посоветуйте помехоустойчивый код. Имеется блок данных длиной 132 бита, его можно дополнить до 216 бит.

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

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


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

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

Работаю в частной шараге.

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


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

30 minutes ago, uriy said:

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

Работаю в частной шараге.

В Simulink не стоит по- экспериментировать с помехозащищенным кодированием  ?

https://www.ijltet.org/wp-content/uploads/2014/07/10.pdf

https://uk.mathworks.com/help/comm/ug/transmit-and-receive-shortened-reed-solomon-codes.html

https://fr.mathworks.com/matlabcentral/fileexchange/32127-reed-solomon-coding-_16-psk-using-simulink

N = 63;  % Codeword length
K = 51;  % Message length
S = 39;  % Shortened message length
M = 64;  % Modulation order
numErrors = 200;
numBits = 1e7;
ebnoVec = (8:13)';
[ber0,ber1] = deal(zeros(size(ebnoVec)));
errorRate = comm.ErrorRate;
rsEncoder = comm.RSEncoder(N,K,'BitInput',true);
rsDecoder = comm.RSDecoder(N,K,'BitInput',true);
rate = K/N;
for k = 1:length(ebnoVec)
    
    % Convert the coded Eb/No to an SNR. Initialize the error statistics
    % vector.
    snrdB = ebnoVec(k) + 10*log10(rate) + 10*log10(log2(M));
    errorStats = zeros(3,1);
    
    while errorStats(2) < numErrors && errorStats(3) < numBits
        
        % Generate binary data.
        txData = randi([0 1],K*log2(M),1);
        
        % Encode the data.
        encData = rsEncoder(txData);
        
        % Apply 64-QAM modulation.
        txSig = qammod(encData,M, ...
            'UnitAveragePower',true,'InputType','bit');
        
        % Pass the signal through an AWGN channel.
        rxSig = awgn(txSig,snrdB);
        
        % Demodulated the noisy signal.
        demodSig = qamdemod(rxSig,M, ...
            'UnitAveragePower',true,'OutputType','bit');
        
        % Decode the data.
        rxData = rsDecoder(demodSig);
        
        % Compute the error statistics.
        errorStats = errorRate(txData,rxData);
    end
    
    % Save the BER data, and reset the errorRate counter.
    ber0(k) = errorStats(1);
    reset(errorRate)
end

gp = rsgenpoly(N,K,[],0);
rsEncoder = comm.RSEncoder(N,K,gp,S,'BitInput',true);
rsDecoder = comm.RSDecoder(N,K,gp,S,'BitInput',true);
rate = S/(N-(K-S));

for k = 1:length(ebnoVec)
    
    % Convert the coded Eb/No to an SNR. Initialize the error statistics
    % vector.
    snrdB = ebnoVec(k) + 10*log10(rate) + 10*log10(log2(M));
    errorStats = zeros(3,1);
    
    while errorStats(2) < numErrors && errorStats(3) < numBits
        
        % Generate binary data.
        txData = randi([0 1],S*log2(M),1);
        
        % Encode the data.
        encData = rsEncoder(txData);
        
        % Apply 64-QAM modulation.
        txSig = qammod(encData,M, ...
            'UnitAveragePower',true,'InputType','bit');
        
        % Pass the signal through an AWGN channel.
        rxSig = awgn(txSig,snrdB);
        
        % Demodulated the noisy signal.
        demodSig = qamdemod(rxSig,M, ...
            'UnitAveragePower',true,'OutputType','bit');
        
        % Decode the data.
        rxData = rsDecoder(demodSig);
        
        % Compute the error statistics.
        errorStats = errorRate(txData,rxData);
    end
    
    % Save the BER data, and reset the errorRate counter.
    ber1(k) = errorStats(1);
    reset(errorRate)
end

berapprox = bercoding(ebnoVec,'RS','hard',N,K,'qam',64);

semilogy(ebnoVec,ber0,'o-',ebnoVec,ber1,'c^-',ebnoVec,berapprox,'k--')
legend('RS(63,51)','RS(51,39)','Theory')
xlabel('Eb/No (dB)')
ylabel('Bit Error Rate')
grid

 

psk_16_awgn_rs_simulink_2018.slx

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


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

Я извиняюсь, но может специалисты-кодировщики подскажут, что может быть закодировано здесь:

https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=159266&do=findComment&comment=1730325

Тоже думал в Anaconda (Python) поэкспериментировать с кодированием. Да что-то ничего толкового не приходит на ум. Есть числа с малой разницей в битах. То есть, непохоже на избыточное кодирование.  

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


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

19 hours ago, uriy said:

Я передаю данные через радиоканал. Факт обнаружения ошибки для меня бесполезен, нужно уметь восстанавливать как можно больше бит.

Определитесь мягкое или жесткое у вас решение, есть ли стирания, какова структура ошибок: пакетные или одиночные, какая вычислительная мощность в наличии, какая пропускная способность, требуемый остаточный коэффициент ошибок.

Мягкое даст +2 дБ выигрыша по ЭВК, но плохо держит пакетную ошибку, рид-соломон наоборот.

Если мягкое то как вариант неплохого кода Wimax DuoBinRCS, в варианте 18 байт данных, с кодом 2/3 получите ваши 27байт. В оставшиеся биты добавите CRC. ЭВК по 1е-6 составит порядка 5.5дБ

18 hours ago, gosha said:

N = 63;  % Codeword length
K = 51;  % Message length
S = 39;  % Shortened message length
M = 64;  % Modulation order

 

Не хорошо ему пойдет такой. у ТС 216 бит, для этого кода максимальный блок 63*6=378бит, слишком большое усечение получится. Но тем не менее, получится данных 22 символа, длина блока 36. Сможет исправить 7 символов или от 7 до 42 бит. ЭВК по 1е-6 составит порядка 3.5дБ

 

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


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

2 hours ago, uriy said:

Факт обнаружения ошибки для меня бесполезен, нужно уметь восстанавливать как можно больше бит.

Когда-то использовал коды Хемминга. Там просто и с обнаружением, и с восстановлением. Посмотрите в интернете, может Вам подойдет.

 

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


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

16 hours ago, Serhiy_UA said:

Когда-то использовал коды Хемминга. Там просто и с обнаружением, и с восстановлением. Посмотрите в интернете, может Вам подойдет.

проиграет бчх и рс коду. на 216 битах там 8 контрольных бит, восстанавливает 3 бита на блок. но намного проще, да)

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


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

Провел эксперименты с кодом рида-соломона (15, 11) с длиной символа 4 бита. Он может исправлять до 2 символов. Для меня это было эквивалентно возможности исправить любые 8 бит (2 символа по 4 бита) расположенные как угодно в блоке данных. Но оказалось даже 3 бита, расположенные в разных символах исправить этот код уже не может. 

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

Это код Голлея и Хемминга и может быть что-то еще?

 

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


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

3 minutes ago, uriy said:

Какие коды исправляют битовые ошибки, которые могут быть размазаны по всему пакету? 

Это код Голлея и Хемминга и может быть что-то еще?

Уже был ответ на этот вопрос:

On 12/24/2020 at 9:14 AM, blackfin said:

Можно отрезать 39 бит от кода BCH (255,171,23).

Если нужен жесткий декодер.

 

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


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

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

А сколько бит может исправить код BCH (255,171,23)? И ведь пишут что БЧХ и РС это похожие коды. БЧХ умеет исправлять биты размазанные по пакету?

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


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

8 minutes ago, uriy said:

А сколько бит может исправить код BCH (255,171,23)?

Этот код исправляет 11 бит.

9 minutes ago, uriy said:

БЧХ умеет исправлять биты размазанные по пакету?

Да, умеет.

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...