Уникально декодируемый код с использованием MATLAB
Опубликовано: 2 Марта, 2022
Код является отличным, если каждое кодовое слово распознается друг от друга (т. Е. Планирование от исходных сообщений до кодовых слов скоординировано). Отдельный код является чрезвычайно декодируемым, если каждое кодовое слово распознается, когда оно пропитано группой кодовых слов, или если первая исходная компоновка может быть полностью преобразована из закодированной двоичной последовательности.
Тест на уникальную декодируемость:
- Рассмотрим два кодовых слова A и B. A состоит из k бит, а B состоит из n бит (k <n), если первые k битов B идентичны A, то A называется префиксом B, оставшиеся последние nk битов называются висящим суффиксом. Пример: A = 010, B = 01001, висящий суффикс - 01.
- Создайте список всех кодовых слов, проверьте все пары кодовых слов, чтобы увидеть, является ли какое-либо кодовое слово префиксом другого, всякий раз, когда такая пара присутствует, добавьте висящий суффикс в список, если вы не добавили тот же висящий суффикс в список в предыдущей итерации.
- Продолжайте повторять процедуру для расширенного списка, пока не будут сравнены все кодовые слова.
Итоги:
- У вас есть свисающий суффикс, который является кодовым словом.
- Висячих суффиксов нет.
- Свисающий суффикс не является кодовым словом.
- Если в результате вы получите пункт 5, код нельзя однозначно декодировать.
- Во всех остальных случаях он однозначно декодируется.
Примеры:
'0, 01, 011, 0111' - уникально декодируемый код '0, 1, 00, 11' не является однозначно декодируемым кодом
Code:
% Given Code code = { "0" , "01" , "011" , "0111" }; disp(code) i = 1; flag1 = 0; % Storing the code in temp variable temp = code; % Create datastore ds = {}; while i < length(temp) j = 1; while j < length(temp) c1 = temp{i}; c2 = temp{j}; l1 = length(c1); l2 = length(c2); % To find dangling suffix if l1 < l2 if c1 == c2(1 : l1) % Extract dangling suffix after comparing codewords tsuffix = c2(l1 + 1 : l2); l = length(ds); % Append tsuffix to ds if l == 0 % If no dangling suffix available then tsuffix % is new dangling suffix ds = {tsuffix}; else k = 1; while k <= l % Compare new tsuffix with "k"th dangling suffix flag = strcmp(tsuffix, ds{k}); if flag ~= 1; k = k + 1; end end if flag == 0 % Attach tsuffix to dangling suffix array ds = [ds {tsuffix}]; l = length(ds); end end % Append tsuffix to code lt = length(temp); k = 1; while k <= lt % Compare each extracted dangling suffix % with "k"th original codeword flag = strcmp(tsuffix, temp{k}); if flag == 1 flag1 = 1; disp( "Code is not Uniquely decodable" ); break ; else k = k + 1; end end if flag == 0 % Attach extracted dangling suffix array to codeword array temp = {temp(:) tsuffix}; lt = length(temp); end end end if flag1 == 1 break ; end j = j + 1; end if flag1 == 1 break ; end i = i + 1; end if flag1 == 0 disp( "Code is Uniquely Decodable" ); end |
Выход:
'0' 01 '011' 0111 ' Код однозначно декодируется