comm.PreambleDetector

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

Описание

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 в то время как битные данные могут, кроме того, поддержать Booleanint8, и 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)];

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

idx = prbdet(pkt)
idx = 2×1

     6
    22

Используя последовательность преамбулы с хорошими свойствами корреляции, найдите последнюю выборку преамбулы для системы координат передаваемых данных в потоке задержанных принятых данных.

Задайте преамбулу с длиной 17 при помощи девятого корня Последовательности Задова-Чу. Сгенерируйте сигнал передачи путем конкатенации нескольких выборок от случайного сигнала, преамбулы и случайного сигнала 100 выборок.

M = 16;                                 % 16-QAM modulation
preamble = zadoffChuSeq(9,17);
x = randi([0 M-1],100,1);
xmod = qammod(x,M,UnitAverage=true);
txsig = [xmod(23:30); preamble; xmod];

Создайте переменный дробный Системный объект задержки. Введите переменную дробную задержку 82.3 выборки. Чтобы возвратить полную систему координат при выполнении переменного дробного объекта задержки, добавьте нулевое дополнение в конце переданного сигнала. Добавьте AWGN в переданный сигнал.

vfd = dsp.VariableFractionalDelay; 
samplesToDelay = 82.3;
txsigdelayed = vfd([txsig; zeros(ceil(samplesToDelay),1)],samplesToDelay);  

SNR = 40;
rxsig = awgn(txsigdelayed,SNR);

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

thr = 0.6*sum(abs(preamble).^2);
preambleDet = comm.PreambleDetector( ...
    Preamble=preamble, ...
    Threshold=thr, ...
    Detections='First');
[idx,detmet] = preambleDet(rxsig);
idx
idx = 107

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

plot(detmet)

Figure contains an axes object. The axes object contains an object of type line.

Создайте преамбулу и примените модуляцию 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

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

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

Алгоритмы

Битные входные параметры

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

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

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

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

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

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

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

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

Введенный в R2017b
Для просмотра документации необходимо авторизоваться на сайте