[USRP-users] Removing DC offset on USRP B200

Oliver Wayne olivergwayne at gmail.com
Wed Oct 11 20:23:04 EDT 2017


I've implemented a DDS signal on the USRP device. In radio_legacy.v, I
input get_tx_I and get_tx_Q as my I and Q channels.

   always @(posedge radio_clk) begin tx[31:16] <= (run_tx) ?
get_tx_I[31:16] : tx_idle[31:16]; // I channel tx[15:0] <= (run_tx) ?
get_tx_Q[31:16] : tx_idle[15:0]; // Q channel end These are 32 bit
registers and I calculate the value of get_tx_I and get_tx_Q in external
modules. Currently I use 10 bit registers in my sine lookup table, so
something like

sine[0] = 340;
sine[1] = 342;
And I sum several of these sine terms, then set get_tx_I(Q) equal to their
sum. The problem is this has a DC offset, which means that that the local
oscillator signal also shows up in my spectrum, which I don't want. When I
try to kill the DC offset, so I write

sine[0] = 0;
sine[1] = 1;

Then I still get a local oscillator term, but also get garbage in the
spectrum. What's the optimal way to remove a DC offset? I was not sure
whether I should explicitly write out the negative value as two's
complement in the lookup table, or use something like

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ettus.com/pipermail/usrp-users_lists.ettus.com/attachments/20171011/f2edf2b0/attachment-0002.html>

More information about the USRP-users mailing list