ssa
30 строк · 1.5 Кб
1// # Окно Блэкмана-Хэрриса
2// На вход получает N, расчёты ведёт до N-1
3//
4// Окно Блэкмана-Харриса (Blackman-Harris), как и окно Хэнинга,
5// применяется для измерения очень слабых компонент на фоне большого входного сигнала, таких как нелинейные искажения
6package blackmanharris
7
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// Уравнение для периодического окна Блэкмен-Харриса с четырьмя терминами длины N
25Window[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 Window
30}
31