1 /* 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "webrtc/modules/audio_processing/beamformer/complex_matrix.h" 13 #include "webrtc/modules/audio_processing/beamformer/matrix_test_helpers.h" 14 15 namespace webrtc { 16 17 TEST(ComplexMatrixTest, TestPointwiseConjugate) { 18 const int kNumRows = 2; 19 const int kNumCols = 4; 20 21 const complex<float> kValuesInitial[kNumRows][kNumCols] = { 22 {complex<float>(1.1f, 1.1f), complex<float>(2.2f, -2.2f), 23 complex<float>(3.3f, 3.3f), complex<float>(4.4f, -4.4f)}, 24 {complex<float>(5.5f, 5.5f), complex<float>(6.6f, -6.6f), 25 complex<float>(7.7f, 7.7f), complex<float>(8.8f, -8.8f)}}; 26 27 const complex<float> kValuesExpected[kNumRows][kNumCols] = { 28 {complex<float>(1.1f, -1.1f), complex<float>(2.2f, 2.2f), 29 complex<float>(3.3f, -3.3f), complex<float>(4.4f, 4.4f)}, 30 {complex<float>(5.5f, -5.5f), complex<float>(6.6f, 6.6f), 31 complex<float>(7.7f, -7.7f), complex<float>(8.8f, 8.8f)}}; 32 33 ComplexMatrix<float> initial_mat(*kValuesInitial, kNumRows, kNumCols); 34 ComplexMatrix<float> expected_result(*kValuesExpected, kNumRows, kNumCols); 35 ComplexMatrix<float> actual_result(kNumRows, kNumCols); 36 37 actual_result.PointwiseConjugate(initial_mat); 38 MatrixTestHelpers::ValidateMatrixEqualityComplexFloat(expected_result, 39 actual_result); 40 41 initial_mat.PointwiseConjugate(); 42 MatrixTestHelpers::ValidateMatrixEqualityComplexFloat(initial_mat, 43 actual_result); 44 } 45 46 TEST(ComplexMatrixTest, TestConjugateTranspose) { 47 const int kNumInitialRows = 2; 48 const int kNumInitialCols = 4; 49 const int kNumResultRows = 4; 50 const int kNumResultCols = 2; 51 52 const complex<float> kValuesInitial[kNumInitialRows][kNumInitialCols] = { 53 {complex<float>(1.1f, 1.1f), complex<float>(2.2f, 2.2f), 54 complex<float>(3.3f, 3.3f), complex<float>(4.4f, 4.4f)}, 55 {complex<float>(5.5f, 5.5f), complex<float>(6.6f, 6.6f), 56 complex<float>(7.7f, 7.7f), complex<float>(8.8f, 8.8f)}}; 57 58 const complex<float> kValuesExpected[kNumResultRows][kNumResultCols] = { 59 {complex<float>(1.1f, -1.1f), complex<float>(5.5f, -5.5f)}, 60 {complex<float>(2.2f, -2.2f), complex<float>(6.6f, -6.6f)}, 61 {complex<float>(3.3f, -3.3f), complex<float>(7.7f, -7.7f)}, 62 {complex<float>(4.4f, -4.4f), complex<float>(8.8f, -8.8f)}}; 63 64 ComplexMatrix<float> initial_mat( 65 *kValuesInitial, kNumInitialRows, kNumInitialCols); 66 ComplexMatrix<float> expected_result( 67 *kValuesExpected, kNumResultRows, kNumResultCols); 68 ComplexMatrix<float> actual_result(kNumResultRows, kNumResultCols); 69 70 actual_result.ConjugateTranspose(initial_mat); 71 MatrixTestHelpers::ValidateMatrixEqualityComplexFloat(expected_result, 72 actual_result); 73 74 initial_mat.ConjugateTranspose(); 75 MatrixTestHelpers::ValidateMatrixEqualityComplexFloat(initial_mat, 76 actual_result); 77 } 78 79 TEST(ComplexMatrixTest, TestZeroImag) { 80 const int kNumRows = 2; 81 const int kNumCols = 2; 82 const complex<float> kValuesInitial[kNumRows][kNumCols] = { 83 {complex<float>(1.1f, 1.1f), complex<float>(2.2f, 2.2f)}, 84 {complex<float>(3.3f, 3.3f), complex<float>(4.4f, 4.4f)}}; 85 const complex<float> kValuesExpected[kNumRows][kNumCols] = { 86 {complex<float>(1.1f, 0.f), complex<float>(2.2f, 0.f)}, 87 {complex<float>(3.3f, 0.f), complex<float>(4.4f, 0.f)}}; 88 89 ComplexMatrix<float> initial_mat(*kValuesInitial, kNumRows, kNumCols); 90 ComplexMatrix<float> expected_result(*kValuesExpected, kNumRows, kNumCols); 91 ComplexMatrix<float> actual_result; 92 93 actual_result.ZeroImag(initial_mat); 94 MatrixTestHelpers::ValidateMatrixEqualityComplexFloat(expected_result, 95 actual_result); 96 97 initial_mat.ZeroImag(); 98 MatrixTestHelpers::ValidateMatrixEqualityComplexFloat(initial_mat, 99 actual_result); 100 } 101 102 } // namespace webrtc 103