Hello Ivan,

The rule of thumb is that the digital filters are flat over 80% of the
passband. A good start would be to exclude the first and last 10% of each
FFT and reduce your frequency step size to 80% of the sample rate. This
will flatten your spectrum considerably.

USRPs have a calibration routine for many of the daughterboards, which one
are you using? Some DC offset spur is usually inevitable, but there are
correction algorithms built into the USRP's FPGA. The tool will calculate
values for these APIs but also they can be set manually.
http://files.ettus.com/manual/page_calibration.html
http://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a263ab7f0364c03e8a6e330c546769e4f
http://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a586c52db545664cb2caf830ac90c051e

Regards,
Derek



On Wed, Nov 15, 2017 at 1:26 PM, Ivan Zahartchuk via USRP-users <
usrp-users@lists.ettus.com> wrote:

> Hello. I'm trying to make a broadband spectrum analyzer. I encountered
> some difficulties with the USRP N210 board. At certain frequencies, I get
> such a picture. And there are problems with the presence of central
> frequencies. Advise me how to remove these shortcomings.
> My code:
>
> n = int(math.ceil((config.stop_freq - config.start_freq) / config.band))
> fft1 = np.array([], dtype=np.complex64)
> for i in range(0, n):
>     usrp.set_rx_freq(lib.types.tune_request(config.start_freq + config.band / 
> 2 + config.band * i), 0)
>     streamer.recv(recv_buff, config.metadata)
>     if config.metadata.error_code == lib.types.rx_metadata_error_code.timeout:
>         print ("ERRROR")
>     elif config.metadata.error_code == lib.types.rx_metadata_error_code.late:
>         print ("ERR1")
>     elif config.metadata.error_code == 
> lib.types.rx_metadata_error_code.broken_chain:
>         print ("ERR2")
>     elif config.metadata.error_code == 
> lib.types.rx_metadata_error_code.overflow:
>         print ("ERR3")
>     elif config.metadata.error_code == 
> lib.types.rx_metadata_error_code.alignment:
>         print ("ERR4")
>     elif config.metadata.error_code == 
> lib.types.rx_metadata_error_code.bad_packet:
>         print ("ERR5")
>
>     prom1 = np.fft.fft(recv_buff)
>     prom1[0:5] = 0
>     prom1[num_samps-5:num_samps] = 0
>     prom1= np.fft.fftshift(prom1)*w
>     fft1 = np.hstack((fft1,prom1))
>
>     stream_cmd.time_spec = lib.types.time_spec(0)
>     streamer.issue_stream_cmd(stream_cmd)
>
> dbm = np.array(10 * np.log10(np.abs(fft1))  - 60)
>
> return dbm,config.start_freq+(config.band/num_samps)*np.arange(dbm.size)
>
>
> _______________________________________________
> USRP-users mailing list
> USRP-users@lists.ettus.com
> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
>
>
_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Reply via email to