OpenRSP

An open-source driver stack for RSP-family SDR receivers

Performance

An open driver can be profiled and improved by anyone. The first round of that work has made OpenRSP's service cheaper to run than the proprietary one, without changing a single output sample.

CPU use of the service

Measured on Linux x86-64 with a real RSP1B, as CPU time used by the service during 10 seconds of steady streaming (lower is better):

Sample rateProprietary serviceOpenRSP, beforeOpenRSP, nowChange
2 MS/s587 ms684 ms537 ms21% less than before; about 9% less than the proprietary service
10 MS/s1,488 ms1,442 msabout 1,205 ms16% less than before; about 19% less than the proprietary service

Where the savings came from:

Bit-exact, always

Every optimisation must leave the output unchanged. The sample stream, gain values and AGC decisions are checked against the proprietary driver's output and must match bit for bit. The SIMD kernels (AVX2 and AVX-512 on x86, NEON on ARM) are chosen at run time from the CPU's features, and each one gives exactly the same result as the plain C++ code.

Some faster approaches that changed the output slightly were tried and deliberately not adopted.

Phones and tablets

What is next

The largest remaining cost is the DC-offset filter, a long serial calculation that has to stay bit-exact. Hand-written vector versions for x86 and ARM could make it up to three times faster. Profiles, patches and measurements from other hardware are welcome.