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

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: Fix more windows compile errors 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 #include "webrtc/modules/audio_processing/beamformer/array_util.h" 11 #include "webrtc/modules/audio_processing/beamformer/array_util.h"
12 12
13 #include <vector> 13 #include <vector>
14 14
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 namespace webrtc { 17 namespace webrtc {
18 18
19 bool operator==(const Point& lhs, const Point& rhs) {
20 return lhs.x() == rhs.x() && lhs.y() == rhs.y() && lhs.z() == rhs.z();
21 }
22
23 TEST(ArrayUtilTest, PairDirection) {
24 EXPECT_EQ(Point(1.f, 2.f, 3.f),
25 PairDirection(Point(0.f, 0.f, 0.f), Point(1.f, 2.f, 3.f)));
26 EXPECT_EQ(Point(-1.f, -2.f, -3.f),
27 PairDirection(Point(1.f, 2.f, 3.f), Point(0.f, 0.f, 0.f)));
28 EXPECT_EQ(Point(0.f, 0.f, 0.f),
29 PairDirection(Point(1.f, 0.f, 0.f), Point(1.f, 0.f, 0.f)));
30 EXPECT_EQ(Point(-1.f, 2.f, 0.f),
31 PairDirection(Point(1.f, 0.f, 0.f), Point(0.f, 2.f, 0.f)));
32 EXPECT_EQ(Point(-4.f, 4.f, -4.f),
33 PairDirection(Point(1.f, -2.f, 3.f), Point(-3.f, 2.f, -1.f)));
34 }
35
36 TEST(ArrayUtilTest, DotProduct) {
37 EXPECT_FLOAT_EQ(0.f, DotProduct(Point(0.f, 0.f, 0.f), Point(1.f, 2.f, 3.f)));
38 EXPECT_FLOAT_EQ(0.f, DotProduct(Point(1.f, 0.f, 2.f), Point(0.f, 3.f, 0.f)));
39 EXPECT_FLOAT_EQ(0.f, DotProduct(Point(1.f, 1.f, 0.f), Point(1.f, -1.f, 0.f)));
40 EXPECT_FLOAT_EQ(2.f, DotProduct(Point(1.f, 0.f, 0.f), Point(2.f, 0.f, 0.f)));
41 EXPECT_FLOAT_EQ(-6.f,
42 DotProduct(Point(-2.f, 0.f, 0.f), Point(3.f, 0.f, 0.f)));
43 EXPECT_FLOAT_EQ(-10.f,
44 DotProduct(Point(1.f, -2.f, 3.f), Point(-3.f, 2.f, -1.f)));
45 }
46
47 TEST(ArrayUtilTest, CrossProduct) {
48 EXPECT_EQ(Point(0.f, 0.f, 0.f),
49 CrossProduct(Point(0.f, 0.f, 0.f), Point(1.f, 2.f, 3.f)));
50 EXPECT_EQ(Point(0.f, 0.f, 1.f),
51 CrossProduct(Point(1.f, 0.f, 0.f), Point(0.f, 1.f, 0.f)));
52 EXPECT_EQ(Point(1.f, 0.f, 0.f),
53 CrossProduct(Point(0.f, 1.f, 0.f), Point(0.f, 0.f, 1.f)));
54 EXPECT_EQ(Point(0.f, -1.f, 0.f),
55 CrossProduct(Point(1.f, 0.f, 0.f), Point(0.f, 0.f, 1.f)));
56 EXPECT_EQ(Point(-4.f, -8.f, -4.f),
57 CrossProduct(Point(1.f, -2.f, 3.f), Point(-3.f, 2.f, -1.f)));
58 }
59
60 TEST(ArrayUtilTest, AreParallel) {
61 EXPECT_TRUE(AreParallel(Point(0.f, 0.f, 0.f), Point(1.f, 2.f, 3.f)));
62 EXPECT_FALSE(AreParallel(Point(1.f, 0.f, 2.f), Point(0.f, 3.f, 0.f)));
63 EXPECT_FALSE(AreParallel(Point(1.f, 2.f, 0.f), Point(1.f, -0.5f, 0.f)));
64 EXPECT_FALSE(AreParallel(Point(1.f, -2.f, 3.f), Point(-3.f, 2.f, -1.f)));
65 EXPECT_TRUE(AreParallel(Point(1.f, 0.f, 0.f), Point(2.f, 0.f, 0.f)));
66 EXPECT_TRUE(AreParallel(Point(1.f, 2.f, 3.f), Point(-2.f, -4.f, -6.f)));
67 }
68
69 TEST(ArrayUtilTest, ArePerpendicular) {
70 EXPECT_TRUE(ArePerpendicular(Point(0.f, 0.f, 0.f), Point(1.f, 2.f, 3.f)));
71 EXPECT_TRUE(ArePerpendicular(Point(1.f, 0.f, 2.f), Point(0.f, 3.f, 0.f)));
72 EXPECT_TRUE(ArePerpendicular(Point(1.f, 2.f, 0.f), Point(1.f, -0.5f, 0.f)));
73 EXPECT_FALSE(ArePerpendicular(Point(1.f, -2.f, 3.f), Point(-3.f, 2.f, -1.f)));
74 EXPECT_FALSE(ArePerpendicular(Point(1.f, 0.f, 0.f), Point(2.f, 0.f, 0.f)));
75 EXPECT_FALSE(ArePerpendicular(Point(1.f, 2.f, 3.f), Point(-2.f, -4.f, -6.f)));
76 }
77
19 TEST(ArrayUtilTest, GetMinimumSpacing) { 78 TEST(ArrayUtilTest, GetMinimumSpacing) {
20 std::vector<Point> array_geometry; 79 std::vector<Point> geometry;
21 array_geometry.push_back(Point(0.f, 0.f, 0.f)); 80 geometry.push_back(Point(0.f, 0.f, 0.f));
22 array_geometry.push_back(Point(0.1f, 0.f, 0.f)); 81 geometry.push_back(Point(0.1f, 0.f, 0.f));
23 EXPECT_FLOAT_EQ(0.1f, GetMinimumSpacing(array_geometry)); 82 EXPECT_FLOAT_EQ(0.1f, GetMinimumSpacing(geometry));
24 array_geometry.push_back(Point(0.f, 0.05f, 0.f)); 83 geometry.push_back(Point(0.f, 0.05f, 0.f));
25 EXPECT_FLOAT_EQ(0.05f, GetMinimumSpacing(array_geometry)); 84 EXPECT_FLOAT_EQ(0.05f, GetMinimumSpacing(geometry));
26 array_geometry.push_back(Point(0.f, 0.f, 0.02f)); 85 geometry.push_back(Point(0.f, 0.f, 0.02f));
27 EXPECT_FLOAT_EQ(0.02f, GetMinimumSpacing(array_geometry)); 86 EXPECT_FLOAT_EQ(0.02f, GetMinimumSpacing(geometry));
28 array_geometry.push_back(Point(-0.003f, -0.004f, 0.02f)); 87 geometry.push_back(Point(-0.003f, -0.004f, 0.02f));
29 EXPECT_FLOAT_EQ(0.005f, GetMinimumSpacing(array_geometry)); 88 EXPECT_FLOAT_EQ(0.005f, GetMinimumSpacing(geometry));
89 }
90
91 TEST(ArrayUtilTest, GetDirectionIfLinear) {
92 std::vector<Point> geometry;
93 geometry.push_back(Point(0.f, 0.f, 0.f));
94 geometry.push_back(Point(0.1f, 0.f, 0.f));
95 EXPECT_TRUE(
96 AreParallel(Point(1.f, 0.f, 0.f), *GetDirectionIfLinear(geometry)));
97 geometry.push_back(Point(0.15f, 0.f, 0.f));
98 EXPECT_TRUE(
99 AreParallel(Point(1.f, 0.f, 0.f), *GetDirectionIfLinear(geometry)));
100 geometry.push_back(Point(-0.2f, 0.f, 0.f));
101 EXPECT_TRUE(
102 AreParallel(Point(1.f, 0.f, 0.f), *GetDirectionIfLinear(geometry)));
103 geometry.push_back(Point(0.05f, 0.f, 0.f));
104 EXPECT_TRUE(
105 AreParallel(Point(1.f, 0.f, 0.f), *GetDirectionIfLinear(geometry)));
106 geometry.push_back(Point(0.1f, 0.1f, 0.f));
107 EXPECT_FALSE(GetDirectionIfLinear(geometry));
108 geometry.push_back(Point(0.f, 0.f, -0.2f));
109 EXPECT_FALSE(GetDirectionIfLinear(geometry));
110 }
111
112 TEST(ArrayUtilTest, GetNormalIfPlanar) {
113 std::vector<Point> geometry;
114 geometry.push_back(Point(0.f, 0.f, 0.f));
115 geometry.push_back(Point(0.1f, 0.f, 0.f));
116 EXPECT_FALSE(GetNormalIfPlanar(geometry));
117 geometry.push_back(Point(0.15f, 0.f, 0.f));
118 EXPECT_FALSE(GetNormalIfPlanar(geometry));
119 geometry.push_back(Point(0.1f, 0.2f, 0.f));
120 EXPECT_TRUE(AreParallel(Point(0.f, 0.f, 1.f), *GetNormalIfPlanar(geometry)));
121 geometry.push_back(Point(0.f, -0.15f, 0.f));
122 EXPECT_TRUE(AreParallel(Point(0.f, 0.f, 1.f), *GetNormalIfPlanar(geometry)));
123 geometry.push_back(Point(0.f, 0.1f, 0.2f));
124 EXPECT_FALSE(GetNormalIfPlanar(geometry));
125 geometry.push_back(Point(0.f, 0.f, -0.15f));
126 EXPECT_FALSE(GetNormalIfPlanar(geometry));
127 geometry.push_back(Point(0.1f, 0.2f, 0.f));
128 EXPECT_FALSE(GetNormalIfPlanar(geometry));
129 }
130
131 TEST(ArrayUtilTest, GetArrayNormalIfExists) {
132 std::vector<Point> geometry;
133 geometry.push_back(Point(0.f, 0.f, 0.f));
134 geometry.push_back(Point(0.1f, 0.f, 0.f));
135 EXPECT_TRUE(
136 AreParallel(Point(0.f, 1.f, 0.f), *GetArrayNormalIfExists(geometry)));
137 geometry.push_back(Point(0.15f, 0.f, 0.f));
138 EXPECT_TRUE(
139 AreParallel(Point(0.f, 1.f, 0.f), *GetArrayNormalIfExists(geometry)));
140 geometry.push_back(Point(0.1f, 0.f, 0.2f));
141 EXPECT_TRUE(
142 AreParallel(Point(0.f, 1.f, 0.f), *GetArrayNormalIfExists(geometry)));
143 geometry.push_back(Point(0.f, 0.f, -0.1f));
144 EXPECT_TRUE(
145 AreParallel(Point(0.f, 1.f, 0.f), *GetArrayNormalIfExists(geometry)));
146 geometry.push_back(Point(0.1f, 0.2f, 0.3f));
147 EXPECT_FALSE(GetArrayNormalIfExists(geometry));
148 geometry.push_back(Point(0.f, -0.1f, 0.f));
149 EXPECT_FALSE(GetArrayNormalIfExists(geometry));
150 geometry.push_back(Point(1.f, 0.f, -0.2f));
151 EXPECT_FALSE(GetArrayNormalIfExists(geometry));
152 }
153
154 TEST(ArrayUtilTest, DegreesToRadians) {
155 EXPECT_FLOAT_EQ(0.f, DegreesToRadians(0.f));
156 EXPECT_FLOAT_EQ(M_PI / 6.f, DegreesToRadians(30.f));
157 EXPECT_FLOAT_EQ(-M_PI / 4.f, DegreesToRadians(-45.f));
158 EXPECT_FLOAT_EQ(M_PI / 3.f, DegreesToRadians(60.f));
159 EXPECT_FLOAT_EQ(-M_PI / 2.f, DegreesToRadians(-90.f));
160 EXPECT_FLOAT_EQ(2.f * M_PI / 3.f, DegreesToRadians(120.f));
161 EXPECT_FLOAT_EQ(-3.f * M_PI / 4.f, DegreesToRadians(-135.f));
162 EXPECT_FLOAT_EQ(5.f * M_PI / 6.f, DegreesToRadians(150.f));
163 EXPECT_FLOAT_EQ(-M_PI, DegreesToRadians(-180.f));
164 }
165
166 TEST(ArrayUtilTest, RadiansToDegrees) {
167 EXPECT_FLOAT_EQ(0.f, RadiansToDegrees(0.f));
168 EXPECT_FLOAT_EQ(30.f, RadiansToDegrees(M_PI / 6.f));
169 EXPECT_FLOAT_EQ(-45.f, RadiansToDegrees(-M_PI / 4.f));
170 EXPECT_FLOAT_EQ(60.f, RadiansToDegrees(M_PI / 3.f));
171 EXPECT_FLOAT_EQ(-90.f, RadiansToDegrees(-M_PI / 2.f));
172 EXPECT_FLOAT_EQ(120.f, RadiansToDegrees(2.f * M_PI / 3.f));
173 EXPECT_FLOAT_EQ(-135.f, RadiansToDegrees(-3.f * M_PI / 4.f));
174 EXPECT_FLOAT_EQ(150.f, RadiansToDegrees(5.f * M_PI / 6.f));
175 EXPECT_FLOAT_EQ(-180.f, RadiansToDegrees(-M_PI));
30 } 176 }
31 177
32 } // namespace webrtc 178 } // 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