comm.PreambleDetector

Обнаружение преамбулы в данных

Описание

The comm.PreambleDetector Системная object™ обнаруживает преамбулу в последовательности входных данных. Преамбула является набором символов или бит, используемых в системах связи, основанных на пакетах, для указания начала пакета. Объект детектора преамбулы находит местоположение, соответствующее концу преамбулы.

Чтобы обнаружить преамбулу в последовательности входных данных:

  1. Создайте comm.PreambleDetector и установите свойства объекта.

  2. Функции step обнаружить наличие преамбулы.

Примечание

Кроме того, вместо использования step метод для выполнения операции, заданной системным объектом, можно вызвать объект с аргументами, как если бы это была функция. Для примера, y = step(obj,x) и y = obj(x) выполнять эквивалентные операции.

Конструкция

prbdet = comm.PreambleDetector создает объект детектора преамбулы, prbdet, с использованием свойств по умолчанию.

prbdet = comm.PreambleDetector(Name,Value) задает дополнительные свойства, используя Name,Value пар. Неопределенные свойства имеют значения по умолчанию.

prbdet = comm.PreambleDetector(prb,Name,Value) задает преамбулу, prb в дополнение к свойствам, заданным при помощи Name,Value пар.

Пример:

prbdet = comm.PreambleDetector('Input','Bit','Detections','First');

Свойства

расширить все

Тип входных данных, заданный как 'Symbol' или 'Bit'. Для двоичных входов установите этот параметр равным 'Bit'. Для всех других входов установите этот параметр равным 'Symbol'. Данные о символах могут быть типа данных single или double в то время как битовые данные могут, в сложение, поддерживать Boolean, int8, и uint8 типы данных.

Последовательность преамбулы, заданная как действительный или сложный вектор-столбец. Объект использует эту последовательность, чтобы обнаружить присутствие преамбулы в входных данных. Если Input является 'Bit'Преамбула должна быть двоичной последовательностью. Если Input является 'Symbol'преамбула может быть любой действительной или сложной последовательностью.

Типы данных: double | single | logical | int8 | uint8
Поддержка комплексного числа: Да

Порог обнаружения, заданный как неотрицательный скаляр. Когда вычисленная метрика обнаружения больше или равна Threshold, детектируется преамбула. Это свойство доступно при Input установлено в 'Symbol'. Настраиваемый.

Количество преамбул для обнаружения, заданное как 'All' или 'First'.

  • 'All' - Обнаруживает все преамбулы в последовательности входных данных.

  • 'First' - Обнаружение только первой преамбулы в последовательности входных данных.

Методы

шагОбнаружение преамбулы в данных
Общий для всех системных объектов
release

Разрешить изменение значения свойства системного объекта

reset

Сброс внутренних состояний Системного объекта

Примеры

свернуть все

Задайте шестибитную преамбулу.

prb = [1 0 0 1 0 1]';

Создайте объект детектора преамбулы с помощью prb преамбулы и взятия битовых входов.

prbdet = comm.PreambleDetector(prb,'Input','Bit');

Сгенерируйте двоичную последовательность данных, содержащую две преамбулы и использующую случайные биты для представления полей данных.

pkt = [prb; randi([0 1],10,1); prb; randi([0 1],10,1)];

Найдите индексы двух преамбул. Индексы соответствуют концу преамбул.

idx = prbdet(pkt)
idx = 2×1

     6
    22

Детектор правильно идентифицировал индексы 6 и 22 как конец двух преамбул, вставленных в последовательность.

Создайте преамбулу и примените QPSK модуляцию.

p1 = [0 1 2 3 3 2 1 0]';
p = [p1; p1];
prb = pskmod(p,4,pi/4,'gray');

Создайте comm.PreambleDetector объект с использованием преамбулы prb.

prbdet = comm.PreambleDetector(prb)
prbdet = 
  comm.PreambleDetector with properties:

         Input: 'Symbol'
      Preamble: [16x1 double]
     Threshold: 3
    Detections: 'All'

Сгенерируйте последовательность случайных символов. Первая последовательность представляет последние 20 символов из предыдущего пакета. Вторая последовательность представляет символы из текущего пакета.

d1 = randi([0 3],20,1);
d2 = randi([0 3],100,1);

Модулируйте две последовательности.

x1 = pskmod(d1,4,pi/4,'gray');
x2 = pskmod(d2,4,pi/4,'gray');

Создайте последовательность модулированных символов, состоящих из остатка предыдущего пакета, преамбулы и текущего пакета.

y = [x1; prb; x2];

Добавьте белый Гауссов шум.

z = awgn(y,10);

Определите индекс преамбулы и метрику обнаружения.

[idx,detmet] = prbdet(z);

Вычислим количество элементов в idx. Поскольку количество элементов больше единицы, порог обнаружения слишком низок.

numel(idx)
ans = 80

Отобразите пять самых больших метрик обнаружения.

detmetSort = sort(detmet,'descend');
detmetSort(1:5)
ans = 5×1

   16.3115
   13.6900
   10.5698
    9.1920
    8.9706

Увеличьте порог и определите индекс преамбулы.

prbdet.Threshold = 15;
idx = prbdet(z)
idx = 36

Результат 36 соответствует сумме длины преамбулы (16) и остальных выборок в предыдущем пакете (20). Это указывает, что преамбула успешно обнаружена.

Алгоритмы

Битовые входы

Когда входные данные состоят из бит, детектор преамбулы использует точное соответствие шаблона.

Входные параметры символа

Когда входные данные состоят из символов, детектор преамбулы использует алгоритм перекрестной корреляции. Фильтр с конечной импульсной характеристикой (КИХ), в котором коэффициенты заданы из преамбулы, вычисляет перекрестную корреляцию между входными данными и преамбулой. Когда последовательность входа отсчетов совпадает с преамбулой, выход фильтра достигает своего пика. Индекс пика соответствует концу последовательности преамбулы в входных данных. Смотрите Discrete FIR Filter (Simulink) для получения дополнительной информации об алгоритме конечной импульсной характеристики.

Значения перекрестной корреляции, которые больше или равны заданному порогу, сообщаются как peaks.

  • Если порог обнаружения слишком низок, алгоритм обнаружит ложный peaks или, в крайнем случае, обнаружит столько обнаруженного peaks, сколько входы отсчетов.

  • Если порог обнаружения слишком высок, алгоритм пропустит обнаружение peaks или, в крайнем случае, не обнаружит peaks.

Следовательно, выбор порога обнаружения является критическим.

Расширенные возможности

.
Введенный в R2016b