exponenta event banner

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

Обнаружение ошибок во входных данных с помощью CRC

Описание

comm.CRCDetector Система object™ вычисляет контрольные суммы контроля циклическим избыточным кодом (CRC) для всего принятого кодового слова. Для успешного обнаружения CRC в канале системы связи необходимо выровнять параметры свойств comm.CRCDetector Системный объект со спаренным comm.CRCGenerator Системный объект. Дополнительные сведения см. в разделе Работа детектора синдрома CRC.

Для обнаружения ошибок в принятом кодовом слове, содержащем биты последовательности CRC:

  1. Создать comm.CRCDetector и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

crcdetector = comm.CRCDetector создает объект System детектора кода CRC. Этот объект обнаруживает ошибки в принятых кодовых словах в соответствии с указанным полиномом генератора.

пример

crcdetector = comm.CRCDetector(Name,Value) задает свойства, используя одну или несколько пар имя-значение. Например, comm.CRCDetector('Polynomial','z^16 + z^14 + z + 1') конфигурирует системный объект детектора кода CRC для использования CRC-16 битов контроля циклическим избыточным кодом при проверке ошибок кода CRC в принятых кодовых словах. Заключите каждое имя свойства в кавычки.

crcdetector = comm.CRCDetector(poly,Name,Value) создает объект System детектора кода CRC. Этот объект имеет Polynomial свойство имеет значение polyи другие указанные свойства имеют указанные значения.

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Генераторный полином для алгоритма CRC, указанный как один из следующих:

  • Вектор многочлена, например 'z^3 + z^2 + 1'.

  • Двоичный вектор строки, который представляет коэффициенты полинома генератора в порядке степени убывания. Длина этого вектора равна (N + 1), где N - степень полинома генератора. Например ,[1 1 0 1] представляет многочлен x3 + z2 + 1.

  • Целочисленный вектор строки, содержащий экспоненты z для ненулевых членов в многочлене в порядке убывания. Например, [3 2 0] представляет многочлен z3 + z2 + 1.

Дополнительные сведения см. в разделе Символьное представление многочленов.

Некоторые обычно используемые генераторные многочлены включают в себя:

Метод CRCПолином генератора
CRC-32'z^32 + z^26 + z^23 + z^22 + z^16 + z^12 + z^11 + z^10 + z^8 + z^7 + z^5 + z^4 + z^2 + z + 1'
CRC-24 'z^24 + z^23 + z^14 + z^12 + z^8 + 1'
CRC-16 'z^16 + z^15 + z^2 + 1'
Реверсированный CRC-16'z^16 + z^14 + z + 1'
CRC-8'z^8 + z^7 + z^6 + z^4 + z^2 + 1'
CRC-4 'z^4 + z^3 + z^2 + z + 1'

Пример: 'z^7 + z^2 + 1', [1 0 0 0 0 1 0 1], и [7 2 0] представляют один и тот же многочлен, p (z) = z 7 + z 2 + 1.

Типы данных: double | char

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

Типы данных: logical

Использовать прямой алгоритм для вычисления контрольной суммы CRC, указанный как false или true.

При установке для этого свойства значения trueобъект использует прямой алгоритм для вычисления контрольной суммы CRC. При установке для этого свойства значения falseобъект использует непрямой алгоритм для вычисления контрольной суммы CRC.

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

Типы данных: logical

Отражать входные байты, указанные как false или true. Установить для этого свойства значение true переворачивать принятое кодовое слово по байтам перед вводом данных в сдвиговый регистр.

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

Типы данных: logical

Отражать контрольные суммы перед окончательным исключающим ИЛИ, указанные как false или true. Установить для этого свойства значение true для переключения контрольных сумм CRC вокруг их центров после полного прохождения принятого кодового слова через сдвиговый регистр.

При установке для этого свойства значения trueобъект разворачивает контрольные суммы CRC вокруг своих центров перед окончательным XOR.

Типы данных: logical

Конечный XOR, заданный как двоичный скаляр или двоичный вектор строки длиной, равной степени полинома генератора. Операция XOR выполняется с использованием значения FinalXOR и контрольную сумму CRC перед сравнением с входной контрольной суммой. Скалярное значение расширяется до вектора строки равной длины до степени полинома генератора. Установка 0 эквивалентно отсутствию операции XOR.

Типы данных: logical

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

Типы данных: double

Использование

Описание

пример

out = crcdetector(codeword) проверяет кодовые биты CRC для каждого принятого кадра кодового слова, удаляет контрольные суммы и затем сцепляет подкадры с выходным кадром.

пример

[msg,err] = crcdetector(codeword) также возвращает сигнал ошибки контрольной суммы, вычисленный при проверке битов кода CRC для каждого подкадра кодового слова.

Входные аргументы

развернуть все

Полученное кодовое слово, указанное как двоичный вектор столбца.

Типы данных: double | logical

Выходные аргументы

развернуть все

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

Длина выходного кадра равна n - k * r битов, где n - размер принятого кодового слова, k - количество контрольных сумм на кадр, и r - степень полинома генератора.

Сигнал ошибки контрольной суммы, возвращаемый как двоичный вектор столбца, который наследует тип данных входного сигнала. Длина Err равно значению ChecksumsPerFrame. Для каждого вычисления контрольной суммы значение элемента 0 в err указывает на отсутствие ошибки контрольной суммы и значение элемента 1 в err указывает на ошибку контрольной суммы.

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

развернуть все

stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Примеры

свернуть все

Пропускают двоичные данные через генератор CRC, вводят битовую ошибку и обнаруживают ошибку с помощью детектора CRC.

Создайте случайный двоичный вектор.

x = randi([0 1],12,1);

Кодирование кадра входного сообщения с помощью генератора CRC с помощью ChecksumsPerFrame свойство имеет значение 2. Это делит входящий кадр на два подкадра равной длины.

crcgenerator = comm.CRCGenerator([1 0 0 1],'ChecksumsPerFrame',2);
codeword = crcgenerator(x);

Декодируйте кодовое слово и убедитесь в отсутствии ошибок в любом подкадре.

crcdetector = comm.CRCDetector([1 0 0 1],'ChecksumsPerFrame',2);
[~, err] = crcdetector(codeword)
err = 2×1

     0
     0

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

codeword(end) = not(codeword(end));
[~,err] = crcdetector(codeword)
err = 2×1

     0
     1

Используйте код CRC для обнаружения ошибок кадра в шумном сигнале BPSK.

Создайте генератор CRC и пару детекторов, используя стандартный многочлен CRC-4, z4 + z3 + z2 + z + 1.

poly = 'z4+z3+z2+z+1';
crcgenerator = comm.CRCGenerator(poly);
crcdetector = comm.CRCDetector(poly);

Создайте 12-битовые кадры двоичных данных и добавьте биты CRC. На основании степени полинома к каждому кадру добавляется 4 бита. Примените модуляцию BPSK и передайте сигнал через канал AWGN. Демодулируйте и используйте детектор CRC для определения ошибки кадра.

numFrames = 20;
frmError = zeros(numFrames,1);

for k = 1:numFrames
    data = randi([0 1],12,1);                 % Generate binary data
    encData = crcgenerator(data);                   % Append CRC bits
    modData = pskmod(encData,2);              % BPSK modulate
    rxSig = awgn(modData,5);                  % AWGN channel, SNR = 5 dB
    demodData = pskdemod(rxSig,2);            % BPSK demodulate
    [~,frmError(k)] = crcdetector(demodData); % Detect CRC errors
end

Идентифицируют кадры, в которых обнаружены ошибки битов кода CRC.

find(frmError)
ans = 6

Подробнее

развернуть все

Ссылки

[1] Склар, Бернард. Цифровые коммуникации: основы и приложения. Энглвуд Клиффс, Нью-Джерси: Прентис-Холл, 1988.

[2] Уикер, Стивен Б. Системы управления ошибками для цифровой связи и хранения. Река Верхнее Седло, Н.Дж.: Прентис Холл, 1995.

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

.