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