Я пытаюсь декодировать массив из 1 и 0 с использованием кодирования с переменной длиной. Например, если строка [1 0 1 1]
и A = [1 0]
и B = [1 1]
, моя программа должна дать мне строку, например: ['A', 'B']
.Как заполнить пустой массив символов?
Я первый создал пустой массив символов x = repmat(char(0),1,10)
Но теперь, когда я обнаружить кодовое слово, используя для цикла и если заявления, как добавить символ в массив x
? Будет ли отображаться символ в декодированной строке?
Второй фрагмент кода возвращает ошибку, если длина x равна нулю. >> x (end) = 2 Попытка доступа к x (0); индекс должен быть положительным целым или логическим. Даже если он был предварительно выделен и имеет длину, отличную от нуля, последний элемент x просто будет переписываться, правильно? Необходимо обновить переменную счетчика или использовать итерированную переменную в цикле for в зависимости от того, как выполняется декодирование. – Falimond
Я получаю сообщение об ошибке. Моя программа проверяет каждый бит в коде один за другим. Предположим, что A = [1 1], B = [1 0 1] и C = [1 0 0]. Например, если мое кодовое слово code = [1 0 1 1 1], оно сначала проверит код (n), где n = 1. Если code (n) == 1, он проверяет, является ли код (n + 1) == 0. Тогда, если это правда, он проверяет код (n + 3). Если код (n + 3) == 1, то он знает, что он сохраняет букву как «B», иначе она будет храниться как C. Проблема возникает, когда короткое кодовое слово. Как будто это [1 0 1]. Когда он проверяет код (n + 3), он ничего не находит, потому что кодовое слово закончилось, поэтому оно возвращает ошибку. Как это исправить? – Kaya311
@ Kaya311 Посмотрите, помогает ли код, который я добавил. Вы должны иметь возможность легко расширять словарь или вносить небольшие изменения, если это необходимо. Конечно, это не включает проверку поврежденного сообщения - предполагает вполне достоверное сообщение без неизвестных кодовых последовательностей. – Falimond