Документация Engee

powerbw

Полоса пропускания мощности.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • bw = powerbw(x) — возвращает ширину полосы пропускания (на уровне половинной мощности) bw на уровне 3 дБ входного сигнала x. Функция вычисляет ширину полосы пропускания на уровне 3 дБ из периодограммы сигнала x.

  • bw = powerbw(x,Fs) — возвращает ширину полосы пропускания на уровне 3 дБ, выраженную через частоту дискретизации Fs.

  • bw = powerbw(pxx,f) — возвращает ширину полосы пропускания на уровне 3 дБ для оценки спектральной плотности мощности (СПМ) pxx. Частоты f соответствуют оценкам в pxx.

  • bw = powerbw(sxx,f,rbw) — вычисляет ширину полосы пропускания на уровне 3 дБ оценки спектра мощности sxx на уровне 3 дБ. Частоты f соответствуют оценкам в sxx. Функция использует ширину полосы пропускания разрешения rbw для интегрирования каждой оценки мощности.

  • bw = powerbw(___,freqlims,r) — определяет частотный интервал, в котором вычисляется опорный уровень. Этот синтаксис может включать любую комбинацию входных аргументов из предыдущих вариантов, при условии, что второй входной аргумент равен либо Fs, либо f. Если второй входной аргумент передан как пустой, powerbw предполагает нормализованную частоту. Функция вычисляет разность частот между точками, в которых спектр опускается ниже опорного уровня на r дБ или достигает конечной точки.

  • bw,flo,fhi,power = powerbw(___) — также возвращает нижнюю и верхнюю границы полосы пропускания мощности и мощность в этих границах.

  • powerbw(___) — без выходных аргументов строит СПМ или спектр мощности в текущем окне графиков и аннотирует полосу пропускания.

Аргументы

Входные аргументы

# x — входной сигнал
вектор | матрица

Details

Входной сигнал, заданный как вектор или матрица. Если x — вектор, он рассматривается как одиночный канал. Если x — матрица, то функция powerbw вычисляет полосу пропускания мощности независимо для каждого столбца. x должен быть конечнозначным.

Типы данных

Float32, Float64

# Fs — частота дискретизации
положительный вещественный скаляр

Details

Частота дискретизации, заданная как положительный вещественный скаляр. Частота дискретизации — это количество отсчетов в единицу времени. Если время измеряется в секундах, то частота дискретизации указывается в герцах.

Типы данных

Float32, Float64

# pxx — спектральная плотность мощности
вектор | матрица

Details

Оценка спектральной плотности мощности (СПМ), заданная как вектор или матрица. Если pxx — односторонняя оценка, то она должна соответствовать действительному сигналу. Если pxx — матрица, то powerbw вычисляет полосу пропускания каждого столбца pxx независимо.

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

Типы данных

Float32, Float64

# f — частоты
вектор

Details

Частоты, заданные как вектор. Если первый элемент f равен 0, то powerbw предполагает, что спектр является односторонним спектром вещественного сигнала. Другими словами, функция удваивает значение мощности в бине нулевой частоты, стремясь к точке 3 дБ.

Типы данных

Float32, Float64

# sxx — оценка спектра мощности
вектор | матрица

Details

Оценка спектра мощности, заданная как вектор или матрица. Если sxx — матрица, то powerbw вычисляет полосу пропускания каждого столбца sxx независимо.

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

Типы данных

Float32, Float64

# rbw — полоса разрешения
положительный скаляр

Details

Полоса разрешения, заданная как положительный скаляр. Полоса разрешения является произведением двух величин: частотного разрешения дискретного преобразования Фурье и эквивалентной шумовой полосы окна, используемого для вычисления СПМ.

Типы данных

Float32, Float64

# freqlims — пределы частоты
двухэлементный вектор

Details

Пределы частоты, заданные как двухэлементный вектор вещественных значений. Если аргумент freqlims задан, то опорным уровнем будет средний уровень мощности в опорной полосе. Если аргумент freqlims не задан, то опорным уровнем будет максимальный уровень мощности в спектре. Значение freqlims должно находиться в пределах целевой полосы.

Типы данных

Float32, Float64

# r — падение уровня мощности
10*log10(2) (по умолчанию) | положительный вещественный скаляр

Details

Падение уровня мощности, заданное как положительный вещественный скаляр, выраженный в дБ.

Типы данных

Float32, Float64

Входные аргументы «имя-значение»

# out — тип выходных данных
:data (по умолчанию) | :plot

Details

Тип выходных данных:

  • :data — функция возвращает данные;

  • :plot — функция возвращает график.

Выходные аргументы

# bw — полоса пропускания мощности
скаляр | вектор

Details

Полоса пропускания мощности, возвращаемая в виде скаляра или вектора.

  • Если указана частота дискретизации, то bw имеет те же единицы измерения, что и Fs.

  • Если частота дискретизации не указана, то bw имеет единицы измерения рад/отсчет.

# flo,fhi — границы полосы пропускания частоты
скаляры | векторы

Details

Границы полосы пропускания частоты, возвращаемые в виде скаляров или векторов.

# power — мощность, сохраняемая в полосе пропускания
скаляр | вектор

Details

Мощность, сохраняемая в полосе пропускания, возвращаемая в виде скаляра или вектора.

Примеры

Полоса пропускания сигналов с ограниченной полосой пропускания

Details

Сгенерируем сигнал, СПМ которого напоминает частотную характеристику полосового КИХ-фильтра 88-го порядка с нормированными частотами среза рад/отсчет и рад/отсчет.

import EngeeDSP.Functions: fir1

d = fir1(88, [0.25 0.45])

Рассчитаем занимаемую полосу сигнала на уровне 3 дБ. Укажем в качестве опорного уровня среднюю мощность в диапазоне от рад/отсчет до рад/отсчет. Построим график СПМ.

import EngeeDSP.Functions: powerbw

powerbw(d, [], [0.2 0.6]*pi, 3, out=:plot)

powerbw 1

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

bw, flo, fhi, power = powerbw(d, 2π, [0.2, 0.6] * π)
println([" bw"; "flo"; "fhi"] .* " = " .* string.([bw; flo; fhi] / π) .* "π")
[" bw = 0.20047359178514887π", "flo = 0.24995529776303813π", "fhi = 0.450428889548187π"]
import EngeeDSP.Functions: bandpower

println("power = ", round((power/bandpower(d)*100)[1], digits=1), "% of total")
power = 96.9% of total

Добавим второй канал с нормализованными частотами среза рад/отсчет и рад/отсчет и амплитудой, составляющей одну десятую от амплитуды первого канала.

d = [d fir1(88, [0.5 0.8])/10]

Рассчитаем полосу пропускания двухканального сигнала на уровне 6 дБ. В качестве опорного уровня укажем максимальный уровень мощности спектра.

powerbw(d, [], [], 6, out=:plot)

powerbw 2

Выведем полосу пропускания каждого канала на уровне 6 дБ, а также нижнюю и верхнюю границы.

bw, flo, fhi = powerbw(d, [], [], 6)
bds = [bw[1] bw[2]; flo[1] flo[2]; fhi[1] fhi[2]]
labels = [" bw", "flo", "fhi"]

for channel in 1:2
    for i in 1:3
        println(labels[i] * " (ch_$channel) = $(round(bds[i, channel] / π, digits=5))π")
    end
end
 bw (ch_1) = 0.19794π
flo (ch_1) = 0.25176π
fhi (ch_1) = 0.44971π
 bw (ch_2) = 0.29418π
flo (ch_2) = 0.50271π
fhi (ch_2) = 0.79689π

Алгоритмы

Для определения полосы пропускания на уровне 3 дБ функция powerbw вычисляет оценку спектра мощности периодограммы с помощью прямоугольного окна и использует наивысшую оценку в качестве опорного уровня. Полоса пропускания — это разность частот между точками, где спектр опускается как минимум на 3 дБ относительно опорного уровня. Если сигнал достигает одной из своих конечных точек до того, как опустится на 3 дБ, функция powerbw использует эту конечную точку для вычисления разности.

Одно и то же значение полосы пропускания на уровне 3 дБ, bw, можно получить из сигнала x с частотой дискретизации Fs тремя способами.

Прямо из сигнала

bw = powerbw(x,Fs)

Из периодограммы сигнала

P,F = periodogram(x,[],length(x),Fs);

bw = powerbw(P,F)

Из оценки спектральной мощности (СПМ Уэлча) сигнала

P,F = pwelch(x,rectwin(length(x)),[],length(x),Fs);

bw = powerbw(P,F)

Поскольку powerbw использует промежуточное представление для преобразования входного сигнала из временной области в частотную, полоса пропускания возвращенной мощности может меняться в зависимости от метода преобразования сигнала, количества точек ДПФ и размера окна.