[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Discuss-gnuradio] Phase measurement with Ettus Research N210
From: |
Daniele Nicolodi |
Subject: |
Re: [Discuss-gnuradio] Phase measurement with Ettus Research N210 |
Date: |
Wed, 18 Jun 2014 10:35:31 +0200 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 |
I don't speak Verilog but I get the general gist of the code below.
Thanks. Cheers,
Daniele
On 18/06/2014 01:09, Stephen Harrison wrote:
> The Verilog source for the USRP N210 is available online. You can see
> this in ddc_chain.v:
>
> wire [31:0] phase_inc;
> reg [31:0] phase;
> ...
>
> setting_reg #(.my_addr(BASE+0)) sr_0
> (.clk(clk),.rst(rst),.strobe(set_stb),.addr(set_addr),
> .in(set_data),.out(phase_inc),.changed());
> ...
>
> // NCO
> always @(posedge clk)
> if(rst)
> phase <= 0;
> else if(~ddc_enb)
> phase <= 0;
> else
> phase <= phase + phase_inc;
> ...
>
> // CORDIC 24-bit I/O
> cordic_z24 #(.bitwidth(cwidth))
> cordic(.clock(clk), .reset(rst), .enable(ddc_enb),
> .xi(to_cordic_i),. yi(to_cordic_q), .zi(phase[31:32-zwidth]),
> .xo(i_cordic),.yo(q_cordic),.zo() );
>
>
>
>
> On Tue, Jun 17, 2014 at 4:02 PM, Daniele Nicolodi <address@hidden
> <mailto:address@hidden>> wrote:
>
> Thanks for the answers.
>
> I didn't think that the sine wave in the FPGA were generated with an
> integer phase accumulator (I don't know much about how signal processing
> is done in FPGAs). If this is the case, as I understand from Stephen
> email, now I know where the frequency error comes from.
>
> On the other hand, I think that the fact that the sine is computed via
> the CORDIC method may introduce numerical errors in the amplitude only,
> which would not result in a frequency systematic error.
>
> Cheers,
> Daniele
>
> On 18/06/2014 00:43, Stephen Harrison wrote:
> > Just some quick calculations in python:
> >
> > exact phase increment for 10 MHz:
> >
> >>>> (10e6/100e6)*2**32
> > 429496729.6
> >
> > Closest phase increment:
> >
> >>>> np.round((10e6/100e6)*2**32)
> > 429496730.0
> >
> > Resulting frequency:
> >
> >>>> (np.round(10e6/100e6*2**32)/2**32)*100e6
> > 10000000.009313226
> >
> > We are out by 9.3mHz!
> >
> >
> > On Tue, Jun 17, 2014 at 3:36 PM, Sylvain Munaut <address@hidden
> <mailto:address@hidden>
> > <mailto:address@hidden <mailto:address@hidden>>> wrote:
> >
> > Hi,
> >
> > > To start I want to characterize the phase noise of the device,
> > therefore
> > > I send to both the RX channel and to the frequency reference
> input the
> > > same 10 MHz signal. I configured the N210 for 200 kHz
> sampling and a
> > > carrier frequency of 10 MHz.
> >
> > The LFTRX doesn't have a tuner so if you set a carrier freq of
> 10 MHz
> > the frequency shift is done by the FPGA via CORDIC and you'll
> have
> > numerical errors in there. You just can't get rid of them.
> >
> >
> > Cheers,
> >
> > Sylvain
> >
> > _______________________________________________
> > Discuss-gnuradio mailing list
> > address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
> > https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
> >
> >
>
>