Good day Marcus I am using the most recent version of UHD. The problem I was encountering was due to the USB buffer not clearing before the next data being loaded. This was solved by adding a pause after running the GNURadio program.
This however meant I could not run my program in "real time" so I have been looking at implementing it in the GNURadio way, I have some questions that I ask you or anyone in the mailing list could help with. First what I am trying to implement is a Compressive Sensing(CS) algorithim. The block I am trying to create will take in a vector of length N, multiply it my a MxN matrix and output a vector of length M where M << N. Now for the questions. 1) Am i right in saying that with the different block types, the N and M refers to ports and not data type sizes. So in my case, one input vector and one output vector, a synchronous block will be fine? 2) The MxN matrix I'm using will be loaded from a file. I however only want to load it once instead of every time the CS block receives data. This leads me to think that I shouldn't load the matrix in the block code? However where could I load it that it will be globally accessible by the block code? Again thank you in advance for your help On Mon, Sep 14, 2015 at 4:00 PM, Marcus D. Leech <mle...@ripnet.com> wrote: > Again, could you confirm which UHD version you're using, did you upgrade > to the latest? > > Also, you're probably better-off doing things "in the Gnu Radio way", > rather than loading into a vector and doing DSPish things > "out of band". > > You might want to learn how to write Python blocks, since 64ksps is not a > very taxing rate, Python blocks should be fine. > > > https://gnuradio.org/redmine/projects/gnuradio/wiki/OutOfTreeModules#Tutorial-3-Writing-a-signal-processing-block-in-Python > > > > On 09/14/2015 09:28 AM, Chad R wrote: > > My complete code is: > > class Tx1_Rx2(gr.top_block): > def __init__(self, nsamps): > gr.top_block.__init__(self, "Tx1_Rx2") > ################################################## > # Variables > ################################################## > self.samp_rate = samp_rate = 64e3 > > ################################################## > # Blocks > ################################################## > self.source = uhd.usrp_source( > ",".join(("", "")), > uhd.stream_args( > cpu_format="fc32", > channels=range(2), > ), > ) > self.source.set_subdev_spec("A:A A:B", 0) > self.source.set_time_now(uhd.time_spec(time.time()), > uhd.ALL_MBOARDS) > self.source.set_samp_rate(samp_rate) > self.source.set_center_freq(100e6, 0) > self.source.set_gain(0, 0) > self.source.set_antenna("RX2", 0) > self.source.set_bandwidth(samp_rate, 0) > self.source.set_center_freq(100e6, 1) > self.source.set_gain(0, 1) > self.source.set_antenna("RX2", 1) > self.source.set_bandwidth(samp_rate, 1) > self.sink = uhd.usrp_sink( > ",".join(("", "")), > uhd.stream_args( > cpu_format="fc32", > channels=range(2), > ), > ) > self.sink.set_subdev_spec("A:A A:B", 0) > self.sink.set_samp_rate(samp_rate) > self.sink.set_center_freq(100e6, 0) > self.sink.set_gain(0, 0) > self.sink.set_antenna("TX/RX", 0) > self.sink.set_bandwidth(samp_rate, 0) > self.sink.set_center_freq(100e6, 1) > self.sink.set_gain(0, 1) > self.sink.set_antenna("TX/RX", 1) > self.sink.set_bandwidth(samp_rate, 1) > self.vector = blocks.vector_sink_c(1) > self.vector2 = blocks.vector_sink_c(1) > self.header = blocks.head(gr.sizeof_gr_complex*1, int(nsamps)) > self.header2 = blocks.head(gr.sizeof_gr_complex*1, int(nsamps)) > self.signal = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, > 10000, 1, 0) > self.const_signal = analog.sig_source_c(0, analog.GR_CONST_WAVE, > 0, 0, 0) > > ################################################## > # Connections > ################################################## > self.connect((self.const_signal, 0), (self.sink, 1)) > self.connect((self.signal, 0), (self.sink, 0)) > self.connect((self.header2, 0), (self.vector2, 0)) > self.connect((self.header, 0), (self.vector, 0)) > self.connect((self.source, 0), (self.header2, 0)) > self.connect((self.source, 1), (self.header, 0)) > > def get_samp_rate(self): > return self.samp_rate > > def set_samp_rate(self, samp_rate): > self.samp_rate = samp_rate > self.signal.set_sampling_freq(self.samp_rate) > self.sink.set_samp_rate(self.samp_rate) > self.sink.set_bandwidth(self.samp_rate, 0) > self.sink.set_bandwidth(self.samp_rate, 1) > self.source.set_samp_rate(self.samp_rate) > self.source.set_bandwidth(self.samp_rate, 0) > self.source.set_bandwidth(self.samp_rate, 1) > > def receive_data(self): > data = np.array(self.vector.data()) > return data > > def receive_data2(self): > data = np.array(self.vector2.data()) > return data > > > if __name__ == '__main__': > N = 1024 > M = 100*np.round(np.log10(N)) > tb = Tx1_Rx2(N) > psi = np.load("psi_mtx.npy") > phi = np.load("phi_mtx.npy") > alpha = np.dot(phi,psi) > > while 1: > tb.start() > time.sleep(0.1) > tb.stop() > time.sleep(0.1) > tb.wait() > time.sleep(0.5) > signal = tb.receive_data() > time.sleep(0.5) > signal2 = tb.receive_data2() > time.sleep(0.5) > print "Signal" > print signal > print "Signal2" > print signal2 > > I used the sample rate of 64Ksps for both cases. I'm new to both gnuradio > and python so I am aware that my code isn't well written. > > On Mon, Sep 14, 2015 at 3:21 PM, Marcus D. Leech <mle...@ripnet.com> > wrote: > >> On 09/14/2015 07:03 AM, Chad R wrote: >> >> Awesome. Thank you I got it to work in gnuradio-companion however now >> when I try to implement it in my python project I get the error. >> >> thread[thread-per-block[3]: <block gr uhd usrp source (1)>]: >> EnvironmentError: IOError: Radio ctrl (0) packet parse error - >> AssertionError: packet_info.packet_count == (seq_to_ack & 0xfff) >> in uint64_t radio_ctrl_core_3000_impl::wait_for_ack(bool) >> at /home/ubuntu/git/uhd/host/lib/usrp/cores/radio_ctrl_core_3000.cpp:264 >> >> where thread per block changes between 2 and 3 and the gr block changes >> between source and sink. Is this an error caused due to the limitations of >> my hardware? >> >> Are you using different sample rates in the two scenarios? >> >> That assertion indicates that there are seriously-bad things happening to >> USB packets across the USB bus. >> >> >> >> >> On Sun, Sep 13, 2015 at 6:03 PM, Marcus D. Leech <mle...@ripnet.com> >> wrote: >> >>> On 09/13/2015 07:02 AM, Chad R wrote: >>> >>> Hi Marcus I tried what you said and I'm still getting the overflow >>> errors. >>> I've attached a link of my flowgraph if it will maybe help to solve this >>> issue. >>> http://imgur.com/yI96ZMw >>> >>> Ah. >>> >>> Bundle them into a single multi-channel USRP source/sink. >>> >>> There's no support for the two channels being spread across different >>> UHD multi_usrp objects. >>> >>> >>> >>> >>> On Sun, Sep 13, 2015 at 1:01 PM, Chad R <chadric...@gmail.com> wrote: >>> >>>> Hi Marcus I tried what you said and I'm still getting the overflow >>>> errors. >>>> I've attatched a link of my flowgraph if it will maybe help to solve >>>> this issue. >>>> http://imgur.com/yI96ZMw >>>> >>>> On Sat, Sep 12, 2015 at 3:26 PM, Marcus D. Leech <mle...@ripnet.com> >>>> wrote: >>>> >>>>> On 09/12/2015 08:30 AM, Chad R wrote: >>>>> >>>>> Thanks for the advice Marcus >>>>> >>>>> However I updated UHD to version 3.9 the latest stable release from >>>>> the ettus binary files and I'm still getting the error but now instead of >>>>> just DDDDD its randomly S's and D's. The S's is a sequence error? >>>>> >>>>> Yes, S and D are closely related. >>>>> >>>>> I think that you're running into the "symmetry required" issue. So, >>>>> you'll need a 2nd TX channel in your flow, with just 0s in it. >>>>> >>>>> >>>>> >>>>> >>>>> On Fri, Sep 11, 2015 at 4:21 PM, Marcus D. Leech <mle...@ripnet.com> >>>>> wrote: >>>>> >>>>>> On 09/11/2015 07:56 AM, Chad R wrote: >>>>>> >>>>>>> Good day. >>>>>>> >>>>>>> I'm wondering if you can help me. I have a B210 board connected to a >>>>>>> jetson tk1 and I am trying to send over one port and receive over two. >>>>>>> The >>>>>>> hardware setup is the RX/TX board connected to an RF filter connected >>>>>>> to a >>>>>>> splitter and the connected to the two RX2 ports. When I run one TX and >>>>>>> one >>>>>>> RX I have no issues however when I run 2 RX my python application >>>>>>> crashes. >>>>>>> I try run a simple 2 Rx configuration in GNU Radio with the 2 USRP >>>>>>> sources >>>>>>> connected to 2 Frequency GUI. >>>>>>> However even running at a sampling rate of 64Kbps I am getting an >>>>>>> overflow error. I thought that maybe the jetson tk1 couldn't handle the >>>>>>> bandwidth but running it on my PC I get the same results. The output is >>>>>>> as >>>>>>> follows: >>>>>>> >>>>>>> Executing: "/home/chad/Tx1_Rx2.py" >>>>>>> >>>>>>> linux; GNU C++ version 4.8.2; Boost_105400; >>>>>>> UHD_003.008.001-42-g8c87a524 >>>>>>> >>>>>>> -- Operating over USB 3. >>>>>>> -- Initialize CODEC control... >>>>>>> -- Initialize Radio control... >>>>>>> -- Performing register loopback test... pass >>>>>>> -- Performing register loopback test... pass >>>>>>> -- Performing CODEC loopback test... pass >>>>>>> -- Performing CODEC loopback test... pass >>>>>>> -- Asking for clock rate 32.000000 MHz... >>>>>>> -- Actually got clock rate 32.000000 MHz. >>>>>>> -- Performing timer loopback test... pass >>>>>>> -- Performing timer loopback test... pass >>>>>>> -- Setting master clock rate selection to 'automatic'. >>>>>>> -- Asking for clock rate 32.768000 MHz... >>>>>>> -- Actually got clock rate 32.768000 MHz. >>>>>>> -- Performing timer loopback test... pass >>>>>>> -- Performing timer loopback test... pass >>>>>>> -- Successfully tuned to 100.000000 MHz >>>>>>> -- >>>>>>> -- Asking for clock rate 32.768000 MHz... OK >>>>>>> -- Successfully tuned to 100.000000 MHz >>>>>>> -- >>>>>>> -- Asking for clock rate 32.768000 MHz... OK >>>>>>> -- Successfully tuned to 100.000000 MHz >>>>>>> -- >>>>>>> Using Volk machine: avx_64_mmx >>>>>>> -- Asking for clock rate 32.768000 MHz... OK >>>>>>> -- Asking for clock rate 32.768000 MHz... OK >>>>>>> -- Asking for clock rate 32.768000 MHz... OK >>>>>>> -- Asking for clock rate 32.768000 MHz... OK >>>>>>> -- Asking for clock rate 32.768000 MHz... OK >>>>>>> -- Asking for clock rate 32.768000 MHz... OK >>>>>>> DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDS >>>>>>> >>>>>>> Surely I shouldn't get overflow errors at such a low sampling rate? >>>>>>> When I run the benchmark_rate it returns no errors. Any help would be >>>>>>> appreciated. >>>>>>> >>>>>>> Chad >>>>>>> >>>>>>> >>>>>>> >>>>>> Update to a newer UHD (and matching firmware), and try your test >>>>>> again. My recollection is that there was a restriction for TX/RX >>>>>> applications >>>>>> on B210 that they had to be symmetric with respect to number of >>>>>> TX/RX streams. >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Discuss-gnuradio mailing list >>>>>> Discuss-gnuradio@gnu.org >>>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >>>>>> >>>>> >>>>> >>>>> >>>> >>> >>> >> >> > >
_______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio