comm.CRCDetector

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

Описание

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] представляет полиномиальный x 3 + z 2 + 1.

  • Целочисленный вектор-строка, содержащий экспоненты z для ненулевых условий в полиноме в порядке убывания. Например, [3 2 0] представляет полиномиальный z 3 + z 2 + 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

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

Типы данных: логический

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

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

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

Типы данных: логический

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

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

Типы данных: логический

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

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

Типы данных: логический

Итоговые XOR в виде бинарного скаляра или вектора строки двоичных знаков с длиной равняются степени полинома генератора. Запуски операции "исключающее ИЛИ" с помощью значения FinalXOR свойство и контрольная сумма CRC прежде, чем соответствовать входной контрольной сумме. Скалярное значение расширено до вектора-строки из равной длины до степени полинома генератора. Установка 0 не эквивалентно никакой операции "исключающее ИЛИ".

Типы данных: логический

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

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

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