Восстановите упорядоченное расположение символов, переставленных с помощью helintrlv
[deintrlved,state] = heldeintrlv(data,col,ngrp,stp)
[deintrlved,state] = heldeintrlv(data,col,ngrp,stp,init_state)
deintrlved = heldeintrlv(data,col,ngrp,stp,init_state)
[deintrlved,state] = heldeintrlv(data,col,ngrp,stp)
восстанавливает упорядоченное расположение символов в data
путем размещения их в строку массивов строкой и затем выбора групп спиральным способом поместить в выводе, deintrlved
. data
должен иметь элементы col*ngrp
. Если data
является матрицей с несколькими строками и столбцами, он должен иметь строки col*ngrp
и функциональные процессы столбцы независимо. state
является структурой, которая содержит конечное состояние массива. state.value
хранит вводимые символы, которые остаются в столбцах col
массива и не появляются в выводе.
Функция использует массив внутренне для его вычислений. Массиву индексировали неограниченные строки 1, 2, 3..., и столбцы col
. Функция инициализирует верхнюю часть массива с нулями. Это затем помещает символы col*ngrp
от входа в следующие строки ngrp
массива. Функция помещает символы от массива в выводе, intrlved
, помещая символы ngrp
за один раз; kth группа символов ngrp
прибывает из kth столбца массива, начинающего со строки 1 + (k-1) *stp
. Некоторые выходные символы являются значениями по умолчанию 0, а не вводимые символы; точно так же некоторые вводимые символы оставляют в массиве и не появляются в выводе.
[deintrlved,state] = heldeintrlv(data,col,ngrp,stp,init_state)
инициализирует массив с символами, содержавшимися в init_state.value
вместо нулей. Структура init_state
обычно является state
вывод от предыдущего вызова до этой той же функции и не связан с соответствующим interleaver. В этом синтаксисе некоторые выходные символы являются значениями по умолчанию 0, некоторые - вводимые символы от data
, и некоторые - значения инициализации от init_state.value
.
deintrlved = heldeintrlv(data,col,ngrp,stp,init_state)
совпадает с синтаксисом выше, за исключением того, что он не записывает конечное состояние deinterleaver. Этот синтаксис подходит для последнего в серии вызовов этой функции. Однако, если вы планируете вызвать эту функцию снова, чтобы продолжить процесс устранения чередования, синтаксис выше является более соответствующим.
Чтобы использовать эту функцию в качестве инверсии функции helintrlv
, используйте тот же col
, ngrp
и входные параметры stp
в обеих функциях. В этом случае две функции являются инверсиями в том смысле, что применение helintrlv
, сопровождаемого heldeintrlv
, оставляет данные без изменений, после того, как вы принимаете их объединенную задержку во внимание col*ngrp*ceil(stp*(col-1)/ngrp)
. Чтобы узнать больше о задержках сверточного interleavers, смотрите Задержки Сверточного Interleavers.
Поскольку задержка является целочисленным кратным количество символов в data
, необходимо использовать heldeintrlv
, по крайней мере, дважды (возможно больше раз, в зависимости от фактического значения задержки), прежде чем функция возвратит результаты, которые представляют больше, чем только задержка.
Восстановите чередованные данные, учтя задержку interleaver-deinterleaver пары.
col = 4; ngrp = 3; stp = 2; % Helical interleaver parameters % Compute the delay of interleaver-deinterleaver pair. delayval = col * ngrp * ceil(stp * (col-1)/ngrp); len = col*ngrp; % Process this many symbols at one time. data = randi([0 9],len,1); % Random symbols data_padded = [data; zeros(delayval,1)]; % Pad with zeros. % Interleave zero-padded data. [i1,istate] = helintrlv(data_padded(1:len),col,ngrp,stp); [i2,istate] = helintrlv(data_padded(len+1:2*len),col,ngrp, ... stp,istate); i3 = helintrlv(data_padded(2*len+1:end),col,ngrp,stp,istate); % Deinterleave. [d1,dstate] = heldeintrlv(i1,col,ngrp,stp); [d2,dstate] = heldeintrlv(i2,col,ngrp,stp,dstate); d3 = heldeintrlv(i3,col,ngrp,stp,dstate); % Check the results. d0 = [d1; d2; d3]; % All the deinterleaved data d0_trunc = d0(delayval+1:end); % Remove the delay. ser = symerr(data,d0_trunc)
Вывод ниже показов, что никакие ошибки символа не произошли.
ser = 0