exponenta event banner

Методы анализа частоты битовых ошибок

В этом разделе описывается, как вычислить статистику ошибок для различных систем связи.

Вычисление статистики теоретических ошибок

biterr функция, обсуждаемая в разделе «Вычислить SER и BER с использованием смоделированных данных», может помочь вам собрать эмпирическую статистику ошибок, но проверка результатов путем сравнения их с теоретической статистикой ошибок является хорошей практикой. Для некоторых типов систем связи существуют выражения закрытой формы для вычисления частоты битовых ошибок (BER) или приблизительной границы на BER. Функции, перечисленные в этой таблице, вычисляют выражения закрытой формы для BER или привязку к нему для указанных типов систем связи.

Тип системы связиФункция
Некодированный канал AWGN berawgn
Некодированный канал Рэлея и Рисика с замиранием berfading
Кодированный канал AWGN bercoding
Некодированный канал AWGN с несовершенной синхронизацией bersync

Аналитические выражения, используемые в этих функциях, рассматриваются в разделе Аналитические выражения и обозначения, используемые в анализе BER. На страницах ссылок этих функций также перечислены ссылки на одну или несколько книг, содержащих выражения закрытой формы, реализованные функцией.

Результаты теоретической работы

График теоретических коэффициентов ошибок

В этом примере используется bercoding функция вычисления верхних границ на BER для сверточного кодирования с декодером мягкого решения.

coderate = 1/4; % Code rate

Создание структуры, dspec, с информацией о спектре расстояния. Определите диапазон спектральной плотности энергии на бит к мощности шума (Eb/N0) и создайте теоретические связанные результаты.

dspec.dfree = 10; % Minimum free distance of code
dspec.weight = [1 0 4 0 12 0 32 0 80 0 192 0 448 0 1024 ...
    0 2304 0 5120 0]; % Distance spectrum of code
EbNo = 3:0.5:8;
berbound = bercoding(EbNo,'conv','soft',coderate,dspec);

Постройте график теоретических результатов привязки.

semilogy(EbNo,berbound)
xlabel('E_b/N_0 (dB)'); 
ylabel('Upper Bound on BER');
title('Theoretical Bound on BER for Convolutional Coding');
grid on;

Figure contains an axes. The axes with title Theoretical Bound on BER for Convolutional Coding contains an object of type line.

Сравнение теоретических и эмпирических коэффициентов ошибок

Использование berawgn вычисляют теоретические коэффициенты ошибок символов (SER) для импульсной амплитудной модуляции (PAM) в диапазоне Eb/N0 значений. Смоделировать 8 PAM с каналом AWGN и вычислить эмпирические SER. Сравните теоретические, а затем эмпирические SER, построив их график на одном и том же наборе осей.

Вычислите и постройте график теоретической SER с помощью berawgn.

rng('default') % Set random number seed for repeatability
M = 8;
EbNo = 0:13;
[ber,ser] = berawgn(EbNo,'pam',M);

semilogy(EbNo,ser,'r');
legend('Theoretical SER');
title('Theoretical Error Rate');
xlabel('E_b/N_0 (dB)');
ylabel('Symbol Error Rate');
grid on;

Figure contains an axes. The axes with title Theoretical Error Rate contains an object of type line. This object represents Theoretical SER.

Вычислите эмпирическую SER путем моделирования канала связи 8 PAM. Определите параметры моделирования и предварительно назначьте переменные, необходимые для результатов. Как описано в [1], так как N0 = 2 × (NVariance) 2, при преобразовании значений 3 в значения SNR добавьте Eb/N0 дБ к значению Eb/N0.

n = 10000; % Number of symbols to process
k = log2(M); % Number of bits per symbol
snr = EbNo+3+10*log10(k); % In dB
ynoisy = zeros(n,length(snr));
z = zeros(n,length(snr));
errVec = zeros(3,length(EbNo));

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

errcalc = comm.ErrorRate;

Создайте случайное сообщение данных и примените PAM. Нормализуйте канал к мощности сигнала. Выполните моделирование по контуру для генерации частоты ошибок в диапазоне значений SNR.

x = randi([0 M-1],n,1); % Create message signal
y = pammod(x,M); % Modulate
signalpower = (real(y)'*real(y))/length(real(y));

for jj = 1:length(snr)
    reset(errcalc)
    ynoisy(:,jj) = awgn(real(y),snr(jj),'measured'); % Add AWGN
    z(:,jj) = pamdemod(complex(ynoisy(:,jj)),M); % Demodulate
    errVec(:,jj) = errcalc(x,z(:,jj)); % Compute SER from simulation
end

Сравните теоретические и эмпирические результаты.

hold on;
semilogy(EbNo,errVec(1,:),'b.');
legend('Theoretical SER','Empirical SER');
title('Comparison of Theoretical and Empirical Error Rates');
hold off;

Figure contains an axes. The axes with title Comparison of Theoretical and Empirical Error Rates contains 2 objects of type line. These objects represent Theoretical SER, Empirical SER.

Результаты производительности с помощью моделирования

Обзор раздела

В этом разделе описывается, как сравнивать сообщения данных, которые входят и выходят из моделирования системы связи, и как вычислять статистику ошибок с использованием метода Монте-Карло. Моделирование может измерять производительность системы, используя сообщения данных перед передачей и после приема для вычисления BER или SER для системы связи. Описание компонентов физического уровня, используемых для моделирования и моделирования систем связи, см. в разделе Компоненты PHY.

Аппроксимация кривой может быть полезна при наличии небольшого или несовершенного набора данных, но при необходимости построения графика гладкой кривой в целях представления. Сведения об использовании фитинга кривой при вычислении результатов производительности с помощью моделирования см. в разделе Фитинг кривой для графиков частоты ошибок.

Вычисление SER и BER с использованием моделируемых данных

В примере показано, как вычислять SER и BER с помощью biterr и symerr соответственно. symerr функция сравнивает два набора данных и вычисляет количество ошибок символов и SER. biterr функция сравнивает два набора данных и вычисляет количество битовых ошибок и BER. Ошибка - это расхождение между соответствующими точками в двух наборах данных.

Два набора данных обычно представляют сообщения, поступающие в передатчик, и восстановленные сообщения, уходящие из приемника. Можно также сравнить данные, вводимые и покидающие другие части системы связи (например, данные, вводимые в кодер, и данные, покидающие декодер).

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

Как правило, моделирование достаточного количества данных для получения по меньшей мере 100 ошибок обеспечивает точные результаты частоты ошибок. Если частота ошибок очень мала (например, 10-6 или меньше), использование семианалитического метода может вычислить результат быстрее, чем использование метода только моделирования. Дополнительные сведения см. в разделе Результаты производительности с помощью семианалитической техники.

Вычислить частоту ошибок

Используйте symerr для вычисления SER для шумного линейного блочного кода. Не применяйте цифровую модуляцию, чтобы каждый символ содержал один бит. Когда каждый символ является одним битом, ошибки символов и ошибки битов одинаковы.

После искусственного добавления шума к кодированному сообщению сравните полученный шумовой код с исходным кодом. Затем декодируют и сравнивают декодированное сообщение с исходным сообщением.

m = 3; % Set parameters for Hamming code
n = 2^m-1;
k = n-m;
msg = randi([0 1],k*200,1); % Specify 200 messages of k bits each
code = encode(msg,n,k,'hamming');
codenoisy = bsc(code,0.95); % Add noise
newmsg = decode(codenoisy,n,k,'hamming'); % Decode and correct errors

Вычисление SER

[~,noisyVec] = symerr(code,codenoisy);
[~,decodedVec] = symerr(msg,newmsg);

Частота ошибок уменьшается после декодирования, потому что декодер Хэмминга исправляет ошибки на основании возможности исправления ошибок конфигурации декодера. Поскольку генераторы случайных чисел создают сообщение, и добавляется шум, результаты варьируются от прогона к прогону. Отображение SER.

disp(['SER in the received code: ',num2str(noisyVec(1))])
SER in the received code: 0.94571
disp(['SER after decoding: ',num2str(decodedVec(1))])
SER after decoding: 0.9675

Сравнение SER и BER

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

Создайте два трехэлементных десятичных вектора и покажите двоичное представление. Вектор a содержит три 2-разрядных символа и вектор b содержит три 3-разрядных символа.

a = [1 2 3]'; b = [1 4 4]';
de2bi(a)
ans = 3×2

     1     0
     0     1
     1     1

de2bi(b)
ans = 3×3

     1     0     0
     0     0     1
     0     0     1

Сравните двоичные значения двух векторов и вычислите количество ошибок и частоту ошибок с помощью biterr и symerr функции.

format rat % Display fractions instead of decimals
[snum,srate] = symerr(a,b)
snum = 
       2       

srate = 
       2/3     

snum является 2 поскольку вторая и третья записи имеют битовые различия. srate является 2/3 поскольку общее количество символов равно 3.

[bnum,brate] = biterr(a,b)
bnum = 
       5       

brate = 
       5/9     

bnum является 5 потому что вторые записи различаются в двух битах, а третьи - в трех битах. brate является 5/9 поскольку общее количество битов равно 9. По определению, общее количество битов - это количество записей в a для вычисления ошибок символов или b для вычисления битовых ошибок умножает максимальное количество битов среди всех записей a и bсоответственно.

Результаты работы с помощью семианалитической техники

Метод, описанный в разделе «Результаты анализа производительности с помощью моделирования», может работать для большого количества систем связи, но может быть чрезмерно трудоемким для небольших коэффициентов ошибок (например, 10-6 или менее). Семианалитический метод является альтернативным способом вычисления коэффициентов ошибок. Семианалитический метод может давать результаты быстрее, чем неаналитический метод, использующий смоделированные данные.

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

Графики частоты ошибок

Обзор раздела

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

Создание графиков частоты ошибок с использованием semilogy Функция

На многих графиках частоты ошибок горизонтальная ось указывает Eb/N0 значения в дБ, а вертикальная ось показывает частоту ошибок с использованием логарифмической (базовой 10) шкалы. Примеры создания такого графика с помощью semilogy см. раздел Сравнение теоретических и эмпирических коэффициентов ошибок и График теоретических коэффициентов ошибок.

Аппроксимация кривой для графиков частоты ошибок

Аппроксимация кривой может быть полезна при наличии небольшого или несовершенного набора данных, но при необходимости построения графика гладкой кривой в целях представления. berfit функция включает возможности подбора кривой, которые помогают при анализе, когда эмпирические данные описывают частоту ошибок при различных значениях Eb/N0. Эта функция позволяет выполнять следующие действия:

  • Настройте различные релевантные аспекты процесса подбора кривой, такие как список вариантов выбора для типа функции закрытой формы, используемой для создания вписывания.

  • Постройте график эмпирических данных вместе с кривой, которая berfit соответствует данным.

  • Интерполяция точек на подогнанной кривой между Eb/N0 значениями в наборе эмпирических данных для сглаживания графика.

  • Соберите соответствующую информацию о посадке, например числовые значения точек вдоль подогнанной кривой и коэффициенты выражения посадки.

Примечание

berfit функция предназначена для аппроксимации или интерполяции кривой, а не для экстраполяции. Экстраполяция данных BER более чем на порядок ниже наименьшего эмпирического значения BER по своей сути ненадежна.

Использование фитинга кривой на графике частоты ошибок

Этот пример моделирует простую систему связи с дифференциальной двоичной фазовой манипуляцией (DBPSK) и строит график частоты ошибок для ряда Eb/N0 значений. Он использует berfit и berconfint для соответствия кривой набору эмпирических коэффициентов ошибок.

Инициализация параметров моделирования

Укажите длину сообщения входного сигнала, порядок модуляции, диапазон значений Eb/N0 для моделирования и минимальное количество ошибок, которые должны возникнуть перед вычислением частоты ошибок для данного значения Eb/N0. Предварительно распределить переменные для окончательных и промежуточных результатов.

Обычно для статистически точных результатов частоты ошибок минимальное число ошибок должно быть порядка 100. В этом моделировании используется небольшое количество ошибок для сокращения времени выполнения и иллюстрации того, как аппроксимация кривой может сгладить набор результатов.

siglen = 100000; % Number of bits in each trial
M = 2; % DBPSK is binary
EbN0vec = 0:5; % Vector of EbN0 values
minnumerr = 5; % Compute BER after only 5 errors occur
numEbN0 = length(EbN0vec); % Number of EbN0 values

ber = zeros(1,numEbN0); % Final BER values
berVec = zeros(3,numEbN0); % Updated BER values
intv = cell(1,numEbN0); % Cell array of confidence intervals

Создайте калькулятор частоты ошибок System object™.

errorCalc = comm.ErrorRate;

Закольцевать моделирование

Моделирование системы связи, модулированной DBPSK, и вычисление BER с использованием for для изменения значения Eb/N0. Внутреннее while цикл обеспечивает минимальное количество битовых ошибок для каждого значения Eb/N0. Статистика частоты ошибок сохраняется для каждого значения Eb/N0 и используется позже в этом примере при фитинге и печати кривой.

for jj = 1:numEbN0
    EbN0 = EbN0vec(jj);
    snr = EbN0; % For binary modulation SNR = EbN0
    reset(errorCalc)
    
    while (berVec(2,jj) < minnumerr)
        msg = randi([0,M-1],siglen,1); % Generate message sequence
        txsig = dpskmod(msg,M); % Modulate
        rxsig = awgn(txsig,snr,'measured'); % Add noise
        decodmsg = dpskdemod(rxsig,M); % Demodulate
        berVec(:,jj) = errorCalc(msg,decodmsg); % Calculate BER
    end

Используйте berconfint функция для вычисления частоты ошибок с доверительным интервалом 98% для Eb/N0 значений.

    [ber(jj),intv1] = berconfint(berVec(2,jj),berVec(3,jj),0.98);
    intv{jj} = intv1;
    disp(['EbN0 = ' num2str(EbN0) ' dB, ' num2str(berVec(2,jj)) ...
        ' errors, BER = ' num2str(ber(jj))])
end
EbN0 = 0 dB, 18392 errors, BER = 0.18392
EbN0 = 1 dB, 14307 errors, BER = 0.14307
EbN0 = 2 dB, 10190 errors, BER = 0.1019
EbN0 = 3 dB, 6940 errors, BER = 0.0694
EbN0 = 4 dB, 4151 errors, BER = 0.04151
EbN0 = 5 dB, 2098 errors, BER = 0.02098

Используйте berfit функция для построения графика наиболее подходящей кривой, интерполяция между точками BER для получения гладкого графика. Добавьте доверительные интервалы к графику.

fitEbN0 = EbN0vec(1):0.25:EbN0vec(end); % Interpolation values
berfit(EbN0vec,ber,fitEbN0);
hold on;
for jj=1:numEbN0
    semilogy([EbN0vec(jj) EbN0vec(jj)],intv{jj},'g-+');
end
hold off;

Figure contains an axes. The axes with title BER vs. Eb/No with Best Curve Fit contains 8 objects of type line. These objects represent Empirical BER, Dbl Exp Plus Const Fit.

См. также

Приложения

Функции

Связанные темы