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

📄 hfx2.py

📁 这是用python语言写的一个数字广播的信号处理工具包。利用它
💻 PY
📖 第 1 页 / 共 3 页
字号:
           fir_decim, xlate_taps, self.tune_offset, usb_rate )        # convert rf data in interleaved short int form to complex        s2ss = gr.stream_to_streams(gr.sizeof_short,2)        s2f1 = gr.short_to_float()        s2f2 = gr.short_to_float()        src_f2c = gr.float_to_complex()        self.tb.connect(self.src,s2ss)        self.tb.connect((s2ss,0),s2f1)        self.tb.connect((s2ss,1),s2f2)        self.tb.connect(s2f1,(src_f2c,0))        self.tb.connect(s2f2,(src_f2c,1))	# Complex Audio filter        audio_coeffs = gr.firdes.complex_band_pass (                1.0,    # gain                self.af_sample_rate, # sample rate                -3000,    # low cutoff                0,   # high cutoff                100,    # transition                gr.firdes.WIN_HAMMING)  # window	self.slider_1.SetValue(0)	self.slider_2.SetValue(-3000)        self.audio_filter = gr.fir_filter_ccc ( 1, audio_coeffs)	# Main +/- 16Khz spectrum display        self.fft = fftsink2.fft_sink_c (self.panel_2, fft_size=512, sample_rate=self.af_sample_rate, average=True, size=(640,240))	# AM Sync carrier 	if AM_SYNC_DISPLAY:	   self.fft2 = fftsink.fft_sink_c (self.tb, self.panel_9, y_per_div=20, fft_size=512, sample_rate=self.af_sample_rate, average=True, size=(640,240))        c2f = gr.complex_to_float()	# AM branch	self.sel_am = gr.multiply_const_cc(0)	# the following frequencies turn out to be in radians/sample	# gr.pll_refout_cc(alpha,beta,min_freq,max_freq)	# suggested alpha = X, beta = .25 * X * X	pll = gr.pll_refout_cc(.5,.0625,(2.*math.pi*7.5e3/self.af_sample_rate),(2.*math.pi*6.5e3/self.af_sample_rate))	self.pll_carrier_scale = gr.multiply_const_cc(complex(10,0))	am_det = gr.multiply_cc()	# these are for converting +7.5kHz to -7.5kHz	# for some reason gr.conjugate_cc() adds noise ??	c2f2 = gr.complex_to_float()	c2f3 = gr.complex_to_float()	f2c = gr.float_to_complex()	phaser1 = gr.multiply_const_ff(1)	phaser2 = gr.multiply_const_ff(-1)	# filter for pll generated carrier        pll_carrier_coeffs = gr.firdes.complex_band_pass (                2.0,    # gain                self.af_sample_rate, # sample rate                7400,    # low cutoff                7600,   # high cutoff                100,    # transition                gr.firdes.WIN_HAMMING)  # window        self.pll_carrier_filter = gr.fir_filter_ccc ( 1, pll_carrier_coeffs)	self.sel_sb = gr.multiply_const_ff(1)	combine = gr.add_ff()	#AGC	sqr1 = gr.multiply_ff()	intr = gr.iir_filter_ffd ( [.004, 0], [0, .999] )	offset = gr.add_const_ff(1)	agc = gr.divide_ff()        self.scale = gr.multiply_const_ff(0.00001)        dst = audio.sink(long(self.af_sample_rate))        self.tb.connect(src_f2c,self.xlate,self.fft)        self.tb.connect(self.xlate,self.audio_filter,self.sel_am,(am_det,0))	self.tb.connect(self.sel_am,pll,self.pll_carrier_scale,self.pll_carrier_filter,c2f3)	self.tb.connect((c2f3,0),phaser1,(f2c,0))	self.tb.connect((c2f3,1),phaser2,(f2c,1))	self.tb.connect(f2c,(am_det,1))	self.tb.connect(am_det,c2f2,(combine,0))	self.tb.connect(self.audio_filter,c2f,self.sel_sb,(combine,1))	if AM_SYNC_DISPLAY:	  self.tb.connect(self.pll_carrier_filter,self.fft2)	self.tb.connect(combine,self.scale)	self.tb.connect(self.scale,(sqr1,0))	self.tb.connect(self.scale,(sqr1,1))	self.tb.connect(sqr1, intr, offset, (agc, 1))	self.tb.connect(self.scale,(agc, 0))	self.tb.connect(agc,dst)	if SAVE_AUDIO_TO_FILE:	  f_out = gr.file_sink(gr.sizeof_short,options.audio_file)	  sc1 = gr.multiply_const_ff(64000)	  f2s1 = gr.float_to_short()	  self.tb.connect(agc,sc1,f2s1,f_out)        self.tb.start()        # for mouse position reporting on fft display        em.eventManager.Register(self.Mouse, wx.EVT_MOTION, self.fft.win)        # and left click to re-tune        em.eventManager.Register(self.Click, wx.EVT_LEFT_DOWN, self.fft.win)        # start a timer to check for web commands        if WEB_CONTROL:	   self.timer = UpdateTimer(self, 1000) # every 1000 mSec, 1 Sec	wx.EVT_BUTTON(self,ID_BUTTON_1,self.set_lsb)	wx.EVT_BUTTON(self,ID_BUTTON_2,self.set_usb)	wx.EVT_BUTTON(self,ID_BUTTON_3,self.set_am)	wx.EVT_BUTTON(self,ID_BUTTON_4,self.set_cw)	wx.EVT_BUTTON(self,ID_BUTTON_10,self.fwd)	wx.EVT_BUTTON(self,ID_BUTTON_11,self.rew)        wx.EVT_BUTTON(self, ID_BUTTON_13, self.AT_calibrate)        wx.EVT_BUTTON(self, ID_BUTTON_14, self.AT_reset)	wx.EVT_TOGGLEBUTTON(self,ID_BUTTON_5,self.on_button)	wx.EVT_TOGGLEBUTTON(self,ID_BUTTON_6,self.on_button)	wx.EVT_TOGGLEBUTTON(self,ID_BUTTON_7,self.on_button)	wx.EVT_TOGGLEBUTTON(self,ID_BUTTON_8,self.on_button)	wx.EVT_TOGGLEBUTTON(self,ID_BUTTON_9,self.on_button)        wx.EVT_SLIDER(self,ID_SLIDER_1,self.set_filter)        wx.EVT_SLIDER(self,ID_SLIDER_2,self.set_filter)        wx.EVT_SLIDER(self,ID_SLIDER_3,self.slide_tune)        wx.EVT_SLIDER(self,ID_SLIDER_4,self.set_volume)	wx.EVT_SLIDER(self,ID_SLIDER_5,self.set_pga)	wx.EVT_SLIDER(self,ID_SLIDER_6,self.am_carrier)        wx.EVT_SLIDER(self,ID_SLIDER_7,self.antenna_tune)        wx.EVT_SPINCTRL(self,ID_SPIN_1,self.spin_tune)        wx.EVT_MENU(self, ID_EXIT,  self.TimeToQuit)    def __set_properties(self):        # begin wxGlade: MyFrame.__set_properties        self.SetTitle("HF Explorer 2")        self.slider_1.SetMinSize((450, 38))        self.slider_2.SetMinSize((450, 38))        self.panel_2.SetMinSize((640, 240))        self.button_7.SetValue(1)        self.slider_3.SetMinSize((450, 19))        self.slider_4.SetMinSize((275, 19))        self.slider_5.SetMinSize((275, 19))	if AM_SYNC_DISPLAY:           self.panel_9.SetMinSize((640, 240))        self.slider_6.SetMinSize((300, 38))        self.slider_7.SetMinSize((400, 38))        # end wxGlade    def __do_layout(self):        # begin wxGlade: MyFrame.__do_layout        sizer_1 = wx.BoxSizer(wx.VERTICAL)        grid_sizer_1 = wx.FlexGridSizer(11, 2, 0, 0)        sizer_7 = wx.BoxSizer(wx.HORIZONTAL)        sizer_5 = wx.BoxSizer(wx.HORIZONTAL)        sizer_4 = wx.BoxSizer(wx.HORIZONTAL)        sizer_3 = wx.BoxSizer(wx.HORIZONTAL)        sizer_6 = wx.BoxSizer(wx.VERTICAL)        sizer_2 = wx.BoxSizer(wx.HORIZONTAL)        grid_sizer_1.Add(self.panel_1, 1, wx.EXPAND, 0)        sizer_2.Add(self.button_1, 0, wx.ADJUST_MINSIZE, 0)        sizer_2.Add(self.button_2, 0, wx.ADJUST_MINSIZE, 0)        sizer_2.Add(self.button_3, 0, wx.ADJUST_MINSIZE, 0)        sizer_2.Add(self.button_4, 0, wx.ADJUST_MINSIZE, 0)        grid_sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)        grid_sizer_1.Add(self.button_5, 0, wx.ADJUST_MINSIZE, 0)        grid_sizer_1.Add(self.slider_1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ADJUST_MINSIZE, 0)        grid_sizer_1.Add(self.button_6, 0, wx.ADJUST_MINSIZE, 0)        grid_sizer_1.Add(self.slider_2, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ADJUST_MINSIZE, 0)        sizer_6.Add(self.panel_5, 1, wx.EXPAND, 0)        sizer_6.Add(self.label_1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ADJUST_MINSIZE, 0)        sizer_6.Add(self.text_ctrl_1, 0, wx.ADJUST_MINSIZE, 0)        sizer_6.Add(self.panel_6, 1, wx.EXPAND, 0)        sizer_6.Add(self.panel_7, 1, wx.EXPAND, 0)        grid_sizer_1.Add(sizer_6, 1, wx.EXPAND, 0)        grid_sizer_1.Add(self.panel_2, 1, wx.EXPAND, 0)        grid_sizer_1.Add(self.button_7, 0, wx.ADJUST_MINSIZE, 0)        sizer_3.Add(self.slider_3, 0, wx.ADJUST_MINSIZE, 0)        sizer_3.Add(self.spin_ctrl_1, 0, wx.ADJUST_MINSIZE, 0)        grid_sizer_1.Add(sizer_3, 1, wx.EXPAND, 0)        grid_sizer_1.Add(self.button_8, 0, wx.ADJUST_MINSIZE, 0)        sizer_4.Add(self.slider_4, 0, wx.ADJUST_MINSIZE, 0)        sizer_4.Add(self.slider_5, 0, wx.ADJUST_MINSIZE, 0)        grid_sizer_1.Add(sizer_4, 1, wx.EXPAND, 0)        grid_sizer_1.Add(self.button_9, 0, wx.ADJUST_MINSIZE, 0)        sizer_5.Add(self.button_11, 0, wx.ADJUST_MINSIZE, 0)        sizer_5.Add(self.button_10, 0, wx.ADJUST_MINSIZE, 0)        sizer_5.Add(self.panel_3, 1, wx.EXPAND, 0)        sizer_5.Add(self.label_2, 0, wx.ADJUST_MINSIZE, 0)        sizer_5.Add(self.panel_4, 1, wx.EXPAND, 0)        grid_sizer_1.Add(sizer_5, 1, wx.EXPAND, 0)        grid_sizer_1.Add(self.panel_8, 1, wx.EXPAND, 0)        grid_sizer_1.Add(self.panel_9, 1, wx.EXPAND, 0)        grid_sizer_1.Add(self.label_3, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)        grid_sizer_1.Add(self.slider_6, 0, wx.ADJUST_MINSIZE, 0)        grid_sizer_1.Add(self.label_4, 0, wx.ALIGN_BOTTOM|wx.ADJUST_MINSIZE, 0)        grid_sizer_1.Add(self.slider_7, 0, wx.ADJUST_MINSIZE, 0)        grid_sizer_1.Add(self.panel_10, 1, wx.EXPAND, 0)        sizer_7.Add(self.button_12, 0, wx.ADJUST_MINSIZE, 0)        sizer_7.Add(self.button_13, 0, wx.ADJUST_MINSIZE, 0)        sizer_7.Add(self.button_14, 0, wx.ADJUST_MINSIZE, 0)        sizer_7.Add(self.panel_11, 1, wx.EXPAND, 0)        sizer_7.Add(self.panel_12, 1, wx.EXPAND, 0)        grid_sizer_1.Add(sizer_7, 1, wx.EXPAND, 0)        sizer_1.Add(grid_sizer_1, 1, wx.EXPAND, 0)        self.SetAutoLayout(True)        self.SetSizer(sizer_1)        sizer_1.Fit(self)        sizer_1.SetSizeHints(self)        self.Layout()        # end wxGlade    # Menu exit    def TimeToQuit(self, event):        self.tb.stop()        self.Close(True)    # Powermate being turned    def on_rotate(self, event):	if self.active_button == 5:	   self.slider_1.SetValue(self.slider_1.GetValue()+event.delta)           if self.slider_2.GetValue() > (self.slider_1.GetValue() - 200) :              self.slider_2.SetValue(self.slider_1.GetValue() - 200)	   self.filter()	if self.active_button == 6:	   self.slider_2.SetValue(self.slider_2.GetValue()+event.delta)	   if self.slider_1.GetValue() < (self.slider_2.GetValue() + 200) :	      self.slider_1.SetValue(self.slider_2.GetValue() + 200)	   self.filter()	if self.active_button == 7:           new = max(0, min(6000, self.slider_3.GetValue() + event.delta))           self.slider_3.SetValue(new)           self.frequency = (self.f_slider_scale * new) + self.f_slider_offset           self.spin_ctrl_1.SetValue(self.frequency)	   if self.AM_mode == False:             self.xlate.set_center_freq( self.usrp_center - (self.frequency - self.tune_offset))	   else:	     self.xlate.set_center_freq( self.usrp_center - (self.frequency - self.tune_offset - 7.5e3))	   if self.button_12.GetValue():	      self.auto_antenna_tune()	if self.active_button == 8:           new = max(0, min(500, self.slider_4.GetValue() + event.delta))           self.slider_4.SetValue(new)           self.scale.set_k(math.pow(10.,((self.slider_4.GetValue()-500.)/100.)))	if self.active_button == 9:           if self.PLAY_FROM_USRP == False:              if event.delta == -1:                 self.src.seek(-1000000,gr.SEEK_CUR)              elif event.delta == 1:                 self.src.seek(1000000,gr.SEEK_CUR)    # Powermate pressed to switch controlled function    def on_pmButton(self, event):	if event.value == 0:	   if self.active_button == 5:	      self.active_button = 6	      self.button_5.SetValue(False)	      self.button_6.SetValue(True)	   elif self.active_button == 6:	      self.active_button = 7	      self.button_6.SetValue(False)	      self.button_7.SetValue(True)	   elif self.active_button == 7:	      self.active_button = 8	      self.button_7.SetValue(False)

⌨️ 快捷键说明

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