Восстановление порядка символов с помощью указанных регистров сдвига
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 функция, использовать то же самое 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] Хигард, Крис и Стивен Б. Викер, Turbo Coding, Boston, Kluwer Academic Publishers, 1999.