Sorry I did not specify. When working with the start_cont mode with a
frequency of more than 5 MHz, I have an overflow error. That leads to a
chaotic change in the spectrum. I agree about the wrong allocation of
memory, but I created my own data array and ran it through the whole chain
of changes and additions and had what I expected at the output. Moreover,
the data array was much more than what I get from the board. In this
regard, I decided that the matter is in the reading from the board. I have
seen examples, but start_cont mode is used there and there are not so many
frequency adjustments. Therefore, I decided to use the num_sams_and_done
mode, but there is also a problem with it which is described in the
previous message. If you have more suggestions, I will be very grateful to
you.

сб, 11 мая 2019 г. в 22:27, Marcus Müller <marcus.muel...@ettus.com>:

> Dear Ivan,
>
> it's not clear what you've modified. I'm not aware of any UHD function
> that restricts any frequency to 5 MHz.
> Could you elaborate on which code you're basing this on?
>
> Also, while I really like the Python interface, if you're really after
> high-rate sampling, it might simply not be the optimal thing to use:
> You'd have to be very careful in Pythonland to not run into performance
> problems once you've gotten the samples from UHD:
>
>         complex_buffs=np.append(complex_buffs,result).ravel()
>
> A very bad idea. You're constantly re-allocating buffers here. Don't do
> that. No matter in which programming language you'd do this, you'd make
> sure that the buffer is large enough for your data collection to begin
> with and then tell the UHD library to fill the appropriate part in that
> buffer to avoid a) having to ask for a larger buffer regularly and b)
> avoid copying data.
> Asking for an appended version of your last buffer means that something
> has to allocate a larger buffer – which comes at very large cost!
>
> Best regards,
> Marcus
>
> On Sat, 2019-05-11 at 21:31 +0300, Ivan Zahartchuk via USRP-users
> wrote:
> > Hello. My task is to make a broadband spectrum analyzer on the usrp
> > b200 board. For this, the standard functions for reading samples in
> > python are not suitable for me. Therefore, I edited them. When
> > reading samples using the start_con method, I cannot specify a band
> > greater than 5 MHz. Therefore, I use the num_sams_and_done method.
> > But I have problems with him. The fact is that my frequency which I
> > know appears in the wrong place. For example, I generate a frequency
> > of 910 MHz and it appears at 930 MHz (with a bandwidth of 20 MHz). I
> > can not understand what caused it. Here are my reading functions in
> > two ways. I would be extremely grateful for the help.
> >
> >
> >
> >
> > def test_reciev(self,freq,bandwich):
> >     complex_buffs=np.array([])
> >     buffs = np.array([])
> >     result = np.empty((len([0]), self.samples), dtype=np.complex64)
> >
> >     for i, freqq in enumerate(freq):
> >
> >         recv_samps = 0
> >         #self.usrp.set_rx_rate(bandwich[i])
> >         k=uhd.types.TuneRequest(freqq)
> >         #k.args(uhd.types.device_addr("mode_n=integer"))
> >         self.usrp.set_rx_freq(k)
> >         self.stream_cmd =
> > uhd.types.StreamCMD(uhd.types.StreamMode.start_cont)
> >         self.stream_cmd.stream_now = True
> >         self.streamer_rx.issue_stream_cmd(self.stream_cmd)
> >         while self.usrp.get_rx_sensor("lo_locked").to_bool() != True:
> >             continue
> >
> >         samps = np.array([], dtype=np.complex64)
> >         while recv_samps < self.samples:
> >
> >             samps = self.streamer_rx.recv(self.recv_buff,
> > self.metadata_rx)
> >             if self.metadata_rx.error_code !=
> > lib.types.rx_metadata_error_code.none:
> >                 print(self.metadata_rx.strerror())
> >             if samps:
> >                 real_samps = min(self.samples - recv_samps, samps)
> >                 result[:, recv_samps:recv_samps + real_samps] =
> > self.recv_buff[:, 0:real_samps]
> >                 recv_samps += real_samps
> >         #print (self.usrp.get_rx_sensor('rssi'))
> >         #print(self.streamer_rx.get_max_num_samps())
> >         #while samps:
> >         #    samps = self.streamer_rx.recv(self.recv_buff,
> > self.metadata_rx)
> >
> >
> >         #self.stream_cmd.time_spec = lib.types.time_spec(0)
> >         self.stream_cmd =
> > lib.types.stream_cmd(lib.types.stream_mode.stop_cont)
> >         self.streamer_rx.issue_stream_cmd(self.stream_cmd)
> >
> >         complex_buffs=np.append(complex_buffs,result).ravel()
> >         #correct_result=result
> >         correct_result_1=result-
> > (np.mean(result.real)+np.mean(result.imag)*1j)
> >         #correct_result.real=result.real-np.mean(result.real)
> >         #correct_result.imag = result.imag - np.mean(result.imag)
> >
> >         PSD =  self.fft_test(result)
> >
> >
> >         #PSD[8188:8202]=np.mean(PSD[8180:8188])
> >
> >
> >         buffs = np.append(buffs,PSD)
> >
> >
> >
> >     return complex_buffs,
> > buffs#np.append(buffs[value.samples:],buffs[:value.samples])
> >
> >
> >
> > def test_reciev(self,freq,bandwich):
> >     complex_buffs=np.array([])
> >     buffs = np.array([])
> >     result = np.empty((len([0]), self.samples), dtype=np.complex64)
> >
> >     for i, freqq in enumerate(freq):
> >
> >         recv_samps = 0
> >         #self.usrp.set_rx_rate(bandwich[i])
> >         k=uhd.types.TuneRequest(freqq)
> >         #k.args(uhd.types.device_addr("mode_n=integer"))
> >         self.usrp.set_rx_freq(k)
> >
> >         while self.usrp.get_rx_sensor("lo_locked").to_bool() != True:
> >             continue
> >
> >
> >         while recv_samps < self.samples:
> >
> >             samps = self.streamer_rx.recv(self.recv_buff,
> > self.metadata_rx)
> >             if self.metadata_rx.error_code !=
> > lib.types.rx_metadata_error_code.none:
> >                 print(self.metadata_rx.strerror())
> >             if samps:
> >                 real_samps = min(self.samples - recv_samps, samps)
> >                 result[:, recv_samps:recv_samps + real_samps] =
> > self.recv_buff[:, 0:real_samps]
> >                 recv_samps += real_samps
> >         #print (self.usrp.get_rx_sensor('rssi'))
> >
> >
> >         self.stream_cmd.time_spec = lib.types.time_spec(0)
> >         self.streamer_rx.issue_stream_cmd(self.stream_cmd)
> >
> >         complex_buffs=np.append(complex_buffs,result).ravel()
> >         correct_result=result
> >         correct_result_1=result-
> > (np.mean(result.real)+np.mean(result.imag)*1j)
> >         correct_result.real=result.real-np.mean(result.real)
> >         correct_result.imag = result.imag - np.mean(result.imag)
> >
> >         PSD =  self.fft_test(result)
> >
> >
> >         #PSD[8188:8202]=np.mean(PSD[8180:8188])
> >
> >
> >         buffs = np.append(buffs,PSD)
> >
> >
> >
> >     return complex_buffs,
> > buffs#np.append(buffs[value.samples:],buffs[:value.samples])
> >
> >
> >
> >
> >
> >
> >
> >
> > _______________________________________________
> > 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