heldeintrlv

Восстановите упорядоченное расположение символов, переставленных с помощью 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 символы за один раз; 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. Этот синтаксис подходит для последнего в серии вызовов этой функции. Однако, если вы планируете вызвать эту функцию снова, чтобы продолжить процесс устранения чередования, синтаксис выше является более соответствующим.

Используя пару Interleaver-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

Смотрите также

Представлено до R2006a