Util — вспомогательные функции
Начиная с версии 0.6.1 пакета DSP.jl функции |
#
DSP.Unwrap.unwrap
— Function
unwrap(m; kwargs...)
Предполагает, что m
является последовательностью значений, свернутой внутрь заданного диапазона range
(отцентрированного относительно нуля), и выполняет развертывание, определяя точки разрыва. Если в dims
передано одно измерение, то предполагается, что m
имеет точки разрыва свертки только по этому измерению. Если в dims
передан диапазон измерений, например 1:ndims(m)
, предполагается, что m
имеет точки разрыва свертки по всем ndims(m)
измерениям.
Распространенным назначением развертывания по одному измерению является измерение фазы во времени, например сравнение последовательных кадров кратковременного преобразования Фурье, каждый из которых свертывается внутрь диапазона (-pi, pi].
Распространенным назначением развертывания по нескольким измерениям является измерение фазы сцены, например получение информации о фазе изображения, каждый пиксель которого свертывается внутрь диапазона (-pi, pi].
Аргументы
-
m::AbstractArray{T, N}
: развертываемый массив. -
dims=nothing
: измерения, по которым производится развертывание. Еслиdims
является целым числом, то функцияunwrap
вызывается для этого измерения. Еслиdims=1:ndims(m)
, тоm
развертывается по всем измерениям. -
range=2pi
: диапазон развертываемого массива. -
circular_dims=(false, ...)
: когда элемент этого кортежа имеет значениеtrue
, при развертывании границы вдоль соответствующей оси массива считаются связными. -
rng=GLOBAL_RNG
: при развертывании массивов с числом измерений более одного используется случайная инициализация. В этом аргументе пользователь может передать собственный генератор случайных чисел.
#
DSP.Util.hilbert
— Function
hilbert(x)
Вычисляет аналитическое представление x, , где — преобразование Гилберта для x по первому измерению x.
#
DSP.Util.nextfastfft
— Function
nextfastfft(n)
Возвращает ближайшее произведение 2, 3, 5 и 7, больше или равное n
. Библиотека FFTW содержит оптимизированные ядра для этих размеров и вычисляет преобразования Фурье для входных данных, являющихся произведением этих размеров, быстрее, чем для других.
#
DSP.Util.pow2db
— Function
pow2db(a)
Преобразует коэффициент мощности в дБ (децибелы) или . Это функция, обратная функции db2pow
.
#
DSP.Util.amp2db
— Function
amp2db(a)
Преобразует амплитудный коэффициент в дБ (децибелы) или . Это функция, обратная функции db2amp
.
#
DSP.Util.db2pow
— Function
db2pow(a)
Преобразует дБ в коэффициент мощности. Эту функцию также можно вызвать в виде a*dB
, то есть 3dB == db2pow(3)
. Это функция, обратная функции pow2db
.
#
DSP.Util.db2amp
— Function
db2amp(a)
Преобразует дБ в коэффициент амплитуды. Эту функцию также можно вызвать в виде a*dBa
, то есть 3dBa == db2amp(3)
. Это функция, обратная функции amp2db
.
#
DSP.Util.rmsfft
— Function
rmsfft(f)
Возвращает среднее квадратическое сигнала s
для БПФ f = fft(s)
. Эквивалентно rms(ifft(f))
.
#
DSP.Util.meanfreq
— Function
meanfreq(x, fs)
Вычисляет частоту средней мощности x
с частотой дискретизации fs
, которая определяется следующим образом:
где — частота Найквиста, а — спектральная плотность мощности.
#
DSP.Util.finddelay
— Function
finddelay(x, y)
Оценивает запаздывание x относительно y путем нахождения пика их взаимной корреляции.
Выходное запаздывание будет положительным при запаздывании x относительно y, отрицательным при опережении и 0 в противном случае.
Пример
julia> finddelay([0, 0, 1, 2, 3], [1, 2, 3])
2
julia> finddelay([1, 2, 3], [0, 0, 1, 2, 3])
-2
#
DSP.Util.shiftsignal
— Function
shiftsignal(x, s)
Сдвигает элементы сигнала x во времени на заданное количество отсчетов и заполняет пробелы нулями. Для циклического сдвига используйте circshift.
Пример
julia> shiftsignal([1, 2, 3], 2)
3-element Vector{Int64}:
0
0
1
julia> shiftsignal([1, 2, 3], -2)
3-element Vector{Int64}:
3
0
0
См. также описание shiftsignal!
.
#
DSP.Util.shiftsignal!
— Function
shiftsignal!(x, s)
Изменяющая версия shiftsignals(): сдвигает x на s отсчетов и заполняет пробелы нулями на месте.
См. также описание shiftsignal
.
#
DSP.Util.alignsignals
— Function
alignsignals(x, y)
Использует finddelay() и shiftsignal() для выравнивания x с y по времени. Также возвращает запаздывание x относительно y.
Пример
julia> alignsignals([0, 0, 1, 2, 3], [1, 2, 3])
([1, 2, 3, 0, 0], 2)
julia> alignsignals([1, 2, 3], [0, 0, 1, 2, 3])
([0, 0, 1], -2)
См. также описание alignsignals!
.
#
DSP.Util.alignsignals!
— Function
alignsignals!(x, y)
Изменяющая версия alignsignals(): выравнивает x с y по времени на месте.
См. также описание alignsignals
.
#
DSP.diric
— Function
kernel = diric(Ω::Real, n::Integer)
Ядро Дирихле, также известное как периодическая sinc-функция, где n
должно быть положительным целым числом. Возвращает обычно sin(Ω * n/2) / (n * sin(Ω / 2))
, но ±1
, когда Ω
кратно 2π.
В обычном случае, когда 'n' нечетное, результат эквивалентен , то есть дискретному во времени преобразованию Фурье (ДВПФ) n
-точечного фильтра скользящего среднего.
Когда n
нечетное или четное, функция имеет период 2π или 4π соответственно. Для n
в общем случае формула имеет вид diric(Ω,n) =
, что является вещественной и симметричной функцией от e^{-i (n-1) Ω/2}/n \sum_{k=0}^{n-1} e^{i k Ω}\
`Ω
.
На 19.03.2021 в определении в Википедии приводятся разные множители. Представленное здесь определение согласовано со SciPy и другими программными фреймворками.
Примеры
julia> round.(diric.((-2:0.5:2)*π, 5), digits=9)'
1×9 adjoint(::Vector{Float64}) with eltype Float64:
1.0 -0.2 0.2 -0.2 1.0 -0.2 0.2 -0.2 1.0
julia> diric(0, 4)
1.0