comparison tests/test_signal.py @ 257:b3095d23d0c3

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