Periodograms — расчет периодограмм
#
DSP.Periodograms.arraysplit
— Function
arraysplit(s, n, m)
Разделяет массив на массивы длиной n
с перекрывающимися областями длиной m
. При итерации по возвращенному объекту AbstractVector или обращении к нему по индексам всегда выдается тот же объект Vector, но с другим содержимым.
#
DSP.Periodograms.periodogram
— Method
periodogram(s; onesided=eltype(s)<:Real, nfft=nextfastfft(n), fs=1, window=nothing)
Вычисляет периодограмму сигнала посредством БПФ и возвращает объект Periodogram.
Для вещественных сигналов двусторонняя периодограмма является симметричной, и эта функция по умолчанию возвращает одностороннюю (только вещественную) периодограмму. Двустороннюю периодограмму можно получить, задав onesided=false
.
nfft
определяет количество точек, используемых для преобразования Фурье. Если length(s)
< nfft
, входные данные дополняются нулями. По умолчанию nfft
— это ближайший размер, для которого преобразование Фурье можно вычислить с максимальной эффективностью.
fs
— это частота дискретизации исходного сигнала, а window
— необязательная функция окна или вектор, применяемые к исходному сигналу перед вычислением преобразования Фурье. Рассчитанная периодограмма нормализуется так, что область ниже нее была равна нецентрированному отклонению (или средней мощности) исходного сигнала.
#
DSP.Periodograms.welch_pgram
— Function
welch_pgram(s, n=div(length(s), 8), noverlap=div(n, 2); onesided=eltype(s)<:Real, nfft=nextfastfft(n), fs=1, window=nothing)
Вычисляет периодограмму Велча для сигнала s
на основе отрезков из n
отсчетов с перекрытием в noverlap
отсчетов и возвращает объект Periodogram. Для периодограммы Бартлетта задайте noverlap=0
. Сведения о необязательных именованных аргументах см. в описании метода periodogram
.
#
DSP.Periodograms.spectrogram
— Function
spectrogram(s, n=div(length(s), 8), noverlap=div(n, 2); onesided=eltype(s)<:Real, nfft=nextfastfft(n), fs=1, window=nothing)
Вычисляет спектрограмму сигнала s
на основе отрезков из n
отсчетов с перекрытием в noverlap
отсчетов и возвращает объект Spectrogram. Сведения о необязательных именованных аргументах см. в описании метода periodogram
.
#
DSP.Periodograms.stft
— Function
stft(s, n=div(length(s), 8), noverlap=div(n, 2); onesided=eltype(s)<:Real, nfft=nextfastfft(n), fs=1, window=nothing)
Вычисляет кратковременное преобразование Фурье (КВПФ) для сигнала s
на основе отрезков из n
отсчетов с перекрытием в noverlap
отсчетов и возвращает матрицу, содержащую коэффициенты КВПФ. В описании метода periodogram
можно найти описание необязательных именованных аргументов.
#
DSP.Periodograms.periodogram
— Method
periodogram(s::AbstractMatrix; nfft=nextfastfft(size(s)), fs=1, radialsum=false, radialavg=false)
Вычисляет периодограмму двухмерного сигнала посредством БПФ и возвращает объект Periodogram2.
По умолчанию возвращает двухмерную периодограмму. В виде объекта Periodogram возвращается радиально суммированная или усредненная периодограмма, если соответственно radialsum
или radialavg
имеет значение true.
nfft
определяет количество точек, используемых для преобразования Фурье. Если size(s)
< nfft
, входные данные дополняются нулями. По умолчанию nfft
— это ближайший размер, для которого преобразование Фурье можно вычислить с максимальной эффективностью. fs
— это частота дискретизации исходного сигнала в обоих направлениях.
При radialsum=true
значение power[k]
пропорционально
При radialavg=true
оно пропорционально
При вычислении |k'|
учитываются неквадратные сигналы путем соответствующего масштабирования координат волнового вектора.
#
DSP.Periodograms.freq
— Function
freq(p)
Возвращает центры элементов разрешения по частоте для данного объекта Periodogram
, Spectrogram
, CrossPowerSpectra
или Coherence
.
Возвращает кортеж центров элементов разрешения по частоте для данного объекта Periodogram2
.
#
DSP.Periodograms.power
— Function
power(p)
Для объекта Periodogram
возвращает вычисленную мощность при каждой частоте в виде вектора.
Для объекта Spectrogram
возвращает вычисленную мощность при каждой частоте и для каждого элемента разрешения по времени в виде матрицы. Измерения — частота × время.
Для объекта CrossPowerSpectra
возвращает попарную мощность между каждой парой каналов при каждой частоте. Измерения — канал x канал x частота.
#
Base.Libc.time
— Function
time(p)
Возвращает центры элементов разрешения по времени для данного объекта Spectrogram.
#
DSP.Periodograms.coherence
— Function
coherence(c::Coherence)
Для объекта Coherence
возвращает массив n_channels
x n_channels
x length(freq(c))
, состоящий из попарных значений когерентности между каждым каналом для каждой частоты.
Расчет периодограмм с множественным заострением
#
DSP.Periodograms.mt_pgram
— Function
mt_pgram(s; onesided=eltype(s)<:Real, nfft=nextfastfft(n), fs=1, nw=4, ntapers=iceil(2nw)-1, window=dpss(length(s), nw, ntapers))
mt_pgram(signal::AbstractVector, config::MTConfig)
Вычисляет периодограмму с множественным заострением для сигнала s
.
Если window
не задано, сигнал заостряется посредством ntapers
дискретных последовательностей вытянутых сфероидов с произведением длительности на ширину полосы nw
. Каждая последовательность является равновзвешенной; адаптивное множественное заострение (пока) не поддерживается.
Если window
задано, каждый столбец применяется в качестве заострения. Сумма периодограмм нормализуется по общей сумме квадратов window
.
Возвращает объект Periodogram
.
#
DSP.Periodograms.mt_pgram!
— Function
mt_pgram!(output, s::AbstractVector{T}; onesided::Bool=eltype(s)<:Real,
nfft::Int=nextfastfft(length(s)), fs::Real=1,
nw::Real=4, ntapers::Int=ceil(Int, 2nw)-1,
window::Union{AbstractMatrix,Nothing}=nothing) where T<:Number
mt_pgram!(output::AbstractVector, signal::AbstractVector, config::MTConfig) -> Periodogram
Вычисляет периодограмму с множественным заострением, сохраняя выходные данные в output
. Аргументы:
-
signal::AbstractVector
: должен иметь длинуconfig.n_samples
-
output::AbstractVector
: должен иметь длинуlength(config.freq)
Можно также передать объект MTConfig
для предварительного выделения памяти для временных переменных и выбора параметров конфигурации; в противном случае для выбора этих параметров можно передать именованные аргументы.
Возвращает объект Periodogram
.
#
DSP.Periodograms.mt_spectrogram
— Function
mt_spectrogram(signal::AbstractVector{T}, n::Int=length(s) >> 3,
n_overlap::Int=n >> 1; fs=1,
onesided::Bool=T <: Real, kwargs...) where {T}
mt_spectrogram(signal::AbstractVector, config::MTSpectrogramConfig)
Вычисляет спектрограмму с множественным заострением и возвращает объект Spectrogram
. Можно также передать объект MTSpectrogramConfig
; в противном случае для настройки заострения можно передать любые именованные аргументы, принимаемые MTConfig
.
Возвращает объект Spectrogram
.
См. также описание mt_spectrogram!
.
#
DSP.Periodograms.mt_spectrogram!
— Function
mt_spectrogram!(output, signal::AbstractVector{T}, n::Int=length(signal) >> 3,
n_overlap::Int=n >> 1; fs=1, onesided::Bool=T <: Real, kwargs...) where {T}
mt_spectrogram!(destination::AbstractMatrix, signal::AbstractVector, config::MTSpectrogramConfig)
Вычисляет спектрограмму с множественным заострением с использованием параметров, заданных в config
. Аргументы:
-
destination
: матрицаlength(config.mt_config.freq)
xlength(config.time)
. Может быть создана с помощьюDSP.allocate_output(config)
. -
signal
: вектор длиныconfig.n_samples
-
config
: можно передать объектMTSpectrogramConfig
для хранения временных переменных и параметров конфигурации. В противном случае аргументы с параметрами можно передать напрямую.
Возвращает объект Spectrogram
.
См. также описание mt_spectrogram
.
#
DSP.Periodograms.mt_cross_power_spectra
— Function
mt_cross_power_spectra(signal::AbstractMatrix{T}; fs=1, kwargs...) where {T}
mt_cross_power_spectra(signal::AbstractMatrix, config::MTCrossSpectraConfig)
Вычисляет взаимные спектральные плотности с множественным заострением между каналами сигнала. Аргументы:
-
signal
:n_channels
xn_samples
-
Можно также передать объект
MTCrossSpectraConfig
для предварительного выделения памяти для временных переменных
и выбора параметров конфигурации. В противном случае здесь можно передать любые именованные аргументы, принимаемые MTCrossSpectraConfig
.
Создает объект CrossPowerSpectra
, содержащий выходной массив n_channels
x n_channels
x n_frequencies
(к которому обращается power
) и соответствующие частоты (к которым обращается freq
).
См. также описание mt_cross_power_spectra!
и MTCrossSpectraConfig
.
#
DSP.Periodograms.mt_cross_power_spectra!
— Function
mt_cross_power_spectra!(output, signal::AbstractMatrix; fs=1, kwargs...)
mt_cross_power_spectra!(output, signal::AbstractMatrix, config::MTCrossSpectraConfig)
Вычисляет взаимные спектральные плотности с множественным заострением между каналами сигнала. Аргументы:
-
output
:n_channels
xn_channels
xlength(config.freq)
. Можно создать с помощьюDSP.allocate_output(config)
. -
signal
:n_channels
xn_samples
-
config
:MTCrossSpectraConfig{T}
: можно передать объектMTCrossSpectraConfig
для предварительного выделения памяти для временных переменных и выбора параметров конфигурации. В противном случае можно передать любые именованные аргументы, принимаемые этим объектом.
Создает объект CrossPowerSpectra
, содержащий выходной массив n_channels
x n_channels
x n_frequencies
и соответствующие частоты (к которым обращается freq
).
См. также описание mt_cross_power_spectra
и MTCrossSpectraConfig
.
#
DSP.Periodograms.mt_coherence
— Function
mt_coherence(signal::AbstractMatrix{T}; fs=1, freq_range = nothing, demean=false, kwargs...) where T
mt_coherence(signal::AbstractMatrix, config::MTCoherenceConfig)
Аргументы:
-
signal
: матрицаn_channels
xn_samples
-
Можно передать объект
MTCoherenceConfig
для предварительного выделения памяти для временных переменных и выбора параметров конфигурации; в противном случае см. значение именованных аргументов в описанииMTCrossSpectraConfig
.
Возвращает объект Coherence
.
См. также описание mt_coherence
и MTCoherenceConfig
.
#
DSP.Periodograms.mt_coherence!
— Function
mt_coherence!(output, signal::AbstractMatrix; fs=1, freq_range=nothing, demean=false, kwargs...)
mt_coherence!(output, signal::AbstractMatrix, config::MTCoherenceConfig)
Вычисляет попарные значения когерентности между каналами.
-
output
: матрицаn_channels
xn_channels
-
signal
: матрицаn_samples
xn_channels
-
config
: необязательный объект конфигурации для предварительного выделения памяти для временных переменных и выбора параметров.
Возвращает объект Coherence
.
См. также описание mt_coherence
и MTCoherenceConfig
.
Объекты конфигурации
#
DSP.Periodograms.MTConfig
— Type
MTConfig{T}(n_samples; fs=1,
nfft = nextpow(2, n_samples),
window = nothing,
nw = 4,
ntapers = 2 * nw - 1,
taper_weights = fill(1/ntapers, ntapers),
onesided::Bool=T<:Real,
fft_flags = FFTW.MEASURE)
Создает объект конфигурации, который содержит состояние конфигурации и временные переменные, используемые при вычислении множественного заострения, например mt_pgram!
, mt_spectrogram
, MTSpectrogramConfig
, MTCrossSpectraConfig
и MTCoherenceConfig
.
Объект MTConfig
можно использовать при вычислениях повторно, если входные аргументы не меняются.
-
n_samples
: количество отсчетов, используемых в качестве входных данных при вычислении периодограмм с множественным заострением с этой конфигурацией. Используется для предварительного выделения памяти для временных буферов. -
fs
: количество отсчетов входного сигнала в секунду -
nfft
: длина входного вектора для БПФ; еслиnfft > n_samples
, входной сигнал дополняется нулями до длиныnfft
. -
window
: функция окна для множественного заострения. При значении по умолчаниюnothing
в качествеwindow
задаетсяdpss(n_samples, nw, ntapers)
. -
ntapers
: количество используемых заострений. -
taper_weights = fill(1/ntapers, ntapers)
: способ взвешивания доли каждого заострения. По умолчанию производится усреднение. -
onesided
: следует ли вычислять «одностороннее» БПФ исходя из того, что данные вещественного сигнала образуют сопряженную симметрию в пространстве Фурье. -
fft_flags
: флаги, определяющие то, как генерируется план БПФ.
#
DSP.Periodograms.MTSpectrogramConfig
— Type
MTSpectrogramConfig(n_samples, mt_config::MTConfig{T}, n_overlap_samples) where {T}
MTSpectrogramConfig{T}(n_samples, samples_per_window, n_overlap_samples; fs=1, kwargs...) where {T}
Создает объект MTSpectrogramConfig
, содержащий конфигурацию и временные переменные для mt_spectrogram
и mt_spectrogram!
. Здесь можно передать любые именованные аргументы, принимаемые MTConfig
, или сам объект MTConfig
.
#
DSP.Periodograms.MTCrossSpectraConfig
— Type
MTCrossSpectraConfig{T}(n_channels, n_samples; fs=1, demean=false, freq_range=nothing,
ensure_aligned = T == Float32 || T == Complex{Float32}, kwargs...) where {T}
MTCrossSpectraConfig(n_channels, mt_config::MTConfig{T}; demean=false, freq_range=nothing,
ensure_aligned = T == Float32 || T == Complex{Float32})
Создает объект конфигурации, используемый для mt_cross_power_spectra
и mt_cross_power_spectra!
.
-
n_channels
: количество входных каналов. -
n_samples
: количество отсчетов для каждого входного канала. -
demean
: при значенииtrue
перед вычислением взаимных спектральных плотностей из входных сигналов вычитается поканальное среднее. -
freq_range
: при значенииnothing
сохраняются все частоты. В противном случае сохраняются только частоты междуfirst(freq_range)
иlast(freq_range)
. -
ensure_aligned = T == Float32 || T == Complex{Float32}
: выполняет дополнительное копирование для выравнивания результата БПФ в памяти. -
Дополнительно можно передать либо объект
MTConfig
, либо именованные аргументы, принимаемыеMTConfig
, напримерfs
.
Возвращает объект CrossPowerSpectra
.
#
DSP.Periodograms.MTCoherenceConfig
— Type
MTCoherenceConfig{T}(n_channels, n_samples; fs=1, demean=false, freq_range=nothing, kwargs...) where T
MTCoherenceConfig(cs_config::MTCrossSpectraConfig{T}) where {T}
MTCoherenceConfig(n_channels, mt_config::MTConfig{T}; demean=false, freq_range=nothing,
ensure_aligned = T == Float32 || T == Complex{Float32}) where {T}
Создает объект конфигурации для значений когерентности из MTCrossSpectraConfig
. Предоставляет вспомогательный метод с теми же аргументами, что и у MTCrossSpectraConfig
, для создания объекта MTCrossSpectraConfig
.
См. также описание mt_coherence
и mt_coherence!
.