ssa
71 строка · 2.8 Кб
1package periodogram_test2
3import (4"fmt"5"math"6"strconv"7"testing"8
9"github.com/RB-PRO/ssa/pkg/periodogram"10"github.com/xuri/excelize/v2"11)
12
13func Test1Periodogram_32(t *testing.T) {14fmt.Println("--- Periodogram: Test 1 ---")15N := 32 // к-во отсчётов16x32, w32, rez32 := Data32(N) // Загружаем данные для длины окна 3217
18priodogman32 := periodogram.Periodogram(x32, w32, N) // Расчёт периодограммы19
20var ErrorCount int21
22// Циклом идём по всему массиву и сравниваем данные23for index := range priodogman32 {24if int(math.Abs(100000*(priodogman32[index]-rez32[index]))) > 3 {25ErrorCount++26// t.Errorf("Blackmanharris: Элемент с индексом %v не соответствует рассчитанному. Должно было быть %v, а получено %v.",index, rez32[index], priodogman32[index])27}28}29safeToXlsx(priodogman32)30// Если к-во ошибок не равно нулю31if ErrorCount != 0 {32t.Errorf("Blackmanharris: Test1: Расхождений между результатами MatLab и полученными результатами - " + strconv.Itoa(ErrorCount) + " из " + strconv.Itoa(N))33}34}
35
36func Test1Periodogram_1024(t *testing.T) {37fmt.Println("--- Periodogram: Test 2 ---")38N := 1024 // к-во отсчётов39x1024, w1024, rez1024 := Data1024(N) // Загружаем данные для длины окна 102440
41priodogman1024 := periodogram.Periodogram(x1024, w1024, N) // Расчёт периодограммы42
43var ErrorCount int44
45// Циклом идём по всему массиву и сравниваем данные46for index := range priodogman1024 {47if int(math.Abs(10*(priodogman1024[index]-rez1024[index]))) > 3 {48ErrorCount++49//t.Errorf("Blackmanharris: Элемент с индексом %v не соответствует рассчитанному. Должно было быть %v, а получено %v.", index, rez1024[index], priodogman1024[index])50}51}52safeToXlsx(priodogman1024)53// Если к-во ошибок не равно нулю54if ErrorCount != 0 {55t.Errorf("Blackmanharris: Test1: Расхождений между результатами MatLab и полученными результатами - " + strconv.Itoa(ErrorCount) + " из " + strconv.Itoa(N))56}57}
58
59// Сохранить в xlsx для дебага
60func safeToXlsx(x []float64) {61file_graph := excelize.NewFile()62file_graph.NewSheet("main")63file_graph.DeleteSheet("Sheet1")64lenFor := len(x)65for ind := 0; ind < lenFor; ind++ {66file_graph.SetCellValue("main", "A"+strconv.Itoa(ind+1), x[ind])67}68if err := file_graph.SaveAs("save_periodogram" + ".xlsx"); err != nil {69fmt.Println(err)70}71}
72