sinad
Отношение сигнала к сумме шума и искажений.
| Библиотека |
|
Синтаксис
Вызов функции
-
r = sinad(x)— возвращает отношение сигнала к сумме шума и искажений (SIgnal to Noise And Distortion ratio, SINAD) в дБн для вещественного синусоидального сигналаx. SINAD определяется с помощью модифицированной периодограммы той же длины, что и входной сигнал. Модифицированная периодограмма использует окно Кайзера с .
-
r,totdistpow = sinad(___)— возвращает общий уровень шума и гармонических искажений сигнала (в дБ).
-
sinad(___, out=:plot)— строит спектр сигнала в текущем окне графиков и отмечает его основную составляющую. Основная составляющая, значение постоянной составляющей и шум отображаются разными цветами. Значение SINAD отображается над графиком.
Аргументы
Входные аргументы
#
x —
вещественный синусоидальный входной сигнал
вектор
Details
Вещественный синусоидальный входной сигнал, заданный как вектор-строка или вектор-столбец.
| Типы данных |
|
#
fs —
частота дискретизации
положительный скаляр
Details
Частота дискретизации, заданная как положительный скаляр. Частота дискретизации — это количество отсчетов в единицу времени. Если единицей времени являются секунды, то частота дискретизации измеряется в Гц.
#
pxx —
односторонняя оценка СПМ
вектор
Details
Односторонняя оценка СПМ, заданная как вещественный неотрицательный вектор-столбец.
Спектральная плотность мощности должна быть выражена в линейных единицах, а не в децибелах.
| Типы данных |
|
#
sxx —
спектр мощности
неотрицательный вещественный вектор-строка или вектор-столбец
Details
Спектр мощности, заданный как вещественный вектор-строка или вектор-столбец.
Спектр мощности должен быть выражен в линейных единицах, а не в децибелах.
#
rbw —
полоса разрешения
положительный скаляр
Details
Полоса разрешения, заданная как положительный скаляр. Полоса разрешения является произведением разрешения по частоте дискретного преобразования Фурье и эквивалентной шумовой полосы окна.
Выходные аргументы
#
r —
отношение сигнала к сумме шума и искажений
вещественный скаляр
Details
Отношение сигнала к сумме шума и искажений в дБн, возвращаемое в виде вещественного скаляра.
#
totdistpow —
общая мощность шума и гармонических искажений сигнала
вещественный скаляр
Details
Общая мощность шума и гармонических искажений сигнала, возвращаемая в виде вещественного скаляра, выраженного в дБ.
Примеры
SINAD для сигнала с одной гармоникой или одной гармоникой плюс шум
Details
Создадим два сигнала. Оба сигнала имеют основную частоту рад/отсчет с амплитудой 1 и первую гармонику с частотой рад/отсчет с амплитудой 0.025. Один из сигналов дополнительно содержит аддитивный белый гауссовский шум с дисперсией .
Установим настройки генератора случайных чисел по умолчанию для получения воспроизводимых результатов. Определим SINAD для сигнала без аддитивного шума и сравним результат с теоретическим SINAD.
import EngeeDSP.Functions: randn, sinad
using Random
n = 0:159
x = cos.(π/4*n) + 0.025 * sin.(π/2*n)
Random.seed!(123)
y = cos.(π/4*n) + 0.025 * sin.(π/2*n) + 0.05 * randn(length(n), 1)
r = sinad(x)
println("r = ", r[1])
r = 32.041199826559314
powfund = 1
powharm = 0.025^2
thSINAD = 10 * log10(powfund / powharm)
println("thSINAD = ", thSINAD)
thSINAD = 32.04119982655924
Определим SINAD для синусоидального сигнала с аддитивным шумом. Покажем, как включение теоретической дисперсии аддитивного шума аппроксимирует SINAD.
r = sinad(y)
println("r = ", r[1])
r = 24.588862275561493
varnoise = 0.05^2
thSINAD = 10 * log10(powfund / (powharm + varnoise))
println("thSINAD = ", thSINAD)
thSINAD = 25.05149978319906
SINAD для сигнала с частотой дискретизации
Details
Создадим сигнал с основной частотой 1 кГц и единичной амплитудой, дискретизированный с частотой 480 кГц. Сигнал дополнительно содержит первую гармонику с амплитудой 0.02 и аддитивный белый гауссовский шум с дисперсией .
Определим SINAD и сравним результат с теоретическим SINAD.
import EngeeDSP.Functions: randn, sinad
using Random
fs = 48e4
t = 0:1/fs:1-1/fs
Random.seed!(123)
x = cos.(2π*1000*t) + 0.02 * sin.(2π*2000*t) + 0.01 * randn(length(t), 1)
r = sinad(x, fs)
println("r = ", r[1])
r = 32.243478303520384
powfund = 1
powharm = 0.02^2
varnoise = 0.01^2
thSINAD = 10 * log10(powfund / (powharm + varnoise * (1 / fs)))
println("thSINAD = ", thSINAD)
thSINAD = 33.97939782477054
SINAD усиленного сигнала
Details
Сгенерируем синусоиду частотой 2.5 кГц с частотой дискретизации 50 кГц. Добавим к сигналу гауссовский белый шум со стандартным отклонением 0.00005. Пропустим результат через усилитель с малой нелинейностью. Построим график SINAD.
import EngeeDSP.Functions: randn, polyval, sinad
fs = 5e4
f0 = 2.5e3
N = 1024
t = (0:N-1) / fs
ct = cos.(2π*f0*t)
cd_signal = ct + 0.00005 * randn(length(ct),1)
amp = [1e-5 5e-6 -1e-3 6e-5 1 25e-3]
sgn = polyval(amp, cd_signal)
sinad(sgn, fs, out=:plot)
На графике показан спектр, используемый для вычисления отношения, и область, рассматриваемая как шум. Уровень постоянной составляющей и основная гармоника исключены из вычисления шума. Основная гармоника отмечена.
Дополнительно
Функции измерения искажений
Details
При задании входных данных во временной области функция sinad строит периодограмму, используя окно Кайзера с большим ослаблением боковых лепестков. Чтобы найти основную частоту, алгоритм ищет на периодограмме наибольшую ненулевую спектральную составляющую. Затем он вычисляет центральный момент всех соседних интервалов, монотонно убывающих при удалении от максимума. Для обнаружения основная частота должна находиться как минимум во втором интервале частоты. Высшие гармоники находятся на частотах, кратных основной частоте. Если гармоника находится в монотонно убывающей области рядом с другой, ее мощность считается принадлежащей большей гармонике. Эта большая гармоника может быть основной, а может и не быть.
Функция оценивает уровень шума, используя медианное значение мощности в областях, содержащих только шум и искажения. Постоянная составляющая исключается из расчета. Шум в каждой точке определяется расчетным уровнем или ординатой точки, в зависимости от того, что меньше. Затем шум вычитается из значений сигнала и гармоник.
Функция sinad завершается ошибкой, если основная частота не является наивысшей спектральной составляющей сигнала.
Убедитесь, что частотные компоненты достаточно разнесены, чтобы учесть ширину боковых лепестков окна Кайзера. Если это невозможно, можно использовать флаг "power" и вычислить периодограмму с другим окном.