Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: webrtc/modules/audio_processing/beamformer/array_util_unittest.cc

Issue 1394103003: Make the nonlinear beamformer steerable (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@highfreq
Patch Set: More windows fun Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 // MSVC++ requires this to be set before any other includes to get M_PI.
12 #define _USE_MATH_DEFINES
13
11 #include "webrtc/modules/audio_processing/beamformer/array_util.h" 14 #include "webrtc/modules/audio_processing/beamformer/array_util.h"
12 15
16 #include <math.h>
13 #include <vector> 17 #include <vector>
14 18
15 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
16 20
17 namespace webrtc { 21 namespace webrtc {
18 22
23 bool operator==(const Point& lhs, const Point& rhs) {
24 return lhs.x() == rhs.x() && lhs.y() == rhs.y() && lhs.z() == rhs.z();
25 }
26
27 TEST(ArrayUtilTest, PairDirection) {
28 EXPECT_EQ(Point(1.f, 2.f, 3.f),
29 PairDirection(Point(0.f, 0.f, 0.f), Point(1.f, 2.f, 3.f)));
30 EXPECT_EQ(Point(-1.f, -2.f, -3.f),
31 PairDirection(Point(1.f, 2.f, 3.f), Point(0.f, 0.f, 0.f)));
32 EXPECT_EQ(Point(0.f, 0.f, 0.f),
33 PairDirection(Point(1.f, 0.f, 0.f), Point(1.f, 0.f, 0.f)));
34 EXPECT_EQ(Point(-1.f, 2.f, 0.f),
35 PairDirection(Point(1.f, 0.f, 0.f), Point(0.f, 2.f, 0.f)));
36 EXPECT_EQ(Point(-4.f, 4.f, -4.f),
37 PairDirection(Point(1.f, -2.f, 3.f), Point(-3.f, 2.f, -1.f)));
38 }
39
40 TEST(ArrayUtilTest, DotProduct) {
41 EXPECT_FLOAT_EQ(0.f, DotProduct(Point(0.f, 0.f, 0.f), Point(1.f, 2.f, 3.f)));
42 EXPECT_FLOAT_EQ(0.f, DotProduct(Point(1.f, 0.f, 2.f), Point(0.f, 3.f, 0.f)));
43 EXPECT_FLOAT_EQ(0.f, DotProduct(Point(1.f, 1.f, 0.f), Point(1.f, -1.f, 0.f)));
44 EXPECT_FLOAT_EQ(2.f, DotProduct(Point(1.f, 0.f, 0.f), Point(2.f, 0.f, 0.f)));
45 EXPECT_FLOAT_EQ(-6.f,
46 DotProduct(Point(-2.f, 0.f, 0.f), Point(3.f, 0.f, 0.f)));
47 EXPECT_FLOAT_EQ(-10.f,
48 DotProduct(Point(1.f, -2.f, 3.f), Point(-3.f, 2.f, -1.f)));
49 }
50
51 TEST(ArrayUtilTest, CrossProduct) {
52 EXPECT_EQ(Point(0.f, 0.f, 0.f),
53 CrossProduct(Point(0.f, 0.f, 0.f), Point(1.f, 2.f, 3.f)));
54 EXPECT_EQ(Point(0.f, 0.f, 1.f),
55 CrossProduct(Point(1.f, 0.f, 0.f), Point(0.f, 1.f, 0.f)));
56 EXPECT_EQ(Point(1.f, 0.f, 0.f),
57 CrossProduct(Point(0.f, 1.f, 0.f), Point(0.f, 0.f, 1.f)));
58 EXPECT_EQ(Point(0.f, -1.f, 0.f),
59 CrossProduct(Point(1.f, 0.f, 0.f), Point(0.f, 0.f, 1.f)));
60 EXPECT_EQ(Point(-4.f, -8.f, -4.f),
61 CrossProduct(Point(1.f, -2.f, 3.f), Point(-3.f, 2.f, -1.f)));
62 }
63
64 TEST(ArrayUtilTest, AreParallel) {
65 EXPECT_TRUE(AreParallel(Point(0.f, 0.f, 0.f), Point(1.f, 2.f, 3.f)));
66 EXPECT_FALSE(AreParallel(Point(1.f, 0.f, 2.f), Point(0.f, 3.f, 0.f)));
67 EXPECT_FALSE(AreParallel(Point(1.f, 2.f, 0.f), Point(1.f, -0.5f, 0.f)));
68 EXPECT_FALSE(AreParallel(Point(1.f, -2.f, 3.f), Point(-3.f, 2.f, -1.f)));
69 EXPECT_TRUE(AreParallel(Point(1.f, 0.f, 0.f), Point(2.f, 0.f, 0.f)));
70 EXPECT_TRUE(AreParallel(Point(1.f, 2.f, 3.f), Point(-2.f, -4.f, -6.f)));
71 }
72
73 TEST(ArrayUtilTest, ArePerpendicular) {
74 EXPECT_TRUE(ArePerpendicular(Point(0.f, 0.f, 0.f), Point(1.f, 2.f, 3.f)));
75 EXPECT_TRUE(ArePerpendicular(Point(1.f, 0.f, 2.f), Point(0.f, 3.f, 0.f)));
76 EXPECT_TRUE(ArePerpendicular(Point(1.f, 2.f, 0.f), Point(1.f, -0.5f, 0.f)));
77 EXPECT_FALSE(ArePerpendicular(Point(1.f, -2.f, 3.f), Point(-3.f, 2.f, -1.f)));
78 EXPECT_FALSE(ArePerpendicular(Point(1.f, 0.f, 0.f), Point(2.f, 0.f, 0.f)));
79 EXPECT_FALSE(ArePerpendicular(Point(1.f, 2.f, 3.f), Point(-2.f, -4.f, -6.f)));
80 }
81
19 TEST(ArrayUtilTest, GetMinimumSpacing) { 82 TEST(ArrayUtilTest, GetMinimumSpacing) {
20 std::vector<Point> array_geometry; 83 std::vector<Point> geometry;
21 array_geometry.push_back(Point(0.f, 0.f, 0.f)); 84 geometry.push_back(Point(0.f, 0.f, 0.f));
22 array_geometry.push_back(Point(0.1f, 0.f, 0.f)); 85 geometry.push_back(Point(0.1f, 0.f, 0.f));
23 EXPECT_FLOAT_EQ(0.1f, GetMinimumSpacing(array_geometry)); 86 EXPECT_FLOAT_EQ(0.1f, GetMinimumSpacing(geometry));
24 array_geometry.push_back(Point(0.f, 0.05f, 0.f)); 87 geometry.push_back(Point(0.f, 0.05f, 0.f));
25 EXPECT_FLOAT_EQ(0.05f, GetMinimumSpacing(array_geometry)); 88 EXPECT_FLOAT_EQ(0.05f, GetMinimumSpacing(geometry));
26 array_geometry.push_back(Point(0.f, 0.f, 0.02f)); 89 geometry.push_back(Point(0.f, 0.f, 0.02f));
27 EXPECT_FLOAT_EQ(0.02f, GetMinimumSpacing(array_geometry)); 90 EXPECT_FLOAT_EQ(0.02f, GetMinimumSpacing(geometry));
28 array_geometry.push_back(Point(-0.003f, -0.004f, 0.02f)); 91 geometry.push_back(Point(-0.003f, -0.004f, 0.02f));
29 EXPECT_FLOAT_EQ(0.005f, GetMinimumSpacing(array_geometry)); 92 EXPECT_FLOAT_EQ(0.005f, GetMinimumSpacing(geometry));
93 }
94
95 TEST(ArrayUtilTest, GetDirectionIfLinear) {
96 std::vector<Point> geometry;
97 geometry.push_back(Point(0.f, 0.f, 0.f));
98 geometry.push_back(Point(0.1f, 0.f, 0.f));
99 EXPECT_TRUE(
100 AreParallel(Point(1.f, 0.f, 0.f), *GetDirectionIfLinear(geometry)));
101 geometry.push_back(Point(0.15f, 0.f, 0.f));
102 EXPECT_TRUE(
103 AreParallel(Point(1.f, 0.f, 0.f), *GetDirectionIfLinear(geometry)));
104 geometry.push_back(Point(-0.2f, 0.f, 0.f));
105 EXPECT_TRUE(
106 AreParallel(Point(1.f, 0.f, 0.f), *GetDirectionIfLinear(geometry)));
107 geometry.push_back(Point(0.05f, 0.f, 0.f));
108 EXPECT_TRUE(
109 AreParallel(Point(1.f, 0.f, 0.f), *GetDirectionIfLinear(geometry)));
110 geometry.push_back(Point(0.1f, 0.1f, 0.f));
111 EXPECT_FALSE(GetDirectionIfLinear(geometry));
112 geometry.push_back(Point(0.f, 0.f, -0.2f));
113 EXPECT_FALSE(GetDirectionIfLinear(geometry));
114 }
115
116 TEST(ArrayUtilTest, GetNormalIfPlanar) {
117 std::vector<Point> geometry;
118 geometry.push_back(Point(0.f, 0.f, 0.f));
119 geometry.push_back(Point(0.1f, 0.f, 0.f));
120 EXPECT_FALSE(GetNormalIfPlanar(geometry));
121 geometry.push_back(Point(0.15f, 0.f, 0.f));
122 EXPECT_FALSE(GetNormalIfPlanar(geometry));
123 geometry.push_back(Point(0.1f, 0.2f, 0.f));
124 EXPECT_TRUE(AreParallel(Point(0.f, 0.f, 1.f), *GetNormalIfPlanar(geometry)));
125 geometry.push_back(Point(0.f, -0.15f, 0.f));
126 EXPECT_TRUE(AreParallel(Point(0.f, 0.f, 1.f), *GetNormalIfPlanar(geometry)));
127 geometry.push_back(Point(0.f, 0.1f, 0.2f));
128 EXPECT_FALSE(GetNormalIfPlanar(geometry));
129 geometry.push_back(Point(0.f, 0.f, -0.15f));
130 EXPECT_FALSE(GetNormalIfPlanar(geometry));
131 geometry.push_back(Point(0.1f, 0.2f, 0.f));
132 EXPECT_FALSE(GetNormalIfPlanar(geometry));
133 }
134
135 TEST(ArrayUtilTest, GetArrayNormalIfExists) {
136 std::vector<Point> geometry;
137 geometry.push_back(Point(0.f, 0.f, 0.f));
138 geometry.push_back(Point(0.1f, 0.f, 0.f));
139 EXPECT_TRUE(
140 AreParallel(Point(0.f, 1.f, 0.f), *GetArrayNormalIfExists(geometry)));
141 geometry.push_back(Point(0.15f, 0.f, 0.f));
142 EXPECT_TRUE(
143 AreParallel(Point(0.f, 1.f, 0.f), *GetArrayNormalIfExists(geometry)));
144 geometry.push_back(Point(0.1f, 0.f, 0.2f));
145 EXPECT_TRUE(
146 AreParallel(Point(0.f, 1.f, 0.f), *GetArrayNormalIfExists(geometry)));
147 geometry.push_back(Point(0.f, 0.f, -0.1f));
148 EXPECT_TRUE(
149 AreParallel(Point(0.f, 1.f, 0.f), *GetArrayNormalIfExists(geometry)));
150 geometry.push_back(Point(0.1f, 0.2f, 0.3f));
151 EXPECT_FALSE(GetArrayNormalIfExists(geometry));
152 geometry.push_back(Point(0.f, -0.1f, 0.f));
153 EXPECT_FALSE(GetArrayNormalIfExists(geometry));
154 geometry.push_back(Point(1.f, 0.f, -0.2f));
155 EXPECT_FALSE(GetArrayNormalIfExists(geometry));
156 }
157
158 TEST(ArrayUtilTest, DegreesToRadians) {
159 EXPECT_FLOAT_EQ(0.f, DegreesToRadians(0.f));
160 EXPECT_FLOAT_EQ(static_cast<float>(M_PI) / 6.f, DegreesToRadians(30.f));
161 EXPECT_FLOAT_EQ(-static_cast<float>(M_PI) / 4.f, DegreesToRadians(-45.f));
162 EXPECT_FLOAT_EQ(static_cast<float>(M_PI) / 3.f, DegreesToRadians(60.f));
163 EXPECT_FLOAT_EQ(-static_cast<float>(M_PI) / 2.f, DegreesToRadians(-90.f));
164 EXPECT_FLOAT_EQ(2.f * static_cast<float>(M_PI) / 3.f,
165 DegreesToRadians(120.f));
166 EXPECT_FLOAT_EQ(-3.f * static_cast<float>(M_PI) / 4.f,
167 DegreesToRadians(-135.f));
168 EXPECT_FLOAT_EQ(5.f * static_cast<float>(M_PI) / 6.f,
169 DegreesToRadians(150.f));
170 EXPECT_FLOAT_EQ(-static_cast<float>(M_PI), DegreesToRadians(-180.f));
171 }
172
173 TEST(ArrayUtilTest, RadiansToDegrees) {
174 EXPECT_FLOAT_EQ(0.f, RadiansToDegrees(0.f));
175 EXPECT_FLOAT_EQ(30.f, RadiansToDegrees(M_PI / 6.f));
176 EXPECT_FLOAT_EQ(-45.f, RadiansToDegrees(-M_PI / 4.f));
177 EXPECT_FLOAT_EQ(60.f, RadiansToDegrees(M_PI / 3.f));
178 EXPECT_FLOAT_EQ(-90.f, RadiansToDegrees(-M_PI / 2.f));
179 EXPECT_FLOAT_EQ(120.f, RadiansToDegrees(2.f * M_PI / 3.f));
180 EXPECT_FLOAT_EQ(-135.f, RadiansToDegrees(-3.f * M_PI / 4.f));
181 EXPECT_FLOAT_EQ(150.f, RadiansToDegrees(5.f * M_PI / 6.f));
182 EXPECT_FLOAT_EQ(-180.f, RadiansToDegrees(-M_PI));
30 } 183 }
31 184
32 } // namespace webrtc 185 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/audio_processing/beamformer/array_util.cc ('k') | webrtc/modules/audio_processing/beamformer/beamformer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698