Transmit - Unwanted Carrier [Fixed]

@martywittrock
Can you please test this carrier issue on the last version of SDRAngel in UHF range?
I am not in position to do that at the moment. But remember that carrier was not present
on later versions…

@9a4db - Djani,

Unfortunately I’m in the same situation, Djani. I suffered a home fire in mid-September that was extensive enough that all the AC power and electrical panel was burned in the fire (see attached picture). The earliest ETA for me getting back into the house is late December. Right now, a good share of my LimeSDR and PC that had all the drivers for it is in storage until the house is completely recovered (and cleaned). I do have one LimeSDR with me that I can try to hook up to one of my cube PCs I have with me that run USB 3.0 and see if I can retrieve my HDMI screen from storage - - but this is going to take a day or two to make happen. I will try to get this going as soon as possible - please stay tuned…

73 de Marty, KN0CK

I am really sorry to hear that.
Keep the good spirit and please first resolve that home issue.
I can manage that test mid of next week, hopefully.
73
Djani

1 Like

@9a4db - Djani,

I’ll try to give it a go over the next couple of days…I need a strong challenge like this while I’m living out of a defined number of moving boxes and suitcases until this is done…

73 de Marty, KN0CK

I’ll jump on SDRAngel this weekend. Have to flash the dang FX3, as I had a bad update.

Ed

@SimonG4ELI Could you provide a test script that produces the issue on your hardware? That would enable us to reproduce the problem and actually start making progress in solving it.

Hi,

My software is not scripted, sorry. I transmit with the Lime USB and watch the signal with an Airspy HF+ on another computer.

The spur at 0Hz (centre of passband) is only a few dB below the peak signal. It does not depend on the IQ data, still there at the same level even when I send 0’s in the IQ stream. Running calibration doesn’t help.

I have not tried I,Q sliders to manually reduce the spur, if I have time I will do that today or tomorrow.

My current aim is to transmit at 145 / 440 MHz and have the spur at least 40 / 60 dB below peak output.

@gasparka

Ideally you run a program:

  • Use a Lime USB
  • Transmit bandwidth 3.072 MHz
  • Audio - could be a steady tone, two tones, …
  • Transmit at 145 MHz, 440 MHz
  • Look at the transmitted signal, look for a spur in the centre of the transmit bandwidth

I have a massive spur, running LMS_Calibrate() does nothing to reduce the spur, others have also experienced this spur.

If you are able to generate a signal without a spur then it’s either my hardware (and others’ hardware), or your .ini file.

After walking dogs I’ll add some screenshots showing this spur, I have attached a logfile (above) showing the diagnostic information.

I have run basicTX with 4 more LimeSDR-USB v1.4 boards (so 7 in total) and calibration works on all. So if it does not work for you, there may be something wrong with your board.

Typical basicTX output on spectrum analyser:

and with LMS_Calibrate() commented out:

1 Like

@IgnasJ

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.

@Ignas

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.

4 Likes

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

Hi,

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.

2 Likes

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

Ricardas,

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.