From 58ebc152922055581c3f19c4ddd68c324059dbab Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sun, 12 Feb 2017 07:35:05 +0100 Subject: [PATCH] Add test to measure performance of FM modulation and filtering --- .gitignore | 1 + src/test/Makefile.am | 12 ++++++- src/test/test_performance.c | 67 +++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 src/test/test_performance.c diff --git a/.gitignore b/.gitignore index 4c188b3..a7cb155 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ src/test/test_compandor src/test/test_emphasis src/test/test_dms src/test/test_sms +src/test/test_performance diff --git a/src/test/Makefile.am b/src/test/Makefile.am index eace0dc..eb50f7d 100644 --- a/src/test/Makefile.am +++ b/src/test/Makefile.am @@ -6,7 +6,8 @@ noinst_PROGRAMS = \ test_compandor \ test_emphasis \ test_dms \ - test_sms + test_sms \ + test_performance test_filter_SOURCES = test_filter.c dummy.c @@ -57,3 +58,12 @@ test_sms_LDADD = \ $(UHD_LIBS) \ -lm +test_performance_SOURCES = dummy.c test_performance.c + +test_performance_LDADD = \ + $(COMMON_LA) \ + $(top_builddir)/src/common/libcommon.a \ + $(ALSA_LIBS) \ + $(UHD_LIBS) \ + -lm + diff --git a/src/test/test_performance.c b/src/test/test_performance.c new file mode 100644 index 0000000..622df67 --- /dev/null +++ b/src/test/test_performance.c @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include +#include "../common/sample.h" +#include "../common/filter.h" +#include "../common/fm_modulation.h" +#include "../common/debug.h" + +struct timeval start_tv, tv; +double duration; +int tot_samples; + +#define T_START() \ + gettimeofday(&start_tv, NULL); \ + tot_samples = 0; \ + while (1) { + +#define T_STOP(what, samples) \ + gettimeofday(&tv, NULL); \ + duration = (double)tv.tv_sec + (double)tv.tv_usec / 1e6; \ + duration -= (double)start_tv.tv_sec + (double)start_tv.tv_usec / 1e6; \ + tot_samples += samples; \ + if (duration >= 0.5) \ + break; \ + } \ + printf("%s: %.3f mega samples/sec\n", what, (double)tot_samples / duration / 1e6); \ + + +#define SAMPLES 1000 +sample_t samples[SAMPLES]; +float buff[SAMPLES * 2]; +fm_mod_t mod; +fm_demod_t demod; +filter_t lp; + +int main(void) +{ + fm_mod_init(&mod, 50000, 0, 0.333); + T_START() + fm_modulate(&mod, samples, SAMPLES, buff); + T_STOP("FM modulate", SAMPLES) + + fm_demod_init(&demod, 50000, 0, 10000.0); + T_START() + fm_demodulate(&demod, samples, SAMPLES, buff); + T_STOP("FM demodulate", SAMPLES) + + filter_lowpass_init(&lp, 10000.0 / 2.0, 50000, 1); + T_START() + filter_process(&lp, samples, SAMPLES); + T_STOP("low-pass filter (second order)", SAMPLES) + + filter_lowpass_init(&lp, 10000.0 / 2.0, 50000, 2); + T_START() + filter_process(&lp, samples, SAMPLES); + T_STOP("low-pass filter (fourth order)", SAMPLES) + + filter_lowpass_init(&lp, 10000.0 / 2.0, 50000, 4); + T_START() + filter_process(&lp, samples, SAMPLES); + T_STOP("low-pass filter (eigth order)", SAMPLES) + + return 0; +} +