Hi Sam,

These are all new issues that we were unaware of. I will follow up with you
off list to debug these issues through your previously sent email to
supp...@ettus.com.


Regards,
Nate Temple

On Fri, Jan 25, 2019 at 2:13 PM Samuel Prager via USRP-users <
usrp-users@lists.ettus.com> wrote:

> Hello,
>
> We are experiencing a number of issues with our N300s. We would like to
> know if these are known issues and whether or not they are being addressed.
>
> We have recently updated the filesystems, FPGA images and UHD/MPM to
> 3.13.1 (currently up to date with UHD 3.13.1 release, commit 711ec8a). We
> are using our N300s in embedded mode. All software/rfnoc firmware has been
> previously tested and used on X300s and E312s.
>
> I have uploaded a few supporting images to a google drive folder. (Link:
> https://drive.google.com/drive/folders/1b1T69G7AAA2-QlIByBYp9UQ_gs8_1253?usp=sharing
> )
>
>
> 1) GPSDO Locking and Synchronization:
>
> - The time to obtain and GPS lock, even when outside is long and often
> unstable. Code used to query GPSDO lock:
>
> *uhd::property_tree::sptr tree = _usrp->get_tree();*
> *uhd::fs_path path;*
> *std::vector mboard_names = tree->list("/mboards");*
> *path = "/mboards/" + mboard_names[0];*
> *try {*
> *path = "/mboards/" + mboard_names[0];*
> *try {*
> * tree->access(path / "sensors" / "gps_locked").get().value;*
> *} catch (std::exception &) {*
> *} catch (std::exception &) {*
> * std::cerr << "Error: No response from GPSDO" << std::endl;*
> * return false;*
> *}*
> *//Check for GPS lock*
> *uhd::sensor_value_t gps_locked = tree->access(path / "sensors" /
> "gps_locked").get();*
> *return(gps_locked.to_bool());*
> *}*
>
>
> This is a printout of the N300 sensor values when GPSDO is in a non-locked
> state:
>
> *----------------- Sensors -----------------*
> *Clock Source: gpsdo*
> *Time Source: gpsdo*
> *ref_locked: true*
> *gps_locked: false*
> *gps_time: 1548206414*
> *gps_tpv: {"ept": 0.0050000000000000001, "speed": 3.7040000000000002,
> "epv": 73.599999999999994, "device": "/dev/ttyPS1", "eps":
> 141.21000000000001, "lon": -118.169881667, "epy": 109.009, "epx": 101.339,
> "alt": 367.69999999999999, "lat": 34.200626667000002, "class": "TPV",
> "epc": 92.0, "track": 318.0, "time": "2019-01-23T01:20:14.000Z", "mode": 3,
> "climb": 32.200000000000003}*
> *gps_sky: {"hdop": 9.3000000000000007, "class": "SKY", "device":
> "/dev/ttyPS1", "pdop": 9.8000000000000007, "vdop": 3.2000000000000002,
> "ydop": 7.2699999999999996, "tdop": 3.6200000000000001, "gdop": 11.09,
> "satellites": [{"PRN": 30, "az": 53, "el": 71, "ss": 26, "used": false},
> {"PRN": 28, "az": 327, "el": 67, "ss": 0, "used": false}, {"PRN": 135,
> "az": 205, "el": 47, "ss": 34, "used": false}, {"PRN": 7, "az": 101, "el":
> 44, "ss": 33, "used": true}, {"PRN": 17, "az": 188, "el": 44, "ss": 32,
> "used": true}, {"PRN": 13, "az": 308, "el": 38, "ss": 0, "used": false},
> {"PRN": 11, "az": 80, "el": 32, "ss": 34, "used": true}, {"PRN": 1, "az":
> 99, "el": 17, "ss": 27, "used": false}, {"PRN": 19, "az": 199, "el": 17,
> "ss": 28, "used": true}, {"PRN": 18, "az": 70, "el": 14, "ss": 28, "used":
> true}, {"PRN": 8, "az": 39, "el": 11, "ss": 0, "used": false}, {"PRN": 9,
> "az": 164, "el": 10, "ss": 27, "used": false}, {"PRN": 15, "az": 321, "el":
> 7, "ss": 0, "used": false}, {"PRN": 5, "az": 255, "el": 4, "ss": 0, "used":
> false}], "xdop": 6.7599999999999998}*
> *fan: 4320*
> *temp: 42.0*
>
>
> This is a printout of the N300 sensor values when GPSDO is in a locked
> state:
>
> *----------------- Sensors -----------------*
> *Clock Source: gpsdo*
> *Time Source: gpsdo*
> *ref_locked: true*
> *gps_locked: true*
> *gps_time: 1548215759*
> *gps_tpv: {"lat": 34.200188333, "class": "TPV", "speed": 0.0, "device":
> "/dev/ttyPS1", "epv": 112.7, "ept": 0.0050000000000000001, "alt":
> 341.10000000000002, "mode": 3, "time": "2019-01-23T03:55:57.000Z", "climb":
> 0.69999999999999996, "lon": -118.169401667, "epc": 225.40000000000001,
> "track": 148.09999999999999}*
> *gps_sky: {"hdop": 3.2999999999999998, "class": "SKY", "satellites":
> [{"used": false, "el": 80, "az": 318, "PRN": 19, "ss": 12}, {"used": false,
> "el": 58, "az": 32, "PRN": 17, "ss": 13}, {"used": true, "el": 49, "az":
> 199, "PRN": 133, "ss": 35}, {"used": false, "el": 47, "az": 205, "PRN":
> 135, "ss": 31}, {"used": true, "el": 42, "az": 159, "PRN": 6, "ss": 31},
> {"used": false, "el": 36, "az": 311, "PRN": 24, "ss": 0}, {"used": true,
> "el": 35, "az": 75, "PRN": 28, "ss": 29}, {"used": true, "el": 24, "az":
> 221, "PRN": 13, "ss": 32}, {"used": false, "el": 19, "az": 258, "PRN": 15,
> "ss": 17}, {"used": false, "el": 17, "az": 189, "PRN": 2, "ss": 23},
> {"used": false, "el": 16, "az": 146, "PRN": 30, "ss": 21}, {"used": false,
> "el": 8, "az": 290, "PRN": 12, "ss": 15}, {"used": false, "el": 5, "az":
> 35, "PRN": 1, "ss": 0}], "vdop": 4.9000000000000004, "device":
> "/dev/ttyPS1", "pdop": 5.9000000000000004}*
> *fan: 4320*
> *temp: 38.0*
>
>
> We note that in the ‘unlocked’ state, based on the gps_sky and gps_tpv
> reports, there are actually more satellites being used for the position
> calculation (‘used’ set to ‘true’). Additionally, the signal strengths
> (’ss’) in general are as good, if not better, than those in the ‘locked’
> state.
>
> This is a consistent problem across multiple N300s. In some cases,
> gps_locked is not being asserted for hours despite good signal reception.
>
> 2) GPSDO/GPS PPS drifts in both ‘gps_locked=true’ and ‘gps_locked=false’
> states significantly.
>
> We have setup 2 N300s with RX/TX channels cross connected in a bistatic
> loopback to test GPSDO synchronization.
>
> N300 A: TX0 -> N300 B: RX0
> N300 B: TX0 -> N300 A: RX0
>
> We transmit 100MHz LFM chirps and plot the autocorrelation peak as a
> function of time (X axis is ‘Free space range’). The TX/RX is ‘triggered’
> by the every second by GPS PPS. The result is the same whether or not the
> individual N300s report as being locked to gps: Over 20 seconds, the
> relative drift is .5 us. Orders of magnitude worse than what the jackson
> labs GPSDO should be capable of. (See *n300_bistatic_gpsdo_drift_plot.png*
> )
>
> For reference, we have attached plots of relative 50MHz LFM chirp waveform
> autocorrelation peak drift obtained using similar software, environment and
> setup but with two E312s: The relative peak drift is contained to ~+-10ns
> using the PLL locked to the GPS pps signal, as expected. (See
> *sync_pps_drift_e312.png*)
>
> The code that performs the pps clock synchronization is:
>
> *uhd::property_tree::sptr tree = _usrp->get_tree();*
> *uhd::fs_path path;*
> *std::vector<std::string> mboard_names = tree->list("/mboards");*
> *path = "/mboards/" + mboard_names[0];*
> *double rate = _radio_ctrl->get_rate();*
> *double time_set = 0;*
>
> *std::vector<std::string> sensor_names = tree->list(path / "sensors");*
> *int gps_time=0;*
> *if(std::find(sensor_names.begin(), sensor_names.end(), "gps_time") !=
> sensor_names.end()) {*
> *    gps_time = tree->access<uhd::sensor_value_t>(path / "sensors" /
> "gps_time").get().to_int();*
> *}*
> *else if(std::find(sensor_names.begin(), sensor_names.end(),
> "get_gps_time_sensor") != sensor_names.end()) {*
> *    try{*
> *        gps_time = tree->access<uhd::sensor_value_t>(path / "sensors" /
> "get_gps_time_sensor").get().to_int();*
> *    }*
> *    catch (std::exception &e) {*
> *        std::cerr<<“Error: caught exception while accessing
> get_gps_time_sensor: "<<e.what()<<std::endl;*
> *        return -1;*
> *    }*
> *}*
> *else{*
> *    std::cerr<< "Error: gps_time sensor field not found"<<std::endl;*
> *    return -1;*
> *}*
> *uint64_t last_pps = _radio_ctrl->get_time_last_pps().to_ticks(rate);*
> *uint64_t curr_pps = last_pps;*
> *while (curr_pps ==last_pps){*
> *    curr_pps = _radio_ctrl->get_time_last_pps().to_ticks(rate);*
> *    boost::this_thread::sleep(boost::posix_time::milliseconds(20));*
> *}*
> *double gps_time_next_d = (double)gps_time+2.0;*
> *uhd::time_spec_t new_gps_time = uhd::time_spec_t(gps_time_next_d);*
> *_radio_ctrl->set_time_next_pps(new_gps_time);*
> *time_set = gps_time_next_d;*
> *return 0;*
>
>
> 3) Spectrum asymmetry for TX gain >= 35 dB.
> - When the TX gain of the N300 is >=35 dB, the spectrum becomes asymmetric
> w/r/t DC. This is true for LFM chirp waveforms of any bandwidth and with
> zeros pre-appended. Here we have configured a single N300 in external
> loopback:
>
> N300 A: TX0 -> N300 A: RX0
>
>  We've attached plots of 100MHz and 25MHz bandwidth chirp spectra.
> Reducing TX gain to 34.5 dB solves this and the spectrum looks normal. We
> have 30dB attenuators in all paths and are far from receiver saturation.
> This problem is consistent for both channels across multiple N300s. Plots
> show the spectrum of the RX waveform as well as the expected waveform
> spectrum.  (See *n300_chirp100mhz_trim.png*, *n300_chirp25mhz_trim.png*)
>
> 4) Randomly appearing impulse with magnitude ~255 at multiples of 2048
> samples.
> - An impulse will appear in the time domain RX signal randomly, but often,
> at multiples of 2048 samples. Again, this behavior is seen on multiple
> N300s. I've included plots of the RX signal, when only noise is present (no
> TX). (See *spp_impulse_two.png*, *spp_edge_impulse_zoom.png*).
>
> 5) MPM Speed and Performance
> - In general MPM and operations (frequency tuning, streaming, etc) and
> communication with the N300s in embedded mode is slow compared to E312's.
> With identical pulsed waveform sample lengths, algorithms and pulsed
> streaming operations that run smoothly on the E312 cause late stream
> commands and need to be throttled to run on the N300.
>
> 6) Complete phase incoherence for tuning frequencies <300MHz
> - Within a single tuning, the low frequency/low band conversion path of
> the N300 seems to be unstable. The phase varies rapidly with time making
> the <300MHz band completely unusable. We have not completely characterized
> the statistics of this phase incoherence, but for a time-coherent/timed
> TX/RX pulsed waveform loopback on a single N300 the phase seems to be
> random from pulse to pulse.
>
> If anyone is able to provide insight to these issues, it would be greatly
> appreciated. We are happy to provide additional details about the problems
> we are seeing.
>
> Thanks,
>
> Sam
>
> _______________________________________________
> 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