exponenta event banner

коммуникация. PreambleDetector

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

Описание

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

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

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

  2. Звонить step для обнаружения наличия преамбулы.

Примечание

В качестве альтернативы вместо использования step для выполнения операции, определенной объектом System, можно вызвать объект с аргументами, как если бы это была функция. Например, 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

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

Примеры

свернуть все

Укажите шестибитную преамбулу.

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). Это означает, что преамбула была успешно обнаружена.

Алгоритмы

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

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

Ввод символов

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

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

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

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

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

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

.
Представлен в R2016b