Восстановите упорядоченное расположение символов, переставленных с помощью 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
данные
должен иметь col*ngrp
элементы. Если data
матрица с несколькими строками и столбцами, она должна иметь col*ngrp
строки и функциональные процессы столбцы независимо. state
структура, которая содержит конечное состояние массива. state.value
вводимые символы хранилищ, которые остаются в col
столбцы массива и не появляются в выходе.
Функция использует массив внутренне в его расчетах. Массиву индексировали неограниченные строки 1, 2, 3..., и col
столбцы. Функция инициализирует верхнюю часть массива с нулями. Это затем помещает col*ngrp
символы от входа в следующий ngrp
строки массива. Функция помещает символы от массива в выходе, intrlved
, размещение ngrp
символы за один раз; k-ая группа ngrp
символы прибывают из k-ого столбца массива, начинающего со строки 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