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

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

Для просмотра документации необходимо авторизоваться на сайте