ssa
30 строк · 1.5 Кб
1// # Окно Блэкмана-Хэрриса
2// На вход получает N, расчёты ведёт до N-1
3//
4// Окно Блэкмана-Харриса (Blackman-Harris), как и окно Хэнинга,
5// применяется для измерения очень слабых компонент на фоне большого входного сигнала, таких как нелинейные искажения
6package blackmanharris7
8import "math"9
10// Расчёт окна для Блэкмана-Харриса (Blackman-Harris) при заданном N и массиве коэффициентах
11//
12// Входные данные:
13// -N - Длина окна
14// -a - Коэффтиенты Блэкмен-Харриса
15//
16// Пример:
17// blackmanharris(32, blackmanharris.Koef4_92db)
18func Blackmanharris(N int, a [4]float64) []float64 {19Window := make([]float64, N-1) // Выходной массив окна20Nfloat64 := float64(N) // N в float64, чтобы не не переводить трижды21for n := range Window { // Цикл по всему окну22nfloat64 := float64(n) // n в float64, чтобы не не переводить трижды23
24// Уравнение для периодического окна Блэкмен-Харриса с четырьмя терминами длины N25Window[n] = a[0] - a[1]*math.Cos((2.0*math.Pi/Nfloat64)*1*nfloat64) +26a[2]*math.Cos((2.0*math.Pi/Nfloat64)*2*nfloat64) +27a[3]*math.Cos((2.0*math.Pi/Nfloat64)*3*nfloat64)28}29return Window30}
31