bsc

Бинарный симметричный канал

Описание

ndata = bsc(data,probability) передает сигнал двоичного входа data через бинарный симметричный канал, имеющий заданную вероятность появления ошибки. Канал вводит немного ошибки и процессов каждый элемент входа data независимо. data должен быть массив двоичных чисел или массива Галуа в GF (2). probability должен быть скаляр от 0 до 1.

ndata = bsc(data,probability,streamhandle) принимает, что случайный потоковый указатель генерирует универсальные шумовые выборки при помощи rand. Обеспечение случайного потокового указателя или использование reset (RandStream) функция на случайном потоковом объекте по умолчанию позволяет вам сгенерировать повторяемые шумовые выборки. Для получения дополнительной информации смотрите RandStream.

ndata = bsc(data,probability,seed) принимает начальное значение, для инициализации равномерного генератора случайных чисел, rand. Если вы хотите сгенерировать повторяемые шумовые выборки, то любой сброс случайный потоковый ввод перед вызовом bsc или используйте тот же вход seed.

[ndata,err] = bsc(___) возвращает массив, содержащий ошибки канала, с помощью любого из предыдущих синтаксисов.

Примеры

свернуть все

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

z = randi([0 1],100,100); % Random matrix
nz = bsc(z,.15); % Binary symmetric channel
[numerrs, pcterrs] = biterr(z,nz) % Number and percentage of errors
numerrs = 1509
pcterrs = 0.1509

Выход ниже типичен. Для относительно маленьких наборов данных процент битовых ошибок не точно 15% в большинстве испытаний. Если размер матричного z является большим, процент битовой ошибки будет ближе к точной вероятности, которую вы задаете.

Используя bsc функционируйте, введите битовые ошибки в битах в случайной матрице с вероятностью 0.01. Используйте Декодер Витерби, чтобы декодировать данные о сообщении.

Задайте решетку для Декодера Витерби. Сгенерируйте и закодируйте данные о сообщении.

trel = poly2trellis([4 3],[4 5 17;7 4 2]);
msg = ones(10000,1);

Создайте объекты для сверточного энкодера, Декодера Витерби и калькулятора коэффициента ошибок.

hEnc = comm.ConvolutionalEncoder(trel);
hVitDec = comm.ViterbiDecoder(trel, 'InputFormat','hard', 'TracebackDepth',...
    2, 'TerminationMethod', 'Truncated');
hErrorCalc = comm.ErrorRate;

Закодируйте данные о сообщении. Введите битовые ошибки. Отобразите общее количество ошибок.

code = hEnc(msg);
[ncode,err] = bsc(code,.01);
numchanerrs = sum(sum(err))
numchanerrs = 158

Декодируйте данные и проверяйте количество ошибок после декодирования.

dcode = hVitDec(ncode);
berVec = hErrorCalc(msg, dcode);
ber = berVec(1)
ber = 0.0049
numsyserrs = berVec(2)
numsyserrs = 49

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

Представлено до R2006a