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