amine@257
|
1 from unittest import TestCase
|
amine@257
|
2 from array import array as array_
|
amine@257
|
3 from genty import genty, genty_dataset
|
amine@257
|
4 import numpy as np
|
amine@257
|
5 from auditok import signal as signal_
|
amine@257
|
6 from auditok import signal_numpy
|
amine@257
|
7
|
amine@257
|
8
|
amine@257
|
9 @genty
|
amine@257
|
10 class TestSignal(TestCase):
|
amine@257
|
11 def setUp(self):
|
amine@257
|
12 self.data = b"012345679ABC"
|
amine@257
|
13 self.numpy_fmt = {"b": np.int8, "h": np.int16, "i": np.int32}
|
amine@257
|
14
|
amine@257
|
15 @genty_dataset(
|
amine@257
|
16 int8=("b", [48, 49, 50, 51, 52, 53, 54, 55, 57, 65, 66, 67]),
|
amine@257
|
17 int16=("h", [12592, 13106, 13620, 14134, 16697, 17218]),
|
amine@257
|
18 int32=("i", [858927408, 926299444, 1128415545]),
|
amine@257
|
19 )
|
amine@257
|
20 def test_to_array(self, fmt, expected):
|
amine@257
|
21 resutl = signal_.to_array(self.data, fmt)
|
amine@257
|
22 expected = array_(fmt, expected)
|
amine@257
|
23 self.assertEqual(resutl, expected)
|
amine@257
|
24 resutl_numpy = signal_numpy.to_array(self.data, self.numpy_fmt[fmt])
|
amine@257
|
25 self.assertTrue(all(resutl_numpy == expected))
|
amine@257
|
26 self.assertEqual(resutl_numpy.dtype, np.float64)
|
amine@257
|
27
|
amine@257
|
28 @genty_dataset(
|
amine@257
|
29 int8_1channel_select_0=(
|
amine@257
|
30 "b",
|
amine@257
|
31 1,
|
amine@257
|
32 0,
|
amine@257
|
33 [48, 49, 50, 51, 52, 53, 54, 55, 57, 65, 66, 67],
|
amine@257
|
34 ),
|
amine@257
|
35 int8_2channel_select_0=("b", 2, 0, [48, 50, 52, 54, 57, 66]),
|
amine@257
|
36 int8_3channel_select_0=("b", 3, 0, [48, 51, 54, 65]),
|
amine@257
|
37 int8_3channel_select_1=("b", 3, 1, [49, 52, 55, 66]),
|
amine@257
|
38 int8_3channel_select_2=("b", 3, 2, [50, 53, 57, 67]),
|
amine@257
|
39 int8_4channel_select_0=("b", 4, 0, [48, 52, 57]),
|
amine@257
|
40 int16_1channel_select_0=(
|
amine@257
|
41 "h",
|
amine@257
|
42 1,
|
amine@257
|
43 0,
|
amine@257
|
44 [12592, 13106, 13620, 14134, 16697, 17218],
|
amine@257
|
45 ),
|
amine@257
|
46 int16_2channel_select_0=("h", 2, 0, [12592, 13620, 16697]),
|
amine@257
|
47 int16_2channel_select_1=("h", 2, 1, [13106, 14134, 17218]),
|
amine@257
|
48 int16_3channel_select_0=("h", 3, 0, [12592, 14134]),
|
amine@257
|
49 int16_3channel_select_1=("h", 3, 1, [13106, 16697]),
|
amine@257
|
50 int16_3channel_select_2=("h", 3, 2, [13620, 17218]),
|
amine@257
|
51 int32_1channel_select_0=(
|
amine@257
|
52 "i",
|
amine@257
|
53 1,
|
amine@257
|
54 0,
|
amine@257
|
55 [858927408, 926299444, 1128415545],
|
amine@257
|
56 ),
|
amine@257
|
57 int32_3channel_select_0=("i", 3, 0, [858927408]),
|
amine@257
|
58 int32_3channel_select_1=("i", 3, 1, [926299444]),
|
amine@257
|
59 int32_3channel_select_2=("i", 3, 2, [1128415545]),
|
amine@257
|
60 )
|
amine@257
|
61 def test_extract_single_channel(self, fmt, channels, selected, expected):
|
amine@257
|
62 resutl = signal_.extract_single_channel(
|
amine@257
|
63 self.data, fmt, channels, selected
|
amine@257
|
64 )
|
amine@257
|
65 expected = array_(fmt, expected)
|
amine@257
|
66 self.assertEqual(resutl, expected)
|
amine@257
|
67 resutl_numpy = signal_numpy.extract_single_channel(
|
amine@257
|
68 self.data, self.numpy_fmt[fmt], channels, selected
|
amine@257
|
69 )
|
amine@257
|
70 self.assertTrue(all(resutl_numpy == expected))
|
amine@257
|
71 self.assertEqual(resutl_numpy.dtype, np.float64)
|
amine@257
|
72
|
amine@257
|
73 @genty_dataset(
|
amine@257
|
74 int8_2channel=("b", 2, [48, 50, 52, 54, 61, 66]),
|
amine@257
|
75 int8_4channel=("b", 4, [50, 54, 64]),
|
amine@257
|
76 int16_1channel=("h", 1, [12592, 13106, 13620, 14134, 16697, 17218]),
|
amine@257
|
77 int16_2channel=("h", 2, [12849, 13877, 16958]),
|
amine@257
|
78 int32_3channel=("i", 3, [971214132]),
|
amine@257
|
79 )
|
amine@257
|
80 def test_average_channels(self, fmt, channels, expected):
|
amine@257
|
81 resutl = signal_.average_channels(self.data, fmt, channels)
|
amine@257
|
82 expected = array_(fmt, expected)
|
amine@257
|
83 self.assertEqual(resutl, expected)
|
amine@257
|
84 resutl_numpy = signal_numpy.average_channels(
|
amine@257
|
85 self.data, self.numpy_fmt[fmt], channels
|
amine@257
|
86 )
|
amine@257
|
87 self.assertTrue(all(resutl_numpy == expected))
|
amine@257
|
88 self.assertEqual(resutl_numpy.dtype, np.float64)
|
amine@257
|
89
|
amine@257
|
90 @genty_dataset(
|
amine@257
|
91 int8_1channel=(
|
amine@257
|
92 "b",
|
amine@257
|
93 1,
|
amine@257
|
94 [[48, 49, 50, 51, 52, 53, 54, 55, 57, 65, 66, 67]],
|
amine@257
|
95 ),
|
amine@257
|
96 int8_2channel=(
|
amine@257
|
97 "b",
|
amine@257
|
98 2,
|
amine@257
|
99 [[48, 50, 52, 54, 57, 66], [49, 51, 53, 55, 65, 67]],
|
amine@257
|
100 ),
|
amine@257
|
101 int8_4channel=(
|
amine@257
|
102 "b",
|
amine@257
|
103 4,
|
amine@257
|
104 [[48, 52, 57], [49, 53, 65], [50, 54, 66], [51, 55, 67]],
|
amine@257
|
105 ),
|
amine@257
|
106 int16_2channel=(
|
amine@257
|
107 "h",
|
amine@257
|
108 2,
|
amine@257
|
109 [[12592, 13620, 16697], [13106, 14134, 17218]],
|
amine@257
|
110 ),
|
amine@257
|
111 int32_3channel=("i", 3, [[858927408], [926299444], [1128415545]]),
|
amine@257
|
112 )
|
amine@257
|
113 def test_separate_channels(self, fmt, channels, expected):
|
amine@257
|
114 resutl = signal_.separate_channels(self.data, fmt, channels)
|
amine@257
|
115 expected = [array_(fmt, exp) for exp in expected]
|
amine@257
|
116 self.assertEqual(resutl, expected)
|
amine@257
|
117
|
amine@257
|
118 resutl_numpy = signal_numpy.separate_channels(
|
amine@257
|
119 self.data, self.numpy_fmt[fmt], channels
|
amine@257
|
120 )
|
amine@257
|
121 self.assertTrue((resutl_numpy == expected).all())
|
amine@257
|
122 self.assertEqual(resutl_numpy.dtype, np.float64)
|
amine@257
|
123
|
amine@257
|
124 @genty_dataset(
|
amine@257
|
125 simple=([300, 320, 400, 600], 52.506639194632434),
|
amine@257
|
126 zero=([0], -200),
|
amine@257
|
127 zeros=([0, 0, 0], -200),
|
amine@257
|
128 )
|
amine@257
|
129 def test_calculate_energy_single_channel(self, x, expected):
|
amine@257
|
130 energy = signal_.calculate_energy_single_channel(x)
|
amine@257
|
131 self.assertEqual(energy, expected)
|
amine@257
|
132 energy = signal_numpy.calculate_energy_single_channel(x)
|
amine@257
|
133 self.assertEqual(energy, expected)
|
amine@257
|
134
|
amine@257
|
135 @genty_dataset(
|
amine@257
|
136 min_=(
|
amine@257
|
137 [[300, 320, 400, 600], [150, 160, 200, 300]],
|
amine@257
|
138 min,
|
amine@257
|
139 46.48603928135281,
|
amine@257
|
140 ),
|
amine@257
|
141 max_=(
|
amine@257
|
142 [[300, 320, 400, 600], [150, 160, 200, 300]],
|
amine@257
|
143 max,
|
amine@257
|
144 52.506639194632434,
|
amine@257
|
145 ),
|
amine@257
|
146 )
|
amine@257
|
147 def test_calculate_energy_multichannel(self, x, aggregation_fn, expected):
|
amine@257
|
148 energy = signal_.calculate_energy_multichannel(x, aggregation_fn)
|
amine@257
|
149 self.assertEqual(energy, expected)
|
amine@257
|
150
|
amine@257
|
151 energy = signal_numpy.calculate_energy_multichannel(x, aggregation_fn)
|
amine@257
|
152 self.assertEqual(energy, expected)
|