Sharing my FPGA based DC-removal filter

Before:


After:

Algorithm is based on the Dual-MA (2048 points) filter, as presented in https://www.dsprelated.com/showarticle/58.php .

Tried to integrate it to the master gateware but failed to find a suitable spot on the RX path. One potential location was right after the DDR interface, but this requires rounding the filter output to 12 bits; and as it turns out, it is impossible to remove the DC-offset with 12 bits, at least 16 bits should be kept.

Plan B was to remove everything from the RX path and just stream 16-bit outputs from the filter to the host. This works, but breaks the time-stamping and needs a custom LimeSuite.
So, if anyone wants to try this out:

  1. Program the FPGA from https://github.com/gasparka/LimeSDR-Mini_GW/tree/dc_removal
    LimeUtil --fpga=LimeSDR-Mini_GW/LimeSDR-Mini_bitstreams/LimeSDR-Mini_lms7_trx_HW_1.2_auto.rpd
  2. Build a custom LimeSuite from https://github.com/gasparka/LimeSuite/tree/dc_removal

Hopefully this is also interesting for people at Lime, so maybe we can find a way to get it into the master branch.

8 Likes

@gasparka
I was unable to open LimeSDR-Mini_lms7_trx.pqf from gitrev 1365e10 forward on the dc_removal branch. It looks like the error was caused by a mismatch of Quartus versions. Looks like you are using version 18.0.0 Lite Edition. When I downloaded that version I still got an error message, but at least the project opened.

Myriadrf is using version 17.1 for LimeSDR-Mini_factory.qpf, and version 15.1.2 for LimeSDR-Mini-lms7_trx.qsf.

Hi, what is the error message?

This is what it looks like when I open LimeSDR-Mini_lms7_trx.qsf gitrev: 3dadf8f with Quartus Prime Version 17.1.1

image

Error (125048): Error reading Quartus Prime Settings File C:/dc_removal_18.0/LimeSDR-Mini_GW/LimeSDR-Mini_lms7_trx/LimeSDR-Mini_lms7_trx.qsf, line 109
Info (125063): set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS ON

this same error occurs on line 110 of uLimeSDR_lms7_trx.qsf

I will try tomorrow on my Windows 10 machine, i generated this file on Linux; so i guess it is some compatibility problem.

BTW: you dont need to open the Quartus project if you just want to test the DC-removal, just program using the LimeUtil as shown in first post.

I am running Quartus on a 64-bit Windows 7 machine.

I downloaded the project directly from GitHub (rev 3da…) and had no problems opening/compiling it under Windows 10 with Quartus 18.0 .
Unfortunately i don’t have access to a Windows 7 machine nor Quartus 17.
Try to comment out the offending lines and see if it works.

I also tried compiling a clean Github download of this project with Quartus 18.0 and I agree that the error does not happen.
It happens with the older versions of Quartus; the versions that Myriad appears to be using.
Yes, removing the offending line from both files works.

Cool, thanks for investigating!