diff --git a/src/filter/src/iirfilt.proto.c b/src/filter/src/iirfilt.proto.c index 6143e6edb..a74e3056c 100644 --- a/src/filter/src/iirfilt.proto.c +++ b/src/filter/src/iirfilt.proto.c @@ -301,8 +301,8 @@ IIRFILT() IIRFILT(_create_integrator)() 0.1641457f * cexpf(_Complex_I * M_PI / 180.0f * -21.89539f), 0.1641457f * cexpf(_Complex_I * M_PI / 180.0f * 21.89539f), 1.0f,}; - // gain, digital, integrator - float complex kdi = -1.89213380759321e-05f; + // gain, digital, integrator (slight adjustment added for proper gain) + float complex kdi = -1.89213380759321e-05f / 0.9695401191711425781f; // second-order sections // allocate 12 values for 4 second-order sections each with diff --git a/src/filter/tests/iirfilt_copy_autotest.c b/src/filter/tests/iirfilt_copy_autotest.c index 65b36ed9c..c46e6a1a2 100644 --- a/src/filter/tests/iirfilt_copy_autotest.c +++ b/src/filter/tests/iirfilt_copy_autotest.c @@ -68,6 +68,30 @@ void autotest_iirfilt_dcblock() iirfilt_crcf_destroy(filter); } +void autotest_iirfilt_integrator() +{ + // options + unsigned int num_ones = 10; + unsigned int num_samples = 200; + + // allocate memory for data arrays + float buf_0[num_samples]; // filter input + float buf_1[num_samples]; // filter output + + // generate input signal + unsigned int i; + for (i=0; i