More
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
#include "c_Test.h"
|
||||
#include "c_FFT.h"
|
||||
|
||||
TEST_CASE(test_fft_forward_and_inverse_precision) {
|
||||
c_size_t N = 8;
|
||||
c_FFT_t fft;
|
||||
c_err_t err = c_FFT_Init(&fft, N, NULL);
|
||||
ASSERT_INT_EQ(C_SUCCESS, err);
|
||||
|
||||
/* Allocate and initialize a test complex input signal (e.g., a simple square pulse) */
|
||||
c_Complex_t signal[8] = {
|
||||
{1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0},
|
||||
{0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}
|
||||
};
|
||||
|
||||
/* Backup the original signal vector values for accuracy verification tests later */
|
||||
double original_real[8];
|
||||
for (c_size_t i = 0; i < N; ++i) original_real[i] = signal[i].real;
|
||||
|
||||
/* 1. Execute Forward Fourier Transformation */
|
||||
err = c_FFT_Execute(&fft, signal, C_FALSE);
|
||||
ASSERT_INT_EQ(C_SUCCESS, err);
|
||||
|
||||
/* The DC component (index 0) must equal the sum of all elements = 4.0 */
|
||||
ASSERT_DOUBLE_EQ_MSG(4.0, signal[0].real, "Forward FFT DC component calculation wrong");
|
||||
|
||||
/* 2. Execute Inverse Fourier Transformation to reconstruct the original signal */
|
||||
err = c_FFT_Execute(&fft, signal, C_TRUE);
|
||||
ASSERT_INT_EQ(C_SUCCESS, err);
|
||||
|
||||
/* Confirm that the output matches the original input wave precisely within allowed errors */
|
||||
for (c_size_t i = 0; i < N; ++i) {
|
||||
ASSERT_DOUBLE_EQ_MSG(original_real[i], signal[i].real, "FFT-IFFT signal precision mismatch");
|
||||
ASSERT_DOUBLE_EQ_MSG(0.0, signal[i].imag, "Residual imaginary noise caught in reconstructed signal");
|
||||
}
|
||||
|
||||
c_FFT_Destroy(&fft);
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
TEST_START(FastFourierTransform_Engine_Suite);
|
||||
RUN_TEST(test_fft_forward_and_inverse_precision);
|
||||
TEST_REPORT();
|
||||
RETURN_TEST_STATUS;
|
||||
}
|
||||
Reference in New Issue
Block a user