Carrier leakage on transmit

Hi,

Is there any way of calibrating out or mitigating the
carrier at the WBX tx frequency? I am sending
a wideband signal and the carrier (which I assume is
due to dc coupling in the WBX) is at a significant level
compared to my signal.

  • Charles

Kit USRP2 - WBX - UHD

On Tue, May 25, 2010 at 03:17, Charles B. [email protected]
wrote:

Is there any way of calibrating out or mitigating the carrier at the WBX tx
frequency? I am sending
a wideband signal and the carrier (which I assume is due to dc coupling in
the WBX) is at a significant level compared to my signal.

This is a result of feedthrough of the LO in the WBX mixer.

There is a function call you can make in the libusrp2 driver,
‘set_lo_offset’, which will adjust the analog LO in frequency and
compensate using the FPGA DUC to return the actual transmitted signal
to your desired tuned frequency. I’m not sure what the equivalent
function in the UHD is; it may not be implemented yet.

This at least lets you move the spurious carrier outside the passband
of your transmit signal. In order to fully remove it, either DC offset
trimming would need to be implemented in the FPGA, or host
code/firmware written to tweak the built-in DAC DC offset
compensation. I’ve done the former for clients, and it works well.

Johnathan

On Tue, May 25, 2010 at 05:53, Charles B. [email protected]
wrote:

You can offset the carrier with UHD by passing a 2nd parameter
in the set_tx_freq call. Unfortunately it only seems to work with small
offsets, far too small to take it outside the passband of my
signal. :frowning:

I haven’t had the opportunity to try recent versions of UHD; I’ll get
to that this week. But you should be able to move the LO at least
10-12 MHz away.

I think some form of calibration routine is going to be necessary.

Yes, the feedthrough is daughterboard and USRP2 specific, i.e., the DC
offset required to be added to the DAC sample values is unique to each
combination. Fortunately, I’ve found that the compensation is stable
over time and temperature, so once calibrated, I’ve been able to put
it in a config file and leave it alone.

I guess I will just have to be patient and wait.

Your feedback on the TX side issues you’ve encountered have already
been very useful, thanks.

Johnathan

Hi Johnathan,

You can offset the carrier with UHD by passing a 2nd parameter
in the set_tx_freq call. Unfortunately it only seems to work with
small offsets, far too small to take it outside the passband of my
signal. :frowning: It was not so much of a problem with my DVB-S code
but I am now playing with DVB-T and I can see it in the middle
of the ODFM waveform swamping the pilot tones.
I think some form of calibration routine is going to be necessary.
I guess I will just have to be patient and wait.

  • Charles

----- Original Message -----
From: “Johnathan C.” [email protected]

‘set_lo_offset’, which will adjust the analog LO in frequency and

Hi Johnathan,

I tried an offset of 10 MHz and the output on the spectrum analyser
looks frazzled, it no longer looked clean. Funnily enough the satellite
receiver still managed to lock to the signal.

I am fiddling about with an anti aliasing filter at the moment
but when I have that sorted I will try some other offset values.

In my last post I should have said OFDM not ODFM.

  • Charles

----- Original Message -----
From: “Johnathan C.”

On 05/25/2010 03:17 AM, Charles B. wrote:

Hi,

Is there any way of calibrating out or mitigating the carrier at the WBX
tx frequency? I am sending
a wideband signal and the carrier (which I assume is due to dc coupling
in the WBX) is at a significant level compared to my signal.

What Johnathan describes is a way of hiding the DC offset by moving it
outside your passband. The proper thing to do is to actually correct
it. In order to do that, you’ll need to write a little bit of code, but
it isn’t too complex. The DC offset will be a function of many things,
including LO frequency and temperature. These are the steps you need to
follow:

1 - Tune your TX to the frequency you want and turn it on. You don’t
need to transmit a strong signal, but you do need to transmit. You can
transmit at a very high interpolation as well, since there is really no
signal there.

2 - Tune your RX to a different but nearby frequency. +1 MHz away is
reasonable

3 - Measure the amplitude of the TX DC offset as received by the RX (in
this case at -1 MHz). Iteratively adjust your I TX DC offset number
until you get to the lowest power you can see. Then do the same for Q.
If it still isn’t low enough, do I again.

Matt

Well I have had another look at the offset stuff.

What seems to be happening is that when you apply an offset
you have to scale back the max IQ values being sent to the USRP2.

I get this situation.

No LO offset, great raised cosine shaped QPSK signal
Add LO offset, QPSK signal looks awful.

Reduce IQ signal amplitude QPSK signal again looks good
and I can see the LO offset on the spectrum analyser.

I have also noticed that when I try OFDM the unwanted rubbish
on either side of my OFDM signal changes with LO offset.

There seems to be an interaction in there somewhere probably
to do with the complex mixer in the FPGA. I have not ruled out my
own code yet but it seems unlikely.

  • Charles

3 - Measure the amplitude of the TX DC offset as received by the RX (in
this case at -1 MHz). Iteratively adjust your I TX DC offset number
until you get to the lowest power you can see. Then do the same for Q.
If it still isn’t low enough, do I again.

Matt

Hi Matt,

Are the settings for the I and Q adjustments independent or do I have to
iterate between them for the lowest error?

Also if I am sending a 0 amplitude signal can I simply AM detect the
received
signal to measure the dc error value?

Finally what is the simplest way to synchronise receive, so I can
make sure I am associating a particular DC offset error with a corrected
transmitted block?

I can see the carrier going up and down on the Analyser but my
routine comes up with some silly values. I think it is because I have
the routine out of sync.

Sorry for the dumb questions :slight_smile:

  • Charles

setup WBX, USRP2, UHD

On 06/01/2010 03:41 AM, Charles B. wrote:

iterate between them for the lowest error?
They are independent, but you still need to iterate. Once the I offset
is small enough, it will be swamped by the Q offset and you won’t get
enough precision to totally remove it until you also reduce Q.

Also if I am sending a 0 amplitude signal can I simply AM detect the
received signal to measure the dc error value?

Possibly, but if there is another signal coming in it will mess up your
results.

Finally what is the simplest way to synchronise receive, so I can make
sure I am associating a particular DC offset error with a corrected
transmitted block?

I can see the carrier going up and down on the Analyser but my
routine comes up with some silly values. I think it is because I have
the routine out of sync.

If you aren’t using inband signalling, you’ll need to proceed slowly.
Make a change, wait a little bit to make sure you are seeing its results
before you make the next one.

Matt

On 05/25/2010 07:40 AM, Charles B. wrote:

Reduce IQ signal amplitude QPSK signal again looks good and I can see
the LO offset on the spectrum analyser.

I have also noticed that when I try OFDM the unwanted rubbish on either
side of my OFDM signal changes with LO offset.

There seems to be an interaction in there somewhere probably
to do with the complex mixer in the FPGA. I have not ruled out my own
code yet but it seems unlikely.

When there is no LO offset, your I signals passes straight through, as
does the Q. When there is LO offset, the cordic is rotating them, and
when both are high, and the rotation is 45/135/225/315 degrees, the peak
of the signal is now sqrt(2) times as big.

To look at it another way, your QPSK signal is being generated on the
corners of a square in the IQ plane. When you rotate it (which only
happens with LO offset), the corners can now go to higher values, like
when it is rotated 45 degrees and the points align with an axis.

Matt