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