MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем
 

Обработка сигналов и изображений\Communications Toolbox

Список функций CommunicationsToolbox: Низкоуровневые функции помехоустойчивого кодирования и декодирования

  В оглавление \ К следующему разделу \ К предыдущему разделу
HELDEINTRLV
Сверточное деперемежение со спиральным сканированием

Синтаксис:

[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, заполняя внутренний промежуточный массив по строкам и затем считывая группы элементов из его столбцов по спирали. Если входной параметр data является вектором, он должен содержать cols*ngrp элементов. Если входной параметр data является матрицей, она должна содержать cols*ngrp строк; ее столбцы обрабатываются независимо. Второй выходной параметр state - это структура, в которой хранится заключительное состояние внутреннего массива. В поле state.value хранятся входные символы, не использованные при формировании выходного сигнала.

Операции, производимые функцией, можно представить как заполнение внутреннего промежуточного массива. Этот массив имеет col столбцов и неограниченное число строк, нумеруемых как 1, 2, 3 и т. д. Прежде всего верхняя часть массива заполняется нулями. Затем функция построчно заполняет ngrp верхних строк массива, используя для этого col*ngrp входных символов. Далее функция формирует выходной сигнал deintrlved длиной col*ngrp символов, считывая элементы группами по ngrp символов; элементы k-й группы берутся из k-го столбца, начиная со строки 1 + (k - 1)*stp. При этом некоторые выходные символы имеют принятые по умолчанию нулевые значения, а часть входных символов так и не появляется на выходе.

[deintrlved,state] = heldeintrlv(data,col,ngrp,stp,init_state)

В данном варианте синтаксиса промежуточный массив инициализируется не нулями, а значениями из поля структуры init_state.value. Дополнительный входной параметр init_state должен быть структурой; как правило, здесь используется значение выходного параметра state, полученное при предыдущем вызове той же самой функции. К соответствующему перемежителю данный параметр не имеет отношения. В данном случае часть выходных символов имеет принятые по умолчанию нулевые значения, часть представляет собой входные символы из массива data и еще часть является начальными значениями из поля структуры init_state.value.

deintrlved = heldeintrlv(data,col,ngrp,stp,init_state)

То же, что предыдущий вариант синтаксиса, но в данном случае не сохраняется заключительное состояние внутреннего массива деперемежителя. Такой способ вызова можно использовать при последнем из серии последовательных вызовов функции heldeintrlv. Однако, если функция должна будет вызываться в дальнейшем для продолжения процесса деперемежения, следует использовать предыдущий вариант синтаксиса.

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

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

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

Примеры

Приведенный ниже пример показывает, как восстановить данные после перемежения, учитывая вносимую парой "перемежитель-деперемежитель" задержку.

  col = 4; ngrp = 3; stp = 2; % Параметры спирального перемежения
  % Вычисляем задержку, вносимую парой "перемежитель-деперемежитель"
  delayval = col * ngrp * ceil(stp * (col-1)/ngrp);
  len = col*ngrp;           % Длина блока символов для одной операции 
  data = randint(len,1,10); % Случайные данные 
  data_padded = [data; zeros(delayval,1)]; % Дополняем данные нулями
  % Перемежаем данные, дополненные нулями
  [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);
  % Деперемежение
  [d1,dstate] = heldeintrlv(i1,col,ngrp,stp);
  [d2,dstate] = heldeintrlv(i2,col,ngrp,stp,dstate);
  d3 = heldeintrlv(i3,col,ngrp,stp,dstate);
  % Сравниваем результаты деперемежения с исходными данными
  d0 = [d1; d2; d3];             % Полный результат деперемежения
  d0_trunc = d0(delayval+1:end); % Компенсируем задержку
  ser = symerr(data,d0_trunc)
Результат работы данного примера показывает, что исходный сигнал восстановлен без ошибок.
  ser =
       0
Сопутствующие функции: helintrlv

  В оглавление \ К следующему разделу \ К предыдущему разделу

 

Поиск по сайту:

Система Orphus

Яндекс.Метрика