Переставьте символы с помощью спирального массива
intrlved = helintrlv(data,col,ngrp,stp)
[intrlved,state] = helintrlv(data,col,ngrp,stp)
[intrlved,state] = helintrlv(data,col,ngrp,stp,init_state)
intrlved = helintrlv(data,col,ngrp,stp) переставляет символы в data путем размещения их в неограниченный массив строк спиральным способом и затем размещения строк массива в выходе, intrlvedданные должен иметь col*ngrp элементы. Если data матрица с несколькими строками и столбцами, она должна иметь col*ngrp строки и функциональные процессы столбцы независимо.
Функция использует массив внутренне в его расчетах. Массиву индексировали неограниченные строки 1, 2, 3..., и col столбцы. Функциональные разделы col*ngrp символы от входа в последовательные группы ngrp символы. Функция размещает kth группу в массив вдоль столбца k, начинающего со строки 1 + (k-1) *stp. Положения в массиве, которые не содержат вводимые символы, имеют значения по умолчанию 0. Функция помещает col*ngrp символы от массива в выходе, intrlved, путем чтения первого ngrp строки последовательно. Некоторые выходные символы являются значениями по умолчанию 0, а не вводимые символы; точно так же некоторые вводимые символы оставляют в массиве и не появляются в выходе.
[intrlved,state] = helintrlv(data,col,ngrp,stp) возвращает структуру, которая содержит конечное состояние массива. state.value вводимые символы хранилищ, которые остаются в col столбцы массива и не появляются в выходе.
[intrlved,state] = helintrlv(data,col,ngrp,stp,init_state) инициализирует массив с символами, содержавшимися в init_state.value. Структура init_state обычно state выведите от предыдущего вызова до этой той же функции, и не связано с соответствующим deinterleaver. В этом синтаксисе некоторые выходные символы являются значениями по умолчанию 0, некоторые - вводимые символы от data, и некоторые - значения инициализации от init_state.value.
Пример ниже перестраивает целые числа от 1 до 24.
% Interleave some symbols. Record final state of array. [i1,state] = helintrlv([1:12]',3,4,1); % Interleave more symbols, remembering the symbols that % were left in the array from the earlier command. i2 = helintrlv([13:24]',3,4,1,state); disp('Interleaved data:') disp([i1,i2]') disp('Values left in array after first interleaving operation:') state.value{:}
Во время последовательных вызовов helintrlv, это внутренне создает массивы с тремя столбцами
[1 0 0; 2 5 0; 3 6 9; 4 7 10; 0 8 11; 0 0 12]
и
[13 8 11; 14 17 12; 15 18 21; 16 19 22; 0 20 23; 0 0 24]
Во втором массиве, показанном выше, 8, 11, и 12 являются значениями, оставленными в массиве от предыдущего вызова до функции. Определение init_state введите во втором вызове причин функции его, чтобы использовать те значения, а не значения по умолчанию 0.
Выход из этого примера ниже. (Матрица была транспонирована в целях отображения.) Чередованные данные прибывают из лучших четырех строк массивов с тремя столбцами, показанных выше. Заметьте, что некоторые символы в первой половине чередованных данных являются значениями по умолчанию 0, некоторые символы во второй половине чередованных данных оставили в массиве от первого вызова до helintrlv, и некоторые вводимые символы (20, 23, и 24) не появляются в чередованных данных вообще.
Interleaved data:
Columns 1 through 10
1 0 0 2 5 0 3 6 9 4
13 8 11 14 17 12 15 18 21 16
Columns 11 through 12
7 10
19 22
Values left in array after first interleaving operation:
ans =
[]
ans =
8
ans =
11 12
Пример на странице с описанием для heldeintrlv также использование эта функция.