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

gausswin

Гауссово окно.

Библиотека

EngeeDSP

Синтаксис

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

  • w = gausswin(L) — возвращает L-точечное гауссово окно.

  • w = gausswin(L,alpha) — возвращает L-точечное гауссово окно с коэффициентом ширины alpha.

    Если окно кажется обрезанным, увеличьте количество точек L.

Аргументы

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

# L — длина окна
положительное целое число

Details

Длина окна, заданная как положительное целое число.

Если задать L как нецелое число, функция округлит его до ближайшего целого значения.
Типы данных

Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64

# alpha — коэффициент ширины
2.5 (по умолчанию) | положительный вещественный скаляр

Details

Коэффициент ширины, заданный как положительный вещественный скаляр. Аргумент alpha обратно пропорционален ширине окна.

Типы данных

Float32, Float64

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

# w — гауссово окно
вектор-столбец

Details

Гауссово окно, возвращаемое как вектор-столбец.

Примеры

Гауссово окно

Details

Сформируем гауссово окно с 64 точками. Отобразим результат с помощью plot.

import EngeeDSP.Functions: gausswin
using Plots

L = 64
w = gausswin(L)

plot(w,
     title = "Time domain",
     xlabel = "Samples",
     ylabel = "Amplitude",
     linewidth = 2,
     color = :blue,
     grid = true)

gausswin 1

import EngeeDSP.Functions: gausswin, fft, fftshift
using Plots

L = 64
w = gausswin(L)
N_fft = 1024

window_fft = fft([w; zeros(N_fft - L)])
freq_response = 20 * log10.(abs.(fftshift(window_fft)) .+ eps())

freq_axis = range(-π, π, length=N_fft)

plot(freq_axis, freq_response,
     title = "Frequency domain",
     xlabel = "Normalized Frequency (×π rad/sample)",
     ylabel = "Magnitude (dB)",
     xlims = (0, π),
     ylims = (-80, 40),
     linewidth = 2,
     color = :blue,
     grid = true)

gausswin 1 1

Гауссово окно и преобразование Фурье

Details

Этот пример показывает, что преобразование Фурье гауссова окна также является гауссовым с обратным стандартным отклонением. Это иллюстрирует принцип неопределенности времени и частоты.

Сформируем гауссово окно длиной , используя функцию gausswin и определяющее уравнение. Установим , это даст стандартное отклонение . Гауссово окно, по сути, ограничено средним значением плюс-минус 3 стандартных отклонения, или приблизительным носителем [-12,12].

import EngeeDSP.Functions: gausswin
using Plots

N = 64
n = range(-(N-1)/2, (N-1)/2, length=N)
alpha = 8

w = exp.(-(0.5) * (alpha * n ./ ((N-1)/2)).^2)

stdev = (N-1)/(2*alpha)
y = exp.(-1/2 * (n/stdev).^2)

plot(n, w, label="gausswin", linewidth=2)
plot!(n, y, label="Definition", markershape=:circle, markersize=4, linealpha=0)

xlabel!("Samples")
title!("Gaussian Window, N = $N")
plot!(legend=true)

gausswin 2

Получим преобразование Фурье гауссова окна по точкам. Используем функцию fftshift для центрирования преобразования Фурье на нулевой частоте (DC).

import EngeeDSP.Functions: fft, fftshift

nfft = 4*N
freq = range(-π, π - π/nfft, length=nfft)

wdft = fftshift(fft(w, nfft))

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

ydft = exp.(-1/2*(freq/(1/stdev)).^2) * (stdev * sqrt(2*π))

plot(freq/π, abs.(wdft), label="fft", linewidth=2)
plot!(freq/π, abs.(ydft), label="Definition", markershape=:circle, markersize=4, linealpha=0)

xlabel!("Normalized frequency (×π rad/sample)")
title!("Fourier Transform of Gaussian Window")
plot!(legend=true)

gausswin 2 1

Алгоритмы

Коэффициенты гауссова окна вычисляются из следующего уравнения:

где , а обратно пропорционально стандартному отклонению гауссовой случайной величины. Точное соответствие стандартному отклонению гауссовой функции плотности вероятности: .

Литература

  1. Hansen, Eric W. Fourier Transforms: Principles and Applications. New York: John Wiley & Sons, 2014.

  2. Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice Hall, 1999.