Bit Error Rate Analysis

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

Расчет статистики теоретических ошибок

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

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

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

Теоретические результаты эффективности

Построение теоретических частот ошибок

Этот пример использует 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 функция, вычислите теоретические частоты ошибок символов (SERs) для импульсно-амплитудной модуляции (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 дБ к 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. Нормализуйте канал до степени сигнала. Закольцовывайте симуляцию, чтобы сгенерировать частоты ошибок в области значений значений ОСШ.

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.

Аппроксимирование кривыми может быть полезным, когда у вас есть небольшой или несовершенный набор данных, но вы хотите построить гладкую кривую для целей презентации. Чтобы исследовать использование аппроксимации кривых при вычислении результатов производительности с помощью симуляции, смотрите раздел Curve Fitting for Error Rate Plots.

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

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

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

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

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

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

Используйте 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);

Вероятность ошибки уменьшается после декодирования, потому что декодер Hamming исправляет ошибки, основанные на возможности исправления ошибок строения декодера. Поскольку генераторы случайных чисел генерируют сообщение и добавляется шум, результаты варьируются от запуска до запуска. Отображение 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 Функция

На многих графиках частоты ошибок горизонтальная ось указывает E значения b/ N 0 в дБ, а вертикальная ось указывает частоту ошибок, используя логарифмическую (базовую 10) шкалу. Для примеров, которые создают такой график, используя semilogy функция, см. Сравнение теоретических и эмпирических частот ошибок и график теоретических частот ошибок.

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

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

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

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

  • Интерполируйте точки на подобранной кривой между значениями E b/ N 0 в эмпирическом наборе данных, чтобы сгладить график.

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

Примечание

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

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

В этом примере моделируется простой дифференциальный двоичный метод фазы сдвига keying (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.

См. также

Приложения

Функции

Похожие темы