Transmit - Unwanted Carrier [Fixed]



Did you use a 3.072 MHz bandwidth?
Did you use 32-bit IQ data (I doubt this is the problem)?
Can you provide the .ini file you used?
Can you show the c++ code used?

It’s either my board (quite an early one) or something in the code I have written.

Here’s my board information:

> 09:52:30.610: Radio LimeSDR> Initialising LMS chip
> 09:52:30.611: Radio LimeSDR> OK
> 09:52:30.611: Radio LimeSDR> Device: device name ............: LimeSDR-USB
> 09:52:30.611: Radio LimeSDR>         expansion name .........: UNSUPPORTED
> 09:52:30.611: Radio LimeSDR>         firmware version .......: 4
> 09:52:30.611: Radio LimeSDR>         hardware version .......: 4
> 09:52:30.611: Radio LimeSDR>         protocol version .......: 1
> 09:52:30.612: Radio LimeSDR>         board serial number ....: x00471621
> 09:52:30.612: Radio LimeSDR>         gateware version .......: 2.18
> 09:52:30.612: Radio LimeSDR>         gateware target board ..: LimeSDR-USB


The default settings in the example are: carrier frequency 500 MHz, sample rate 5 MHz, tone frequency 1 MHz. On some boards, I have also tried using 3.072 MHz sample rate and carrier at 145 MHz and 440 MHz and dc calibration still worked. It should be easy to modify these settings, however at arbitrary sample rates and tone frequencies the example may produce artefacts because it sends the same buffer every LMS_SendStream() call but signal period does not always align well with send buffer length.

Yes, the example passes samples to API in float format (32-bit).

There is no .ini file. It uses LMS_Init() to initialize LMS settings.

From your previous posts I understood that you have already tried basicTX example but it did not work for you.
Anyway, the source code:

Building of examples should be enabled in LimeSuite by default.


My code is basically identical except two lines: sample rate is init with oversample and I do not use normallized gain. When I close my app and start LimeSuiteGui identical result with TX calibration call:on Mini is work fine on USB not. I also notice that when TX gain is changed calibration is disrupted.



Many thanks for this reply. By removing my settings file I now have the carrier reduced when I calibrate, it’s 40 dB down. After lunch I will add sliders to adjust the I/Q DC correction (currently zero).

Obviously I have more work to do, but this is a very big improvement.


Hi Ignas,

LMS_Calibrate reduces this spur by + 40dB, excellent, -40dB reduction is good, my goal is -50dB or more. The problem must have been values in my .ini file, I now allow the user to specify the .ini file used, by default there is none.

After transmit calibration, should I be able to reduce the spur further by setting LMS7_DCCORRI_TXTSP and LMS7_DCCORRQ_TXTSP?

If I use LMS7_DCCORRI_TXTSP, LMS7_DCCORRQ_TXTSP I assume the value I apply is in the range 0 to 255 (uint16_t)? This is the range for 8-bit, 2’s compliment.


Those are digital correctors, calibration now uses different analog correctors which have smaller steps, I’m not at my PC so can’t give exact names right now



Maybe LMS7_GCORRI_TXTSP and LMS7_GCORRQ_TXTSP? If so, it would help a lot to know the valid range of values. These two are updated by LMS_Calibrate().


Today I resolved the issue with unwanted carrier on USB board. My code was ok but board temperature was above 51 degrees celsius resulting in bad calibration results. After adding tick heat gum under and above board temperature drop below 48C and LMS_Calibrate function did perfect job. This reminds me on NCO temperature related issues I have before. Unwanted carrier is now down to noise floor like on Mini.
Hope this will help someone.


That’s why I am keeping my boards around or bellow 40 C operational temp…
12 V fan powered from outside on 5V and up…

Here cooling signal generator bellow too :wink:


Those are I/Q gain correctors. What you want is analog DC correctors LMS7_DC_TXAI, LMS7_DC_TXAQ, they have ranges of [-1023:1024]. Unfortunately I see there is no easy API call to use those. The sequence to update those correctors can be seen lms7002_pnlR3_view::OnWriteTxDC



Excellent, I don’t mind how I get at the registers as long as it’s clean and supported. I’ll give this a try later today but it’s looking good now.