comm.CRCDetector

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

Описание

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

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

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

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

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

Создание

Описание

crcdetector = comm.CRCDetector создает детектор кода 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) создает детектор кода 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) = z7 + z 2 + 1.

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

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

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

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

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

Для получения дополнительной информации о прямых и непрямых алгоритмах см. Выявление ошибок и Коррекцию.

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

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

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

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

Отражайте контрольные суммы перед конечным XOR, заданные как 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 указывает на ошибку контрольной суммы.

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

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

release(obj)

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

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

Примеры

свернуть все

Передайте двоичные данные через генератор 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] Склар, Бернард. Цифровые коммуникации: основы и приложения. Englewood Cliffs, Нью-Джерси: Prentice Hall, 1988.

[2] Wicker, Stephen B. Системы управления ошибками для цифровой связи и хранения данных. Верхняя Седловая река, Нью-Джерси: Prentice Hall, 1995.

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

.