Periodograms — расчет периодограмм

# DSP.Periodograms.arraysplitFunction

arraysplit(s, n, m)

Разделяет массив на массивы длиной n с перекрывающимися областями длиной m. При итерации по возвращенному объекту AbstractVector или обращении к нему по индексам всегда выдается тот же объект Vector, но с другим содержимым.

# DSP.Periodograms.periodogramMethod

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_pgramFunction

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

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

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

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

freq(p)

Возвращает центры элементов разрешения по частоте для данного объекта Periodogram, Spectrogram, CrossPowerSpectra или Coherence.

Возвращает кортеж центров элементов разрешения по частоте для данного объекта Periodogram2 .

# DSP.Periodograms.powerFunction

power(p)

Для объекта Periodogram возвращает вычисленную мощность при каждой частоте в виде вектора.

Для объекта Spectrogram возвращает вычисленную мощность при каждой частоте и для каждого элемента разрешения по времени в виде матрицы. Измерения — частота × время.

Для объекта CrossPowerSpectra возвращает попарную мощность между каждой парой каналов при каждой частоте. Измерения — канал x канал x частота.

# Base.Libc.timeFunction

time(p)

Возвращает центры элементов разрешения по времени для данного объекта Spectrogram.

# DSP.Periodograms.coherenceFunction

coherence(c::Coherence)

Для объекта Coherence возвращает массив n_channels x n_channels x length(freq(c)), состоящий из попарных значений когерентности между каждым каналом для каждой частоты.

Расчет периодограмм с множественным заострением

# DSP.Periodograms.mt_pgramFunction

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.

См. также описание mt_pgram! и MTConfig.

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

См. также описание mt_pgram и MTConfig.

# DSP.Periodograms.mt_spectrogramFunction

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) x length(config.time). Может быть создана с помощью DSP.allocate_output(config).

  • signal: вектор длины config.n_samples

  • config: можно передать объект MTSpectrogramConfig для хранения временных переменных и параметров конфигурации. В противном случае аргументы с параметрами можно передать напрямую.

Возвращает объект Spectrogram.

См. также описание mt_spectrogram.

# DSP.Periodograms.mt_cross_power_spectraFunction

mt_cross_power_spectra(signal::AbstractMatrix{T}; fs=1, kwargs...) where {T}
mt_cross_power_spectra(signal::AbstractMatrix, config::MTCrossSpectraConfig)

Вычисляет взаимные спектральные плотности с множественным заострением между каналами сигнала. Аргументы:

  • signal: n_channels x n_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 x n_channels x length(config.freq). Можно создать с помощью DSP.allocate_output(config).

  • signal: n_channels x n_samples

  • config: MTCrossSpectraConfig{T}: можно передать объект MTCrossSpectraConfig для предварительного выделения памяти для временных переменных и выбора параметров конфигурации. В противном случае можно передать любые именованные аргументы, принимаемые этим объектом.

Создает объект CrossPowerSpectra, содержащий выходной массив n_channels x n_channels x n_frequencies и соответствующие частоты (к которым обращается freq).

См. также описание mt_cross_power_spectra и MTCrossSpectraConfig.

# DSP.Periodograms.mt_coherenceFunction

mt_coherence(signal::AbstractMatrix{T}; fs=1, freq_range = nothing, demean=false, kwargs...) where T
mt_coherence(signal::AbstractMatrix, config::MTCoherenceConfig)

Аргументы:

  • signal: матрица n_channels x n_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 x n_channels

  • signal: матрица n_samples x n_channels

  • config: необязательный объект конфигурации для предварительного выделения памяти для временных переменных и выбора параметров.

Возвращает объект Coherence.

См. также описание mt_coherence и MTCoherenceConfig.

Объекты конфигурации

# DSP.Periodograms.MTConfigType

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

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

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

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