В этом разделе описывается, как вычислить статистику ошибок для различных систем связи.
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;

Использование berawgn вычисляют теоретические коэффициенты ошибок символов (SER) для импульсной амплитудной модуляции (PAM) в диапазоне значений. Смоделировать 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;

Вычислите эмпирическую SER путем моделирования канала связи 8 PAM. Определите параметры моделирования и предварительно назначьте переменные, необходимые для результатов. Как описано в [1], так как 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;

В этом разделе описывается, как сравнивать сообщения данных, которые входят и выходят из моделирования системы связи, и как вычислять статистику ошибок с использованием метода Монте-Карло. Моделирование может измерять производительность системы, используя сообщения данных перед передачей и после приема для вычисления BER или SER для системы связи. Описание компонентов физического уровня, используемых для моделирования и моделирования систем связи, см. в разделе Компоненты PHY.
Аппроксимация кривой может быть полезна при наличии небольшого или несовершенного набора данных, но при необходимости построения графика гладкой кривой в целях представления. Сведения об использовании фитинга кривой при вычислении результатов производительности с помощью моделирования см. в разделе Фитинг кривой для графиков частоты ошибок.
В примере показано, как вычислять SER и BER с помощью biterr и symerr соответственно. symerr функция сравнивает два набора данных и вычисляет количество ошибок символов и SER. biterr функция сравнивает два набора данных и вычисляет количество битовых ошибок и BER. Ошибка - это расхождение между соответствующими точками в двух наборах данных.
Два набора данных обычно представляют сообщения, поступающие в передатчик, и восстановленные сообщения, уходящие из приемника. Можно также сравнить данные, вводимые и покидающие другие части системы связи (например, данные, вводимые в кодер, и данные, покидающие декодер).
Если система связи использует несколько битов для представления одного символа, ошибки в подсчете символов отличаются от ошибок в подсчете битов. В случае символьного или битового подсчета частота ошибок представляет собой количество ошибок, деленное на общее количество переданных символов или битов соответственно.
Как правило, моделирование достаточного количества данных для получения по меньшей мере 100 ошибок обеспечивает точные результаты частоты ошибок. Если частота ошибок очень мала (например, или меньше), использование семианалитического метода может вычислить результат быстрее, чем использование метода только моделирования. Дополнительные сведения см. в разделе Результаты производительности с помощью семианалитической техники.
Вычислить частоту ошибок
Используйте 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) и строит график частоты ошибок для ряда значений. Он использует berfit и berconfint для соответствия кривой набору эмпирических коэффициентов ошибок.
Инициализация параметров моделирования
Укажите длину сообщения входного сигнала, порядок модуляции, диапазон значений для моделирования и минимальное количество ошибок, которые должны возникнуть перед вычислением частоты ошибок для данного значения 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% для значений.
[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))])
endEbN0 = 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;
