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 символы за раз; k-я группа ngrp символы происходят из k-го столбца массива, начиная с строки 1 + (k-1) * stp. Некоторые выходные символы являются значениями по умолчанию 0, а не входными символами; точно так же некоторые входные символы остаются в массиве и не появляются в выходах.

[deintrlved,state] = heldeintrlv(data,col,ngrp,stp,init_state) инициализирует массив с символами, содержащимися в init_state.value вместо нулей. Структура init_state обычно является state выход от предыдущего вызова этой же функции, и не связан с соответствующим перемежителем. В этом синтаксисе некоторые выходные символы являются значениями по умолчанию 0, некоторые являются входными символами от data, а некоторые являются значениями инициализации из init_state.value.

deintrlved = heldeintrlv(data,col,ngrp,stp,init_state) является тем же синтаксисом, что и выше, за исключением того, что он не записывает окончательное состояние обратного перемежителя. Этот синтаксис подходит для последнего из ряда вызовов этой функции. Однако, если вы планируете вызвать эту функцию снова, чтобы продолжить процесс удаления перемежения, синтаксис выше более уместен.

Использование пары перемежителя-перемежителя

Чтобы использовать эту функцию как обратную helintrlv function, использовать то же col, ngrp, и stp входы в обеих функциях. В этом случае две функции являются обратными в том смысле, что применение helintrlv далее следуют heldeintrlv оставляет данные без изменений, после того как вы принимаете их совокупную задержку col*ngrp*ceil(stp*(col-1)/ngrp) во внимание. Чтобы узнать больше о задержках сверточных перемежителей, смотрите Задержки сверточных перемежителей.

Примечание

Потому что задержка является целым числом, кратным количеству символов в data, вы должны использовать heldeintrlv по крайней мере, дважды (возможно, больше раз, в зависимости от фактического значения задержки), прежде чем функция вернёт результаты, которые представляют больше, чем просто задержку.

Примеры

Восстановите перемеженные данные с учетом задержки пары перемежитель-перемежитель.

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