Методы Bit Error Rate Analysis

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

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

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

Тип системы связиФункция
Незакодированный канал AWGN berawgn
Незакодированный Rayleigh и Rician, исчезающий канал berfading
Закодированный канал AWGN bercoding
Незакодированные AWGN образовывают канал с несовершенной синхронизацией bersync

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

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

Постройте теоретические коэффициенты ошибок

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

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 object. The axes object with title Theoretical Bound on BER for Convolutional Coding contains an object of type line.

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

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

Вычислите и постройте теоретический 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 object. The axes object 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 object. The axes object 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.

Вычислите СЕРЫ и BERs Используя симулированные данные

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

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

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

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

Вычислите коэффициенты ошибок

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

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

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

Вычислите СЕРЫ

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

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

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, соответственно.

Результаты эффективности через Полуаналитический Метод

Метод, описанный в разделе Performance Results via Simulation, может работать на большое множество систем связи, но может быть предельно длительным для небольших коэффициентов ошибок (например, 10-6 или меньше). Полуаналитический метод является альтернативным способом вычислить коэффициенты ошибок. Полуаналитический метод может привести к результатам быстрее, чем неаналитический метод, который использует симулированные данные.

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

Графики коэффициента ошибок

Разделите обзор

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

Создание коэффициента ошибок строит Используя semilogy Функция

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

Curve Fitting для графиков коэффициента ошибок

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

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

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

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

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

Примечание

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

Используйте Curve Fitting на графике коэффициента ошибок

Этот пример симулирует простую систему связи дифференциального бинарного манипулирования сдвига фазы (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

Создайте Систему калькулятора коэффициента ошибок 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 object. The axes object 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.

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

Приложения

Функции

Похожие темы