кусающееся животное

Вычислите количество битовых ошибок и частоты ошибок по битам (BER)

Синтаксис

[number,ratio] = biterr(x,y)
[number,ratio] = biterr(x,y,k)
[number,ratio] = biterr(x,y,k,flg)
[number,ratio,individual] = biterr(...)

Описание

Для всех синтаксисов

Функция biterr сравнивает бинарные представления без знака элементов в x с теми в y. Схематика ниже иллюстрирует, как формы x и y определяют, какие элементы biterr сравнивает.

Каждый элемент x и y должен быть неотрицательным десятичным целым числом; biterr преобразовывает каждый элемент в свое естественное бинарное представление без знака. number является скаляром или вектором, который указывает на количество битов, которые отличаются. ratio является number, разделенный на общее количество битов. Общее количество битов, размер number и элементы, которые сравнивает biterr, определяются размерностями x и y и дополнительными параметрами.

Для определенных синтаксисов

[number,ratio] = biterr(x,y) сравнивает элементы в x и y. Если самое большое среди всех элементов x и y имеет точно k биты в своем самом простом бинарном представлении, общее количество битов является k временами количество записей в меньшем входе. Размеры x и y определяют, какие элементы сравнены:

  • Если x и y являются матрицами тех же размерностей, то biterr сравнивает x и y поэлементно. number является скаляром. Смотрите схематичный (a) в предыдущей фигуре.

  • Если вы - строка (соответственно, столбец), вектор и другой являются двумерной матрицей, то biterr сравнивает вектор поэлементно с каждой строкой (resp., столбец) матрицы. Длина вектора должна равняться количеству столбцов (resp., строки) в матрице. number является столбцом (resp., строка) вектор, mth запись которого указывает на количество битов, которые отличаются при сравнении вектора с mth строкой (resp., столбец) матрицы. Смотрите схематику (b) и (c) в фигуре.

[number,ratio] = biterr(x,y,k) совпадает с первым синтаксисом, за исключением того, что он полагает, что каждая запись в x и y имеет биты k. Общее количество битов является временами k количество записей меньшего из x и y. Ошибка происходит, если бы бинарное представление элемента x или y потребовало бы больше, чем цифры k.

[number,ratio] = biterr(x,y,k,flg) подобно предыдущим синтаксисам, за исключением того, что flg может заменить значения по умолчанию, которые управляют, какие элементы biterr сравнивает и как biterr вычисляет выходные параметры. Возможными значениями flg является 'row-wise', 'column-wise' и 'overall'. Приведенная ниже таблица описывает различия, которые следуют из различных комбинаций входных параметров. Как всегда, ratio является number, разделенный на общее количество битов. Если вы не обеспечиваете k как входной параметр, функция задает его внутренне как количество битов в самом простом бинарном представлении самого большого среди всех элементов x и y.

Сравнение Двумерной Матрицы x с Другим Входом y

Форма yflgТип сравненияномерОбщее количество битов
2D матрица 'overall' (значение по умолчанию) Поэлементно Общее количество битовых ошибок Количество времен k записей y
'row-wise'строка mth x по сравнению с mth строкой y Вектор-столбец, записи которого считают битовые ошибки в каждой строке Количество времен k записей y
'column-wise'столбец mth x по сравнению с mth столбцом y Вектор - строка, записи которого считают битовые ошибки в каждом столбце Количество времен k записей y
Вектор - строка 'overall'y по сравнению с каждой строкой x Общее количество битовых ошибок Количество времен k записей x
'row-wise' (значение по умолчанию) y по сравнению с каждой строкой x Вектор-столбец, записи которого считают битовые ошибки в каждой строке x Размер времен k y
Вектор-столбец 'overall'y по сравнению с каждым столбцом x Общее количество битовых ошибок Количество времен k записей x
'column-wise' (значение по умолчанию) y по сравнению с каждым столбцом x Вектор - строка, записи которого считают битовые ошибки в каждом столбце x Размер времен k y

[number,ratio,individual] = biterr(...) возвращает матричный individual, размерности которого являются теми из большего из x и y. Каждая запись individual соответствует сравнению между парой элементов x и y, и задает количество битов, которыми отличаются элементы в паре.

Примеры

свернуть все

Создайте две бинарных матрицы.

x = [0 0; 0 0; 0 0; 0 0]
x = 4×2

     0     0
     0     0
     0     0
     0     0

y = [0 0; 0 0; 0 0; 1 1]
y = 4×2

     0     0
     0     0
     0     0
     1     1

Определите количество битовых ошибок.

numerrs = biterr(x,y)
numerrs = 2

Определите количество ошибок, вычисленных по столбцам.

numerrs = biterr(x,y,[],'column-wise')
numerrs = 1×2

     1     1

Вычислите количество построчных ошибок.

numerrs = biterr(x,y,[],'row-wise')
numerrs = 4×1

     0
     0
     0
     2

Вычислите количество полных ошибок. Это имеет то же поведение как значение по умолчанию.

numerrs = biterr(x,y,[],'overall')
numerrs = 2

Демодулируйте шумный 64-QAM сигнал и оцените частоту ошибок по битам (BER) для области значений значений Eb/No. Сравните оценку BER с теоретическими значениями.

Установите параметры симуляции.

M = 64;                 % Modulation order
k = log2(M);            % Bits per symbol
EbNoVec = (5:15)';      % Eb/No values (dB)
numSymPerFrame = 100;   % Number of QAM symbols per frame

Инициализируйте вектор результатов.

berEst = zeros(size(EbNoVec));

Основной цикл обработки выполняет следующие шаги:

  • Сгенерируйте двоичные данные и преобразуйте в 64-ary символы

  • QAM модулируют символы данных

  • Передайте модулируемый сигнал через канал AWGN

  • Демодулируйте полученный сигнал

  • Преобразуйте демодулируемые символы в двоичные данные

  • Вычислите количество битовых ошибок

Цикл while продолжает обрабатывать данные, пока с или 200 ошибками не сталкиваются или 1e7, биты передаются.

for n = 1:length(EbNoVec)
    % Convert Eb/No to SNR
    snrdB = EbNoVec(n) + 10*log10(k);
    % Reset the error and bit counters
    numErrs = 0;
    numBits = 0;
    
    while numErrs < 200 && numBits < 1e7
        % Generate binary data and convert to symbols
        dataIn = randi([0 1],numSymPerFrame,k);
        dataSym = bi2de(dataIn);
        
        % QAM modulate using 'Gray' symbol mapping
        txSig = qammod(dataSym,M);
        
        % Pass through AWGN channel
        rxSig = awgn(txSig,snrdB,'measured');
        
        % Demodulate the noisy signal
        rxSym = qamdemod(rxSig,M);
        % Convert received symbols to bits
        dataOut = de2bi(rxSym,k);
        
        % Calculate the number of bit errors
        nErrors = biterr(dataIn,dataOut);
        
        % Increment the error and bit counters
        numErrs = numErrs + nErrors;
        numBits = numBits + numSymPerFrame*k;
    end
    
    % Estimate the BER
    berEst(n) = numErrs/numBits;
end

Определите теоретическую кривую BER с помощью berawgn.

berTheory = berawgn(EbNoVec,'qam',M);

Отобразите предполагаемые и теоретические данные о BER на графике. Предполагаемые точки данных BER хорошо выравниваются с теоретической кривой.

semilogy(EbNoVec,berEst,'*')
hold on
semilogy(EbNoVec,berTheory)
grid
legend('Estimated BER','Theoretical BER')
xlabel('Eb/No (dB)')
ylabel('Bit Error Rate')

Смотрите также

| |

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

Для просмотра документации необходимо авторизоваться на сайте