Восстановите упорядоченное расположение символов, используя указанные регистры сдвига
deintrlved = muxdeintrlv(data,delay)
[deintrlved,state] = muxdeintrlv(data,delay)
[deintrlved,state] = muxdeintrlv(data,delay,init_state)
deintrlved = muxdeintrlv(data,delay) восстанавливает упорядоченное расположение элементов в data при помощи набора внутренних регистров сдвига, каждый со своим значением задержки. delay вектор, значения которого указывают, сколько символов может иметь каждый регистр сдвига. Длина delay - количество регистров сдвига. Прежде чем функция начнет обрабатывать данные, она инициализирует все регистры сдвига с нулями. Если data является матрицей с несколькими строками и столбцами, функция обрабатывает столбцы независимо.
[deintrlved,state] = muxdeintrlv(data,delay) возвращает структуру, которая содержит окончательное состояние регистров сдвига. state.value хранит любые нешифрованные символы. state.index - индекс следующего регистра, который будет сдвинут.
[deintrlved,state] = muxdeintrlv(data,delay,init_state) инициализирует регистры сдвига с символами, содержащимися в init_state.value и направляет первый входной символ в регистр сдвига, на который ссылаются init_state.index. Структура init_state обычно является state выход от предыдущего вызова этой же функции, и не связан с соответствующим перемежителем.
Чтобы использовать эту функцию как обратную muxintrlv function, использовать то же delay вход в обе функции. В этом случае две функции являются обратными в том смысле, что применение muxintrlv далее следуют muxdeintrlv оставляет данные без изменений, после того как вы принимаете их совокупную задержку length(delay)*max(delay) во внимание. Чтобы узнать больше о задержках сверточных перемежителей, смотрите Задержки сверточных перемежителей.
Приведенный ниже пример иллюстрирует, как использовать вход и вывод состояния при вызове muxdeintrlv неоднократно. Заметьте, что [deintrlved1; deintrlved2] то же, что и deintrlved.
delay = [0 4 8 12]; % Delays in shift registers symbols = 100; % Number of symbols to process % Interleave random data. intrlved = muxintrlv(randi([0 1],symbols,1),delay); % Deinterleave some of the data, recording state for later use. [deintrlved1,state] = muxdeintrlv(intrlved(1:symbols/2),delay); % Deinterleave the rest of the data, using state as an input argument. deintrlved2 = muxdeintrlv(intrlved(symbols/2+1:symbols),delay,state); % Deinterleave all data in one step. deintrlved = muxdeintrlv(intrlved,delay); isequal(deintrlved,[deintrlved1; deintrlved2])
Ниже приведен выход.
ans =
1
Другой пример, использующий эту функцию, - в сверточном перемежении и обращенном перемежении с использованием последовательности последовательных целых чисел в MATLAB.
[1] Heegard, Chris, and Stephen B. Wicker, Turbo Coding, Boston, Kluwer Academic Publishers, 1999.