Skip to content

Commit

Permalink
iirfilt/autotest: adding test for differentiator
Browse files Browse the repository at this point in the history
  • Loading branch information
jgaeddert committed Mar 7, 2024
1 parent c5623b8 commit 9b96a0e
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 28 deletions.
2 changes: 1 addition & 1 deletion makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -523,8 +523,8 @@ filter_autotests := \
src/filter/tests/iirdecim_autotest.c \
src/filter/tests/iirdes_autotest.c \
src/filter/tests/iirdes_support_autotest.c \
src/filter/tests/iirfilt_autotest.c \
src/filter/tests/iirfilt_xxxf_autotest.c \
src/filter/tests/iirfilt_copy_autotest.c \
src/filter/tests/iirfiltsos_autotest.c \
src/filter/tests/iirhilb_autotest.c \
src/filter/tests/iirinterp_autotest.c \
Expand Down
4 changes: 2 additions & 2 deletions src/filter/src/iirfilt.proto.c
Original file line number Diff line number Diff line change
Expand Up @@ -350,8 +350,8 @@ IIRFILT() IIRFILT(_create_differentiator)()
0.1958670f * cexpf(_Complex_I * M_PI / 180.0f * -40.51510f),
0.1958670f * cexpf(_Complex_I * M_PI / 180.0f * 40.51510f),
0.1886088f,};
// gain, digital, differentiator
float complex kdd = 2.09049284907492e-05f;
// gain, digital, differentiator (slight adjustment added for proper gain)
float complex kdd = 2.09049284907492e-05f / 1.033477783203125000f;

// second-order sections
// allocate 12 values for 4 second-order sections each with
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,59 @@
#include "autotest/autotest.h"
#include "liquid.internal.h"

//
void autotest_iirfilt_integrator()
{
// options
unsigned int num_ones = 10;
unsigned int num_samples = 40;

// 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<num_samples; i++)
buf_0[i] = i < num_ones ? 1 : 0;

// create integrator and run on sample data
iirfilt_rrrf q = iirfilt_rrrf_create_integrator();
iirfilt_rrrf_execute_block(q, buf_0, num_samples, buf_1);
iirfilt_rrrf_destroy(q);

//for (i=0; i<num_samples; i++)
// printf("[%3u] %20.17f\n", i, buf_1[i]);

// check that last value matches expected
CONTEND_DELTA(buf_1[num_samples-1], num_ones, 0.01f);
}

void autotest_iirfilt_differentiator()
{
// options
unsigned int num_samples = 400;

// 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<num_samples; i++)
buf_0[i] = i;

// create differentiator and run on sample data
iirfilt_rrrf q = iirfilt_rrrf_create_differentiator();
iirfilt_rrrf_execute_block(q, buf_0, num_samples, buf_1);
iirfilt_rrrf_destroy(q);

//for (i=0; i<num_samples; i++)
// printf("[%3u] %20.17f\n", i, buf_1[i]);

// check that derivative is equal to 1
CONTEND_DELTA(buf_1[num_samples-1], 1.0f, 0.01f);
}

void autotest_iirfilt_dcblock()
{
// options
Expand Down Expand Up @@ -68,30 +120,6 @@ void autotest_iirfilt_dcblock()
iirfilt_crcf_destroy(filter);
}

void autotest_iirfilt_integrator()
{
// options
unsigned int num_ones = 10;
unsigned int num_samples = 40;

// 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<num_samples; i++)
buf_0[i] = i < num_ones ? 1 : 0;

// create integrator and run on sample data
iirfilt_rrrf q = iirfilt_rrrf_create_integrator();
iirfilt_rrrf_execute_block(q, buf_0, num_samples, buf_1);
iirfilt_rrrf_destroy(q);

// check that last value matches expected
CONTEND_DELTA(buf_1[num_samples-1], num_ones, 0.1f);
}

void testbench_iirfilt_copy(liquid_iirdes_format _format)
{
// create base object
Expand Down

0 comments on commit 9b96a0e

Please sign in to comment.