To run a specific test use ctest -R
followed by the test name in the build directory (e.g. ctest -R qa_lms_filter_ff
).
Convergence tests involve an unknown linear channel whose impulse response is described by the raised cosine1
h = 1/2 * [1 + cos(2pi/W * (n-2))], n = 1,2,3
0, otherwise
where the parameter W controls the amount of amplitude distortion produced by the channel, with the distortion increasing with W. Equivalently, the parameter W controls the eigenvalue spread (i.e., the ratio of the largest eigenvalue to the smallest eigenvalue) of the correlation matrix of the tap inputs of the filter, with the eigenvalue spread increasing with W. Figure 1 presents the learning curves of the filter trained using the LMS algorithm with the step-size parameter μ = 0.0075 and varying W. The filter has M = 11 taps. Figure 2 illustrates the learning curve of LMS at different step-sizes and Figure 3 compares different algorithms.
1: S. Haykin (2002). Adaptive Filter Theory, 4th Edition, Prentice-Hall.
To measure performance, these tests use GNU Radio's Performance Counters. By default, GNU Radio will build without Performance Counters enabled. To enable Performance Counters, pass the following flag to cmake:
-DENABLE_PERFORMANCE_COUNTERS=ON
Given the Performance Counters are enabled in GNU Radio at compile-time, they must also be enabled at run-time. For this, use the GNU Radio preferences file (~/.gnuradio/config.conf) in the section [PerfCounters].
[PerfCounters]
on = True
In addition the the regular optimization level compiler flags, -ffast-math
can give huge performance boost at the expense of several safety features. This breaks the filters in some cases, be aware.
add_definitions(-ffast-math)
add_definitions(-march=native)
Figures 4 and 5 show performance of the filters provided by gr-adapt with -ffast-math
disabled and enabled respectively.