⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usrp_wfm_rcv_sca.py

📁 这是用python语言写的一个数字广播的信号处理工具包。利用它
💻 PY
📖 第 1 页 / 共 2 页
字号:
        if options.volume is None:            g = self.volume_range()            options.volume = float(g[0]+g[1])/2        if abs(options.freq) < 1e6:            options.freq *= 1e6        # set initial values        self.set_gain(options.gain)        self.set_vol(options.volume)        if not(self.set_freq(options.freq)):            self._set_status_msg("Failed to set initial frequency")        self.set_sca_freq(67000)  # A common SCA Frequency    def _set_status_msg(self, msg, which=0):        self.frame.GetStatusBar().SetStatusText(msg, which)    def _build_gui(self, vbox, usrp_rate, demod_rate, sca_demod_rate, audio_rate):        def _form_set_freq(kv):            return self.set_freq(kv['freq'])        def _form_set_sca_freq(kv):            return self.set_sca_freq(kv['sca_freq'])        if 1:            self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",                                               fft_size=512, sample_rate=usrp_rate,					       ref_scale=32768.0, ref_level=0, y_divs=12)            self.connect (self.u, self.src_fft)            vbox.Add (self.src_fft.win, 4, wx.EXPAND)        if 1:            post_demod_fft = fftsink2.fft_sink_f(self.panel, title="Post FM Demod",                                                 fft_size=2048, sample_rate=demod_rate,                                                 y_per_div=10, ref_level=0)            self.connect (self.fm_demod, post_demod_fft)            vbox.Add (post_demod_fft.win, 4, wx.EXPAND)        if 0:            post_demod_sca_fft = fftsink2.fft_sink_f(self.panel, title="Post SCA Demod",                                                fft_size=1024, sample_rate=sca_demod_rate,                                                y_per_div=10, ref_level=0)            self.connect (self.fm_demod_sca, post_demod_sca_fft)            vbox.Add (post_demod_sca_fft.win, 4, wx.EXPAND)        if 0:            post_deemph_fft = fftsink2.fft_sink_f (self.panel, title="Post SCA Deemph",                                                  fft_size=512, sample_rate=audio_rate,                                                  y_per_div=10, ref_level=-20)            self.connect (self.deemph, post_deemph_fft)            vbox.Add (post_deemph_fft.win, 4, wx.EXPAND)        # control area form at bottom        self.myform = myform = form.form()        hbox = wx.BoxSizer(wx.HORIZONTAL)        hbox.Add((5,0), 0)        myform['freq'] = form.float_field(            parent=self.panel, sizer=hbox, label="Freq", weight=1,            callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg))        hbox.Add((5,0), 0)        myform['freq_slider'] = \            form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3,                                        range=(87.9e6, 108.1e6, 0.1e6),                                        callback=self.set_freq)        hbox.Add((5,0), 0)        vbox.Add(hbox, 0, wx.EXPAND)        hbox = wx.BoxSizer(wx.HORIZONTAL)        hbox.Add((5,0), 0)        myform['sca_freq'] = form.float_field(            parent=self.panel, sizer=hbox, label="SCA", weight=1,            callback=myform.check_input_and_call(_form_set_sca_freq, self._set_status_msg))        hbox.Add((5,0), 0)        myform['sca_freq_slider'] = \            form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3,                                        range=(38e3, 100e3, 1.0e3),                                        callback=self.set_sca_freq)        hbox.Add((5,0), 0)        vbox.Add(hbox, 0, wx.EXPAND)        hbox = wx.BoxSizer(wx.HORIZONTAL)        hbox.Add((5,0), 0)        myform['volume'] = \            form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Volume",                                        weight=3, range=self.volume_range(),                                        callback=self.set_vol)        hbox.Add((5,0), 1)        myform['gain'] = \            form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Gain",                                        weight=3, range=self.subdev.gain_range(),                                        callback=self.set_gain)        hbox.Add((5,0), 0)        vbox.Add(hbox, 0, wx.EXPAND)        try:            self.knob = powermate.powermate(self.frame)            self.rot = 0            powermate.EVT_POWERMATE_ROTATE (self.frame, self.on_rotate)            powermate.EVT_POWERMATE_BUTTON (self.frame, self.on_button)        except:            print "FYI: No Powermate or Contour Knob found"    def on_rotate (self, event):        self.rot += event.delta        if (self.state == "FREQ"):            if self.rot >= 3:                self.set_freq(self.freq + .1e6)                self.rot -= 3            elif self.rot <=-3:                self.set_freq(self.freq - .1e6)                self.rot += 3        else:            step = self.volume_range()[2]            if self.rot >= 3:                self.set_vol(self.vol + step)                self.rot -= 3            elif self.rot <=-3:                self.set_vol(self.vol - step)                self.rot += 3    def on_button (self, event):        if event.value == 0:        # button up            return        self.rot = 0        if self.state == "FREQ":            self.state = "VOL"        else:            self.state = "FREQ"        self.update_status_bar ()    def set_vol (self, vol):        g = self.volume_range()        self.vol = max(g[0], min(g[1], vol))        self.volume_control.set_k(10**(self.vol/10))        self.myform['volume'].set_value(self.vol)        self.update_status_bar ()    def set_freq(self, target_freq):        """        Set the center frequency we're interested in.        @param target_freq: frequency in Hz        @rypte: bool        Tuning is a two step process.  First we ask the front-end to        tune as close to the desired frequency as it can.  Then we use        the result of that operation and our target_frequency to        determine the value for the digital down converter.        """        r = usrp.tune(self.u, 0, self.subdev, target_freq)        if r:            self.freq = target_freq            self.myform['freq'].set_value(target_freq)         # update displayed value            self.myform['freq_slider'].set_value(target_freq)  # update displayed value            self.update_status_bar()            self._set_status_msg("OK", 0)            return True        self._set_status_msg("Failed", 0)        return False    def set_sca_freq(self, target_sca_freq):        self.ddc.set_center_freq(-target_sca_freq)        self.myform['sca_freq'].set_value(target_sca_freq)         # update displayed value        self.myform['sca_freq_slider'].set_value(target_sca_freq)  # update displayed value        self.update_status_bar()        self._set_status_msg("OK", 0)        return True    def set_gain(self, gain):        self.myform['gain'].set_value(gain)     # update displayed value        self.subdev.set_gain(gain)    def update_status_bar (self):        msg = "Volume:%r  Setting:%s" % (self.vol, self.state)        self._set_status_msg(msg, 1)        self.src_fft.set_baseband_freq(self.freq)    def volume_range(self):        return (-20.0, 0.0, 0.5)if __name__ == '__main__':    app = stdgui2.stdapp (wfm_rx_sca_block, "USRP WFM SCA RX")    app.MainLoop ()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -