Add fft, ifft, hilbert and their unit test.
This commit is contained in:
@@ -311,35 +311,35 @@ TEST_F(Function2D_Test, median) {
|
||||
}
|
||||
|
||||
TEST_F(Function2D_Test, fftAndComplexAndIfft){
|
||||
// double input[10]{1,1,0,2,2,0,1,1,0,2};
|
||||
// std::complex<double>* complexInput = Aurora::complex(10,input);
|
||||
// //复数化后,实部不变,虚部全为0
|
||||
// EXPECT_DOUBLE_EQ(complexInput[1].real(),1.0)<<" complex error";
|
||||
// EXPECT_DOUBLE_EQ(complexInput[1].imag(),0)<<" complex error";
|
||||
// std::complex<double>* result = Aurora::fft(10,complexInput);
|
||||
// delete [] complexInput;
|
||||
// //检验fft结果与matlab是否对应
|
||||
// EXPECT_DOUBLE_EQ(0.0729, fourDecimalRound(result[1].real()))<<" fft result value error";
|
||||
// EXPECT_DOUBLE_EQ(2.4899, fourDecimalRound(result[2].imag()))<<" fft result value error";
|
||||
// //检验fft的结果是否共轭
|
||||
// EXPECT_DOUBLE_EQ(0, result[4].imag()+result[6].imag())<<" fft result conjugate error";
|
||||
// EXPECT_DOUBLE_EQ(0, result[4].real()-result[6].real())<<" fft result conjugate error";
|
||||
// std::complex<double>* ifftResult = Aurora::ifft(10,result);
|
||||
// EXPECT_DOUBLE_EQ(fourDecimalRound(ifftResult[1].real()),1.0)<<" ifft result real value error";
|
||||
// EXPECT_DOUBLE_EQ(fourDecimalRound(ifftResult[1].imag()),0)<<" ifft result imag value error";
|
||||
// delete [] result;
|
||||
// delete [] ifftResult;
|
||||
double *input = new double[20]{1,1,0,2,2,0,1,1,0,2,1,1,0,2,2,0,1,1,0,2};
|
||||
auto ma = Aurora::Matrix::fromRawData(input,10,2);
|
||||
auto ret = Aurora::fft(ma);
|
||||
std::complex<double>* result = (std::complex<double>*)ret.getData();
|
||||
//检验fft结果与matlab是否对应
|
||||
EXPECT_DOUBLE_EQ(0.0729, fourDecimalRound(result[1].real()));
|
||||
EXPECT_DOUBLE_EQ(2.4899, fourDecimalRound(result[2].imag()));
|
||||
EXPECT_DOUBLE_EQ(0.0729, fourDecimalRound(result[11].real()));
|
||||
EXPECT_DOUBLE_EQ(2.4899, fourDecimalRound(result[12].imag()));
|
||||
//检验fft的结果是否共轭
|
||||
EXPECT_DOUBLE_EQ(0, result[4].imag()+result[6].imag());
|
||||
EXPECT_DOUBLE_EQ(0, result[4].real()-result[6].real());
|
||||
ret= Aurora::ifft(ret);
|
||||
std::complex<double>* ifftResult = (std::complex<double>*)ret.getData();
|
||||
EXPECT_DOUBLE_EQ(fourDecimalRound(ifftResult[1].real()),1.0);
|
||||
EXPECT_DOUBLE_EQ(fourDecimalRound(ifftResult[3].real()),2.0);
|
||||
EXPECT_DOUBLE_EQ(fourDecimalRound(ifftResult[11].real()),1.0);
|
||||
EXPECT_DOUBLE_EQ(fourDecimalRound(ifftResult[13].real()),2.0);
|
||||
}
|
||||
|
||||
TEST_F(Function2D_Test, hilbert) {
|
||||
double input[10]{1,1,0,2,2,0,1,1,0,2};
|
||||
auto result = Aurora::hilbert(10,input);
|
||||
EXPECT_DOUBLE_EQ(fourDecimalRound(result[1].real()),1.0)<<" hilbert result real value error";
|
||||
EXPECT_DOUBLE_EQ(fourDecimalRound(result[1].imag()),0.3249)<<" hilbert result imag value error";
|
||||
delete [] result;
|
||||
result = Aurora::hilbert(9,input);
|
||||
EXPECT_DOUBLE_EQ(fourDecimalRound(result[1].real()),1.0)<<" hilbert result real value error";
|
||||
EXPECT_DOUBLE_EQ(fourDecimalRound(result[1].imag()),0.4253)<<" hilbert result imag value error";
|
||||
double *input = new double[20]{1,1,0,2,2,0,1,1,0,2,1,1,0,2,2,0,1,1,0,2};
|
||||
auto ma = Aurora::Matrix::fromRawData(input,10,2);
|
||||
auto ret = Aurora::hilbert(ma);
|
||||
auto result = (std::complex<double>*)ret.getData();
|
||||
EXPECT_DOUBLE_EQ(fourDecimalRound(result[1].real()),1.0);
|
||||
EXPECT_DOUBLE_EQ(fourDecimalRound(result[1].imag()),0.3249);
|
||||
EXPECT_DOUBLE_EQ(fourDecimalRound(result[11].real()),1.0);
|
||||
EXPECT_DOUBLE_EQ(fourDecimalRound(result[11].imag()),0.3249);
|
||||
}
|
||||
|
||||
TEST_F(Function2D_Test, interp2) {
|
||||
|
||||
Reference in New Issue
Block a user