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

Util — вспомогательные функции

Начиная с версии 0.6.1 пакета DSP.jl функции fftfreq и rfftfreq перенесены из DSP.jl в AbstractFFTs.jl версии 0.5 и более поздних. Эти функции также доступны в FFTW.jl версии 1.1 и более поздних.

# DSP.Unwrap.unwrapFunction

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.Unwrap.unwrap!Function

unwrap!(m; kwargs...)

Версия unwrap, выполняемая на месте.

unwrap!(y, m; kwargs...)

Развертывает m и сохраняет результат в y; см. описание функции unwrap.

# DSP.Util.hilbertFunction

hilbert(x)

Вычисляет аналитическое представление x, , где  — преобразование Гилберта для x по первому измерению x.

# DSP.Util.nextfastfftFunction

nextfastfft(n)

Возвращает ближайшее произведение 2, 3, 5 и 7, больше или равное n. Библиотека FFTW содержит оптимизированные ядра для этих размеров и вычисляет преобразования Фурье для входных данных, являющихся произведением этих размеров, быстрее, чем для других.

# DSP.Util.pow2dbFunction

pow2db(a)

Преобразует коэффициент мощности в дБ (децибелы) или . Это функция, обратная функции db2pow.

# DSP.Util.amp2dbFunction

amp2db(a)

Преобразует амплитудный коэффициент в дБ (децибелы) или . Это функция, обратная функции db2amp.

# DSP.Util.db2powFunction

db2pow(a)

Преобразует дБ в коэффициент мощности. Эту функцию также можно вызвать в виде a*dB, то есть 3dB == db2pow(3). Это функция, обратная функции pow2db.

# DSP.Util.db2ampFunction

db2amp(a)

Преобразует дБ в коэффициент амплитуды. Эту функцию также можно вызвать в виде a*dBa, то есть 3dBa == db2amp(3). Это функция, обратная функции amp2db.

# DSP.Util.rmsFunction

rms(s)

Возвращает среднее квадратическое сигнала s.

# DSP.Util.rmsfftFunction

rmsfft(f)

Возвращает среднее квадратическое сигнала s для БПФ f = fft(s). Эквивалентно rms(ifft(f)).

# DSP.Util.meanfreqFunction

meanfreq(x, fs)

Вычисляет частоту средней мощности x с частотой дискретизации fs, которая определяется следующим образом:

где  — частота Найквиста, а  — спектральная плотность мощности.

# DSP.Util.finddelayFunction

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.shiftsignalFunction

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.alignsignalsFunction

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.diricFunction

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