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) принимает seed значение для инициализации генератора равномерных случайных чисел, rand. Если вы хотите сгенерировать повторяемые шумовые выборки, либо сбросьте вход случайного потока перед вызовом bsc или использовать тот же начальный вход.

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

Примеры

свернуть все

Использование bsc function, ввести битовые ошибки в битах в случайной матрице с вероятностью 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 function, ввести битовые ошибки в битах в случайной матрице с вероятностью 0,01. Используйте декодер Viterbi, чтобы декодировать данные сообщения.

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

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

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

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