From 5353aa53d566bea885c29c9ec09c6e4fdbc8e5ad Mon Sep 17 00:00:00 2001 From: kradchen Date: Fri, 5 May 2023 13:22:15 +0800 Subject: [PATCH] Add ifft_symmetric and its unit test. --- src/Function2D.cpp | 24 ++++++++++++++- src/Function2D.h | 63 ++++++++++++++++++++++------------------ src/Matrix.cpp | 2 +- test/Function2D_Test.cpp | 11 +++++++ 4 files changed, 70 insertions(+), 30 deletions(-) diff --git a/src/Function2D.cpp b/src/Function2D.cpp index 059a013..e3b8076 100644 --- a/src/Function2D.cpp +++ b/src/Function2D.cpp @@ -670,7 +670,7 @@ Matrix Aurora::ifft(const Matrix &aMatrix) { //提交 修改配置后的Descriptor(实际上会进行FFT的计算初始化) status = DftiCommitDescriptor(my_desc_handle); if (status != DFTI_NO_ERROR) goto error; - + //执行计算 status = DftiComputeBackward(my_desc_handle, aMatrix.getData(), output); if (status != DFTI_NO_ERROR) goto error; @@ -685,6 +685,28 @@ Matrix Aurora::ifft(const Matrix &aMatrix) { return Matrix(); } +Matrix Aurora::ifft_symmetric(const Matrix &aMatrix,long length) +{ + if(!aMatrix.isVector()){ + std::cerr<<"ifft_symmetric only support vector!"<1) return false; - if (isScalar) return false; + if (isScalar()) return false; return getDimSize(0) == 1 || getDimSize(1) == 1; } diff --git a/test/Function2D_Test.cpp b/test/Function2D_Test.cpp index 9f62724..c4043fc 100644 --- a/test/Function2D_Test.cpp +++ b/test/Function2D_Test.cpp @@ -363,6 +363,17 @@ TEST_F(Function2D_Test, hilbert) { EXPECT_DOUBLE_EQ(fourDecimalRound(result[11].imag()),0.3249); } +TEST_F(Function2D_Test, ifft_symmetric) { + double *input = new double[18]{10,2,1,3,4,4,16,3,1,2,15,-2,1,-3,4,-4,1,-3}; + auto ma = Aurora::Matrix::fromRawData(input,9,1,1,Aurora::Complex); + auto ret = Aurora::ifft_symmetric(ma,18); + auto result = ret.getData(); + EXPECT_DOUBLE_EQ(fourDecimalRound(result[0]),5.3333); + EXPECT_DOUBLE_EQ(fourDecimalRound(result[1]),1.1188); + EXPECT_DOUBLE_EQ(fourDecimalRound(result[11]),2.8506); + EXPECT_DOUBLE_EQ(fourDecimalRound(result[17]),1.1188); +} + TEST_F(Function2D_Test, prod) { double *dataB = new double[20]{1.1, 2.6, 3.8, 6.2, 4.3, 5.7, 6.9, 10.6,