Восстановите упорядоченное расположение символов с помощью заданных сдвиговых регистров
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
выведите от предыдущего вызова до этой той же функции, и не связано с соответствующим interleaver.
Использовать эту функцию в качестве инверсии muxintrlv
функция, используйте тот же delay
введите в обеих функциях. В этом случае две функции являются инверсиями в том смысле, что применение muxintrlv
сопровождаемый muxdeintrlv
оставляет данные без изменений, после того, как вы возьмете их объединенную задержку length(delay)*max(delay)
во внимание. Чтобы узнать больше о задержках сверточного interleavers, смотрите Задержки Сверточного Interleavers.
Пример ниже иллюстрирует, как использовать ввод и вывод состояния при вызове 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, Крис, и Стивен Б. Викер, турбокодирование, Бостон, Kluwer академические издатели, 1999.