I would suggest starting with the rx_multi_samples example that comes with UHD.
Putting something together with GnuRadio and GRC would also be straightforward. Sent from my iPhone > On Aug 28, 2020, at 5:52 PM, Jay Labhart <[email protected]> wrote: > > > Marcus, > > Thanks for the reply. I took several measurements from 2-20 msps and the > graphic was a remnant from that. > > Do you have any experience working with 2 RX channels? > > I can collect data but it seems there maybe some configuration parameters I > either missed or set incorrectly? > > I wondered if you might be willing to help me to get this b210 configured > properly. > > Thanks > Jay > > On Tuesday, August 25, 2020, 3:56:22 PM CDT, Marcus D. Leech via USRP-users > <[email protected]> wrote: > > > On 08/25/2020 04:00 PM, Jay Labhart via USRP-users wrote: >> Hello, >> >> I have started to work with the B210 on a project. My interest is to >> collect samples from the 2 RX of the B210 looking at a frequency of channel >> 1 of 2.4GHz (2412). My goal is to use a grc to workout the algorithm then >> move to c++. I am having some challenges that I would like to ask the group >> for help. >> >> I used a .grc to collect samples and review the algorithm. The graph is >> attached. At this point I am just collecting data. I use a series of >> variables to create 2 data files. >> >> I moved to c++ and modified a sample to collect the same dataset. >> >> I am using the python file gr_plot_iq.py to review the signals. When I >> review the grc graph the signals appear as I would think. The c++ the >> signals are scattered way apart and A&B are consistent. >> >> Any thoughts would be greatful. >> >> Test: >> 2.4 GHz router chirping every 100 ms >> local area with no wireless except router >> uhd >> 2412000000 channel 1 >> rate - 20 MSPS (only get 15) >> looking at 2 RX channels at same freq >> >> hardware & os >> Intel® Core™ i5-6400 CPU @ 2.70GHz × 4 >> 12GB RAM >> Ubuntu 18.04.5 LTS >> >> attached is the probe from the uhd >> >> The challenge is that I am seeing different results from the grc and the c++ >> file. On the grc graph I collect a variety of samples from the router. On >> the c++ file there only seems to be 1-2 samples. I would expect to see a >> similar set of samples. >> >> >> >> >> c++ code excerpt >> >> // detect which channels to use >> std::vector<std::string> channel_strings; >> std::vector<size_t> channel_nums; >> boost::split(channel_strings, channel_list, boost::is_any_of("\"',")); >> for (size_t ch = 0; ch < channel_strings.size(); ch++) { >> size_t chan = std::stoi(channel_strings[ch]); >> if (chan >= usrp->get_rx_num_channels()) { >> throw std::runtime_error("Invalid channel(s) specified."); >> } else >> channel_nums.push_back(std::stoi(channel_strings[ch])); >> } >> >> // create a receive streamer >> // linearly map channels (index0 = channel0, index1 = channel1, ...) >> uhd::stream_args_t stream_args("fc32"); // complex floats >> stream_args.channels = channel_nums; >> uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(stream_args); >> >> if (total_num_samps == 0){ >> std::signal(SIGINT, &sig_int_handler); >> std::cout << "Press Ctrl + C to stop streaming..." << std::endl; >> } >> >> // setup streaming >> std::cout << std::endl; >> std::cout << boost::format("Begin streaming %u samples, %f seconds in >> the future...") >> % total_num_samps % seconds_in_future >> << std::endl; >> uhd::stream_cmd_t >> stream_cmd(uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE); >> stream_cmd.num_samps = total_num_samps; >> stream_cmd.stream_now = false; >> stream_cmd.time_spec = uhd::time_spec_t(seconds_in_future); >> rx_stream->issue_stream_cmd(stream_cmd); // tells all channels to stream >> >> // meta-data will be filled in by recv() >> uhd::rx_metadata_t md; >> >> // allocate buffers to receive with samples (one buffer per channel) >> const size_t samps_per_buff = rx_stream->get_max_num_samps(); >> std::vector<std::vector<std::complex<float>>> buffs( >> usrp->get_rx_num_channels(), >> std::vector<std::complex<float>>(samps_per_buff)); >> >> // create a vector of pointers to point to each of the channel buffers >> std::vector<std::complex<float>*> buff_ptrs; >> for (size_t i = 0; i < buffs.size(); i++) >> buff_ptrs.push_back(&buffs[i].front()); >> >> // the first call to recv() will block this many seconds before receiving >> double timeout = seconds_in_future + 0.1; // timeout (delay before >> receive + padding) >> >> size_t num_acc_samps = 0; // number of accumulated samples >> std::ofstream outfile1, outfile2; >> outfile1.open(file1.c_str(), std::ofstream::binary); >> outfile2.open(file2.c_str(), std::ofstream::binary); >> >> while (not stop_signal_called) { >> // receive a single packet >> size_t num_rx_samps = rx_stream->recv(buff_ptrs, samps_per_buff, md, >> timeout); >> >> // use a small timeout for subsequent packets >> timeout = 0.1; >> >> // handle the error code >> if (md.error_code == uhd::rx_metadata_t::ERROR_CODE_TIMEOUT) >> break; >> if (md.error_code != uhd::rx_metadata_t::ERROR_CODE_NONE) { >> //throw std::runtime_error(str(boost::format("Receiver error >> %s") % md.strerror())); >> std::cout << md.strerror() << std::endl; >> } >> >> if (verbose) >> std::cout << boost::format( >> "Received packet: %u samples, %u full secs, %f >> frac secs") >> % num_rx_samps % md.time_spec.get_full_secs() >> % md.time_spec.get_frac_secs() >> << std::endl; >> >> if (outfile1.is_open()) >> outfile1.write((const char*)(&buffs[0].front()), >> num_rx_samps*sizeof(std::complex<float>)); >> if (outfile2.is_open()) >> outfile2.write((const char*)(&buffs[1].front()), >> num_rx_samps*sizeof(std::complex<float>)); >> >> num_acc_samps += num_rx_samps; >> // check if continuous or number of samples >> if (total_num_samps != 0) { >> if (num_acc_samps >= total_num_samps) >> stop_signal_called = true; >> } >> } >> >> output from run with uhd >> >> Creating the usrp device with: ... >> [INFO] [UHD] linux; GNU C++ version 7.5.0; Boost_106501; >> UHD_3.14.1.HEAD-0-g0347a6d8 >> [INFO] [B200] Detected Device: B210 >> [INFO] [B200] Operating over USB 3. >> [INFO] [B200] Initialize CODEC control... >> [INFO] [B200] Initialize Radio control... >> [INFO] [B200] Performing register loopback test... >> [INFO] [B200] Register loopback test passed >> [INFO] [B200] Performing register loopback test... >> [INFO] [B200] Register loopback test passed >> [INFO] [B200] Setting master clock rate selection to 'automatic'. >> [INFO] [B200] Asking for clock rate 16.000000 MHz... >> [INFO] [B200] Actually got clock rate 16.000000 MHz. >> Using Device: Single USRP: >> Device: B-Series Device >> Mboard 0: B210 >> RX Channel: 0 >> RX DSP: 0 >> RX Dboard: A >> RX Subdev: FE-RX2 >> RX Channel: 1 >> RX DSP: 1 >> RX Dboard: A >> RX Subdev: FE-RX1 >> TX Channel: 0 >> TX DSP: 0 >> TX Dboard: A >> TX Subdev: FE-TX2 >> TX Channel: 1 >> TX DSP: 1 >> TX Dboard: A >> TX Subdev: FE-TX1 >> >> Using Antenna 0: RX2 >> Using Antenna 1: RX2 >> Actual RX Freq: 2412.000000 MHz... >> Actual RX Freq: 2411.999998 MHz... >> >> RX Gain Range 0: (0, 76, 1) >> ... >> Setting RX Gain: 64.000000 dB... >> Actual RX Gain: 64.000000 dB... >> >> Setting RX Bandwidth: 15.000000 MHz... >> Actual RX Bandwidth: 15.000000 MHz... >> >> Setting RX Rate: 15.000000 Msps... >> [INFO] [B200] Asking for clock rate 60.000000 MHz... >> [INFO] [B200] Actually got clock rate 60.000000 MHz. >> Actual RX Rate: 15.000000 Msps... >> >> Setting device timestamp to 0... >> >> Begin streaming 10000 samples, 10.000000 seconds in the future... >> Received packet: 2040 samples, 10 full secs, 0.000003 frac secs >> Received packet: 2040 samples, 10 full secs, 0.000139 frac secs >> Received packet: 2040 samples, 10 full secs, 0.000275 frac secs >> Received packet: 2040 samples, 10 full secs, 0.000411 frac secs >> Received packet: 1840 samples, 10 full secs, 0.000547 frac secs >> >> Done! >> >> >> >> >> >> _______________________________________________ >> USRP-users mailing list >> [email protected] >> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com > For one, you're using a 2Msps rate in your .grc flow-graph. > > > _______________________________________________ > USRP-users mailing list > [email protected] > http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
_______________________________________________ USRP-users mailing list [email protected] http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
