ssa

Форк
0
/
plot_test.go 
220 строк · 5.9 Кб
1
package tg
2

3
import (
4
	"bufio"
5
	"fmt"
6
	"log"
7
	"os"
8
	"strconv"
9
	"strings"
10
	"testing"
11

12
	"github.com/RB-PRO/ssa/pkg/movmean"
13
	"github.com/RB-PRO/ssa/pkg/oss"
14
	"github.com/RB-PRO/ssa/pkg/ssa"
15
)
16

17
func TestPlot(t *testing.T) {
18
	createLineChart([]float64{1, 2, 3, 4, 5}, []float64{2, 3, 4, 5, 6}, "Sample.png")
19
}
20

21
func TestSSA_tgbot(t *testing.T) {
22
	Folder := "..\\..\\TelegramVideoNote/test/"
23
	pw, _ := oss.Make_singnal_xn(Folder + "pw")
24
	SSA_tgbot(Folder, pw)
25
}
26

27
func TestPW(t *testing.T) {
28
	RGBs := LoadRGB("..\\..\\TelegramVideoNote/test/RGBTEST.txt")
29
	pw, _ := CalcPW(RGBs, "..\\..\\TelegramVideoNote/test/")
30
	createLineChart([]float64{}, pw, "..\\..\\TelegramVideoNote/test/"+"pw.png")
31
}
32
func LoadTXT(FileName string) []float64 {
33
	var data []float64
34
	file, err := os.Open(FileName)
35
	if err != nil {
36
		log.Fatal(err)
37
	}
38
	defer file.Close()
39

40
	scanner := bufio.NewScanner(file)
41
	// optionally, resize scanner's capacity for lines over 64K, see next example
42
	for scanner.Scan() {
43
		fl, _ := strconv.ParseFloat(scanner.Text(), 64)
44
		data = append(data, fl)
45
	}
46
	if err := scanner.Err(); err != nil {
47
		panic(err)
48
	}
49
	return data
50
}
51
func LoadRGB(FileName string) []RGB_float64 {
52
	var RGBs []RGB_float64
53
	file, err := os.Open(FileName)
54
	if err != nil {
55
		log.Fatal(err)
56
	}
57
	defer file.Close()
58

59
	scanner := bufio.NewScanner(file)
60
	// optionally, resize scanner's capacity for lines over 64K, see next example
61
	for scanner.Scan() {
62
		str := scanner.Text()
63
		strs := strings.Split(str, ";")
64
		if len(strs) == 3 {
65
			R, _ := strconv.ParseFloat(strs[0], 64)
66
			G, _ := strconv.ParseFloat(strs[1], 64)
67
			B, _ := strconv.ParseFloat(strs[2], 64)
68
			RGBs = append(RGBs, RGB_float64{
69
				R: R,
70
				G: G,
71
				B: B,
72
			})
73
		}
74
	}
75
	if err := scanner.Err(); err != nil {
76
		panic(err)
77
	}
78
	return RGBs
79
}
80

81
func TestSSA(t *testing.T) {
82
	var pw []float64
83
	file, err := os.Open("..\\..\\TelegramVideoNote/test/pw.txt")
84
	if err != nil {
85
		log.Fatal(err)
86
	}
87
	defer file.Close()
88

89
	scanner := bufio.NewScanner(file)
90
	// optionally, resize scanner's capacity for lines over 64K, see next example
91
	for scanner.Scan() {
92
		str := scanner.Text()
93
		strfloat64, _ := strconv.ParseFloat(str, 64)
94
		pw = append(pw, strfloat64)
95
	}
96
	if err := scanner.Err(); err != nil {
97
		t.Error(err)
98
	}
99

100
	SSA_tgbot("..\\..\\TelegramVideoNote/test/", pw)
101
}
102

103
func TestMedianFilter(t *testing.T) {
104
	x := []float64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} // Пример входных данных
105
	n := 3                                        // Порядок фильтра
106
	result := medianFilter(x, n)                  // Применение медианного фильтра
107
	fmt.Println(result)                           // Вывод результата
108
}
109

110
func TestExtractRGB(t *testing.T) {
111
	RGBs, errRGB := ExtractRGB("..\\..\\TelegramVideoNote/test/", "huawei.mp4")
112
	if errRGB != nil {
113
		t.Error(errRGB)
114
	}
115
	fmt.Println("len(RGBs)", len(RGBs))
116
}
117

118
func TestButter(t *testing.T) {
119
	FileName := "EUT_P1H1_RGB.txt"
120
	FileName = strings.ReplaceAll(FileName, ".avi", "")
121
	FileName = strings.ReplaceAll(FileName, ".txt", "")
122
	FileName = strings.ReplaceAll(FileName, "_RGB", "")
123
	FileName = strings.ReplaceAll(FileName, "_pw", "")
124
	FileName = strings.ReplaceAll(FileName, "_but", "")
125
	Folder := "tests/"
126

127
	// RGB
128
	// RGB, _ := ExtractRGB(Folder, FileName+".avi")
129
	// RGB := LoadRGB(Folder + FileName + ".txt")
130
	// Butter
131
	// RGB_but := Butter(RGB)
132
	// SaveRGB(Folder+FileName+"_but.txt", RGB_but)
133
	// RGB2s := LoadRGB(Folder + FileName + ".txt")
134
	RGB := LoadRGB(Folder + FileName + "_RGB" + ".txt")
135
	// // PW
136
	pw, ErrPW := CalcPW(RGB, Folder)
137
	if ErrPW != nil {
138
		t.Error(ErrPW)
139
	}
140
	pw, _ = movmean.Movmean(pw, 5)
141
	// SaveTXT(Folder+FileName+"_pw.txt", pw)
142
	// pw = LoadTXT(Folder + "tg10" + "_pw.txt")
143

144
	SSS_spw2(pw, []float64{})
145

146
	// Частоты
147

148
	// ssaAnalis, ErrNewSSA := ssa2.NewSSA(pw, ssa2.Setup{
149
	// 	Cad: 30, Win: 1024, NPart: 20,
150
	// 	FMi: 40.0 / 60.0, FMa: 240.0 / 60.0,
151
	// })
152
	// if ErrNewSSA != nil {
153
	// 	t.Error(ErrNewSSA)
154
	// }
155
	// ssaAnalis.Col()
156
	// ssaAnalis.SpwEstimation()
157
	// ssaAnalis.PwEstimation()
158
	// ssa2.CreateLineChart(ssaAnalis.Pto_fMAX, Folder+"pto.png")
159
}
160

161
func SSS_spw2(pw, fmp []float64) {
162
	s := ssa.New("File")
163
	s.Graph = true // Создавать графики
164
	s.Xlsx = true  // Сохранять в Xlsx
165
	s.Var(pw, fmp)
166
	s.Spw_Form(pw) // Создать spw
167

168
	// # 1, 2, 3, 4
169
	s.SET_Form() // SSA - анализ сегментов pw
170

171
	// # 5
172
	// Оценка АКФ сингулярных троек для сегментов pw
173
	// Визуализация АКФ сингулярных троек для сегментов pw
174
	s.AKF_Form() // Оценка АКФ сингулярных троек для сегментов pw
175

176
	// # 6, 7
177
	// Огибающие АКФ сингулярных троек sET12 сегментов pw
178
	// Нормированные АКФ сингулярных троек sET12 сегментов pw
179
	s.Envelope()
180

181
	// # 8
182
	// Мгновенная частота нормированной АКФ сингулярных троек sET12 для сегментов pw
183
	s.MomentFrequency()
184

185
	// # 9
186
	// Визуализация СПМ сингулярных троек сегменов pw
187
	s.VisibleSPM()
188

189
	// # 10
190
	// Агрегирование сегментов очищенной пульсовой волны cpw
191
	s.AggregationPW()
192

193
}
194

195
// func LoadTXT()
196

197
func SaveTXT(FileName string, data []float64) {
198
	filePW, ErrOpenFile := os.Create(FileName)
199
	if ErrOpenFile != nil {
200
		panic(ErrOpenFile)
201
	}
202
	defer filePW.Close()
203
	for i := range data {
204
		if _, err := filePW.WriteString(fmt.Sprintf("%.8f\n", data[i])); err != nil {
205
			log.Println(err)
206
		}
207
	}
208
}
209
func SaveRGB(FileName string, data []RGB_float64) {
210
	filePW, ErrOpenFile := os.Create(FileName)
211
	if ErrOpenFile != nil {
212
		panic(ErrOpenFile)
213
	}
214
	defer filePW.Close()
215
	for i := range data {
216
		if _, err := filePW.WriteString(fmt.Sprintf("%.8f;%.8f;%.8f\n", data[i].R, data[i].G, data[i].B)); err != nil {
217
			log.Println(err)
218
		}
219
	}
220
}
221

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.