I have N310's but we don't use GPS.

Will start testing issue 4 next week and see if I can reproduce.

On Fri, Jan 25, 2019 at 2:31 PM Nate Temple via USRP-users <
usrp-users@lists.ettus.com> wrote:

> 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
>
_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Reply via email to