bsc

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

Синтаксис

ndata = bsc(data,probability)
ndata = bsc(data,probability,streamhandle)
ndata = bsc(data,probability,seed)
[ndata,err] = bsc(___)

Описание

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

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

ndata = bsc(data,probability,seed) принимает значение 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