Восстановите упорядоченное расположение символов, используя указанные регистры сдвига
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.