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

blackman

Окно Блэкмана.

Библиотека

EngeeDSP

Синтаксис

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

  • w = blackman(L) — возвращает L-точечное симметричное окно Блэкмана.

  • w = blackman(L,sflag) — возвращает окно Блэкмана, используя выборку окна, заданную аргументом sflag.

  • w = blackman(___,typeName) — указывает возможность возврата окна w с одинарной или двойной точностью.

Аргументы

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

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

Details

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

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

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

# sflag — выборка окна
"symmetric" (по умолчанию) | "periodic"

Details

Метод выборки окна, задаваемый следующим образом:

  • "symmetric" — используйте это значение при использовании окон для проектирования фильтров;

  • "periodic" — используйте это значение при использовании окон для спектрального анализа. При выборе значения "periodic", функция blackman вычисляет окно длиной L + 1 и возвращает первые L точек. Отсутствующая конечная точка является началом следующего периода периодического расширения последовательности. Следовательно, последовательность удовлетворяет предположению о периодичности дискретного преобразования Фурье.

Типы данных

String

# typeName — тип выходных данных
Float64 (по умолчанию) | Float32

Details

Тип выходных данных (класс), заданный одним из следующих способов:

  • Float64 — используйте это значение, чтобы вернуть выходные данные w с двойной точностью.

  • Float32 — используйте это значение, чтобы вернуть выходные данные w с одинарной точностью.

Типы данных

DataType

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

# w — окно Блэкмана
вектор-столбец

Details

Окно Блэкмана, возвращаемое как вектор-столбец.

Примеры

Окно Блэкмана

Details

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

import EngeeDSP.Functions: blackman
using Plots

L = 64
w = blackman(L)

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

blackman 1

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

L = 64
w = blackman(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 = (-140, 40),
     linewidth = 2,
     color = :blue,
     grid = true)

blackman 2

Алгоритмы

Следующее уравнение определяет окно Блэкмана длины :

где равно , когда четное, и , когда нечетное.

В симметричном случае вторая половина окна Блэкмана, , получается путем отражения первой половины относительно средней точки. Симметричный вариант является предпочтительным методом при использовании окна Блэкмана в КИХ-фильтре.

Периодическое окно Блэкмана строится путем расширения желаемой длины окна на один отсчет до , построения симметричного окна и удаления последнего отсчета. Периодический вариант является предпочтительным методом при использовании окна Блэкмана в спектральном анализе, поскольку дискретное преобразование Фурье предполагает периодическое расширение входного вектора.

Литература

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