Aliases when transmitting at IF 70 MHz


I am using a LimeSDR mini to send a sine signal at 71 MHz center frequency. At the receiver side, I sample the signal at 200MHz and I get lots of aliases. How can I fix this ?

I am using C++ on Ubuntu 22.04.
I did the following minor changes to the basicTx example:

const double frequency = 70e6; //center frequency to 70 MHz
const double sample_rate = 5e6; //sample rate to 5 MHz
const double tone_freq = 1e6; //tone frequency

Same behavior if I add a LP tx filter:

LMS_SetLPFBW(device, LMS_CH_TX, 0, 5000000);
float_type BandWidth;
LMS_SetLPF(device, LMS_CH_TX, 0, true);

What do I miss to avoid aliases ?

How are you receiving - with a separate receiver, or with the Lime? Are you possibly compressing the signal? Are you seeing other spurs? What are the spurious frequencies?

The Tx of the lime is connected with a cable to the acquisition board of another type of receiver (which is fully validated)

The spur are every 10MHz or so, see picture enclosed

The digitiser is not saturating (if I lower the tx signal, all spikes including desired diminish all together)

OK, eliminated the obvious. What happens if you reduce your TX bandwidth to 2MHz - do the spurs go down? If you change the sample rate, does the spacing change? If you change the center frequency, how do they change?

How close to the rails is your modulation signal - if you reduce the modulation signal amplitude to 1/2 of what it is, how do things change?

My guess at this point is that you are overdriving the upconversion chain, saturating it at some point. If so, reducing the modulation signal level should remove the spurs.

I will not be able to do the tests before approx one month time (holiday). I will do them when I return

But I remember reducing the linear tx gain gradually and the spurs did not disappear

I bought a LP filter cutting at 80 MHz, I will test it when I return

Do you have the possibility to do the same testing?

What I am suggesting is reducing the value of the modulation signal - in other words, that 1MHz sine wave you are generating. Assuming you are doing something like M(x) = 1.0 * sin(wt), change it to M(x) = 0.5 * sin(wt). Change the digital values you are sending in to be one half their magnitude.