Стандартная ситуация: разрабатывается сигнально-кодовая конструкция, хочется проверить её на устойчивость к шуму. Моделируем - и BER-кривая оказывается на 3 дБ левее теоретической (Рис.1). Знакомо? Тут два варианта: либо ваша система действительно хороша и стоит задуматься о патенте, либо стоит проверить правильность добавления шума к сигналу.

Сегодня разберём АБГШ (AWGN, Additive White Gaussian Noise - аддитивный белый гауссовский шум) - самую популярную модель шума в цифровой связи - и разберёмся, сколько нужно «насыпать» шума, чтобы моделировать правильно.
Итак, что такое АБГШ?
Сначала разберёмся с аббревиатурой:
Аддитивный - шум просто складывается с полезным сигналом (Рис. 2)

Белый - это шум, спектральная плотность мощности (СПМ) которого равномерно распределена по всем частотам (Рис. 3, справа). Белый шум - это математическая модель, физически он существовать не может, поскольку его мощность бесконечно большая. Но у реального теплового шума (когда речь идёт об АБГШ, это означает, что мы моделируем тепловой шум приёмника) СПМ практически постоянна вплоть до частот порядка терагерц, а полоса любой системы связи на порядки уже. Поэтому в пределах полосы приёмника тепловой шум неотличим от белого.
Гауссовский - отсчёты шума имеют нормальное распределение (Рис. 3, слева). Тепловой шум - сумма огромного количества хаотично движущихся электронов, а сумма большого числа независимых случайных величин стремится к гауссовскому распределению.

Сколько шума насыпаем?
Переходим к практике. Есть модулированный сигнал, хотим добавить шум и посмотреть на помехоустойчивость. Первый вопрос - в каких координатах строить кривую помехоустойчивости: SNR или? Оказывается, от ответа зависит, будут ли вообще сравнимы результаты модуляций.
SNR и Eb/N0
Итак, допустим, мы хотим понять, что такое SNR и и почему в цифровой связи принято использовать именно
.
Пусть мы передаём в эфире два сигнала с одинаковой символьной скоростью и одинаковой излучаемой мощностью. Один сигнал - BPSK, другой - QAM-4.
Хочется понять взаимосвязь BER и SNR для каждого из сигналов.
Чтобы мощность была одинаковой, должны быть одинаковыми энергии (
) и длительности символов (
), а значит, и амплитуды символов будут равны:
.
В таком случае чисто геометрически понятно (Рис. 4), что расстояние между соседними точками созвездия у BPSK равно , тогда как у QAM-4 -
.
То есть отношение расстояний:

Вероятность ошибки определяется расстоянием между ближайшими точками созвездия, тогда, чтобы BPSK ошибался так же часто, как QAM-4, ему нужно понизить энергию символа в 2 раза. Поэтому при равной символьной скорости и энергии символов BPSK выигрывает 3 дБ по оси SNR, и причина этому - геометрическая.
Но вот проблема: BPSK и QAM-4 переносят разное количество информации в единицу времени, а «расход» мощности у них одинаковый - кажется, что так сравнивать не слишком честно. Поэтому попробуем сравнить два цифровых вида модуляции по количеству доставленных бит.
Чтобы BPSK доставлял столько же бит, сколько QAM-4, надо увеличить скорость передачи в два раза. Тогда длительность символа уменьшится, а с ней в два раза уменьшится и энергия символа. При таком подходе расстояния между точками созвездий сравняются (Рис. 4, справа), и 3 дБ по оси SNR исчезнут.
В чём ключевая идея перехода от SNR к Eb/N0?
Каждый символ несёт определённое количество бит, и если перейти от символов к битам, то у обеих систем совпадёт энергия, приходящаяся на один бит:
откуда . Мощность осталась неизменной, а скорость передачи в обоих случаях стала одинаковой - поэтому зафиксируем эту величину и выразим через неё SNR:
Осталось выразить соотношение:
где:
- количество бит в символе
- скорость передачи бит
- длительность символа
- частота дискретизации
- СПМ шумовой полки
SNR содержит в себе две независимые сущности: энергию на один бит и количество бит в одном герце полосы (за вторую BPSK заплатил вдвое большей полосой). А BER определяется только первой - поэтому её и выносят на отдельную ось (Рис. 5).

Так сколько же шума добавить-то?
Чтобы ответить на этот вопрос, нужно получить формулу мощности шума. У нас уже есть соотношение:
И в SNR входит мощность шума, которая нам и нужна.
Частота дискретизации считается как , битовая скорость как
. Собирая всё написанное вместе, получим:
откуда:
Итого:
задали целевое значение
;
посчитали мощность сигнала
;
посмотрели, сколько бит переносит один символ (
);
посмотрели, сколько отсчётов приходится на один символ (
).
Исходя из этих параметров, рассчитали необходимую мощность шума.
И не забудьте: для комплексного сигнала мощность шума делится поровну между квадратурами:
Как это выглядит в коде
Код на Python, рассчитывающий правильную мощность шума, выглядит так:
import numpy as np def add_awgn(signal, ebno_db, m, sps): p_signal = np.mean(np.abs(signal) ** 2) p_noise = p_signal * 10 ** (-ebno_db / 10) * sps / m sigma = np.sqrt(p_noise / 2) i = np.random.normal(0, sigma, len(signal)) q = np.random.normal(0, sigma, len(signal)) return signal + i + 1j * q
Заключение
Подведём итоги:
При добавлении шума просто допустить ошибку, а потом пойти с прорывными результатами к коллегам, поэтому всегда особенно важно проверять деление мощности шума между двумя квадратурами. Дополнительно хочется отметить, что если в модели используется помехоустойчивое кодирование, то скорость кода должна учитываться при расчёте необходимого количества шума.
P.S. Спасибо, что дочитали! Про цифровую обработку сигналов и технологии в сфере телекоммуникаций пишу в своём телеграм-канале Inspectrum DSP.
