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