• Non ci sono risultati.

SCRIPT gnuradiogui.py D

N/A
N/A
Protected

Academic year: 2021

Condividi "SCRIPT gnuradiogui.py D"

Copied!
20
0
0

Testo completo

(1)

D

SCRIPT gnuradiogui.py

#!/usr/bin/env python #

# Copyright 2007 Ruben Undheim #

# This file is part of GNU Radio #

# This is free software; you can redistribute it and/or

# modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. #

# This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details.

#

# You should have received a copy of the GNU Library General Public # License along with GNU Radio; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street,

# Boston, MA 02110-1301, USA

from gnuradio import gr, audio, usrp,blks

from gnuradio.wxgui import stdgui, fftsink, waterfallsink import wx import time def fileExists(f): try: file = open(f) except IOError: exists = False else: exists = True return exists waterfall = False class vindu(gr.flow_graph): def __init__(self,frame,panel,vbox,argv): gr.flow_graph.__init__(self) self.panel = panel self.keydown = False self.signaltype = "" self.frame = frame

(2)

self.lastfolder = "" self.demoduler = None self.samplerate = 64000000/8 self.isconnected = False self.lastpos = 0 self.usrpmode = False self.dboard = (0,0) self.usrpfrequency = 100e6 self.squelchlevel = 0.6 self.offset = 0 self.showfreq = False self.forsterkning = None self.recording = False self.lastfilgain = 0 self.lastusrpgain = -100 self.demodulationtype = "WFM" self.isdemodulating = False self.filename = "/tmp/capture.cfile" self.fft = fftsink.fft_sink_c(self,panel,title="Spectrum display", fft_size=512, sample_rate=self.samplerate,fft_rate=10)

vbox.Add(self.fft.win,0,wx.SHAPED) self.fft.win.SetEnableGrid(False) wx.EVT_LEFT_DOWN(self.fft.win,self.Down) wx.EVT_LEFT_UP(self.fft.win,self.Up) wx.EVT_MOTION(self.fft.win,self.Move) wx.EVT_KEY_DOWN(self.fft.win,self.keyboard) wx.EVT_KEY_UP(self.fft.win, self.keyboardup) self.setup_form(frame,vbox,panel) if waterfall: self.waterfall = waterfallsink.waterfall_sink_c(self,panel,sample_rate=self.samplerate,fft_s ize=512,y_per_div=10,fft_rate=5) self.waterfall.one_in_n.set_n(10000000) vbox.Add(self.waterfall.win,0,wx.SHAPED) self.nullsignal() self.loadsettingsfile() def savesettingsknapp(self,event): utfil = open("/tmp/grg.conf","w") utfil.write(str(self.usrpfrequency)+"\n") print self.dboard[0] if self.dboard[0] == 0: utfil.write("A\n") elif self.dboard[0] == 1: utfil.write("B\n") utfil.write(str(self.signaltype)+"\n") if self.showfreqinfft.GetValue(): utfil.write("1\n") else: utfil.write("0\n") utfil.write(str(self.samplerate)+"\n") utfil.write(str(self.lastusrpgain)+"\n") if self.fft.average: utfil.write("1\n") else: utfil.write("0\n") # utfil.write(str(self.fft.peak_hold)+"\n") utfil.close()

(3)

def loadsettingsfile(self): if fileExists("/tmp/grg.conf"): innfil = open("/tmp/grg.conf","r") self.usrpfrequency = int(float(innfil.readline())) dboard = str(innfil.readline()).strip() if dboard == 'A': self.dboard = (0,0) self.datterkortknapp.SetSelection(0) elif dboard == 'B': self.dboard = (1,0) self.datterkortknapp.SetSelection(1) signaltype = str(innfil.readline()).strip() if signaltype=="USRP": self.startusrpmode() elif signaltype=="Complex-file": self.filsignal(self.filename) showfreq = int(innfil.readline()) if showfreq == 1: self.showfreq = True self.showfreqinfft.SetValue(True) self.showfreqinffttrykk(None) decim = 64000000/(int(float(innfil.readline()))) self.setdecim(decim) self.gainbox.SetValue(int(float(innfil.readline()))) self.gainboxchange(None) avg = int(innfil.readline()) #if avg == 1: # self.fft.set_average(avg) # self.fft.set_peak_hold(bool(innfil.readline())) innfil.close() def setup_form(self,frame,vbox,panel): # Row number 1: hbox = wx.BoxSizer(wx.HORIZONTAL) vbox.Add(hbox,0,wx.SHAPED) hbox.Add(wx.Button(panel,102,"No Input"),0,wx.SHAPED) wx.EVT_BUTTON(panel,102,self.nullsignalknapp) hbox.Add(wx.Button(panel,101,"Sine wave"),0,wx.SHAPED) wx.EVT_BUTTON(panel,101,self.sinuskurveknapp) hbox.Add(wx.Button(panel,103,"File signal"),0,wx.SHAPED) wx.EVT_BUTTON(panel,103,self.filsignalknapp) hbox.Add(wx.Button(panel,104,"Load file"),0,wx.SHAPED) wx.EVT_BUTTON(panel,104,self.loadfileknapp) hbox.Add(wx.Button(panel,109,"USRP"),0,wx.SHAPED) wx.EVT_BUTTON(panel,109,self.usrpknapp) hbox.Add(wx.Button(panel,110,"Record"),0,wx.SHAPED) wx.EVT_BUTTON(panel,110,self.record_samples) self.frequencyboxkont = wx.SpinCtrl(panel,105,"",max=1000000,min=1000,initial=100000) wx.EVT_SPINCTRL(panel,105,self.frequencybox) hbox.Add(self.frequencyboxkont,0,wx.SHAPED) #hbox.Add(wx.StaticText(panel,-1,"kHz"),0,wx.SHAPED) litenbox2 = wx.BoxSizer(wx.VERTICAL) hbox.Add(litenbox2,0,wx.SHAPED) self.repeatbox = wx.CheckBox(panel,106,"Repeat")

(4)

litenbox2.Add(self.repeatbox,0,wx.SHAPED) wx.EVT_CHECKBOX(panel,106,self.repeatknapp) # Row number 2: hbox2 = wx.BoxSizer(wx.HORIZONTAL) vbox.Add(hbox2,0,wx.SHAPED) delebox = wx.BoxSizer(wx.HORIZONTAL) #delebox2 = wx.BoxSizer(wx.HORIZONTAL) hbox2.Add(delebox,1,wx.EXPAND) #hbox2.Add(delebox2,1,wx.EXPAND) rbox2 = delebox self.decimbox = wx.RadioBox(panel,113,choices=['8','16','32','64','128','256'],label="USRP-decimation") rbox2.Add(self.decimbox,0,wx.SHAPED) wx.EVT_RADIOBOX(panel,113,self.setdecimbox) rbox2.Add(wx.RadioBox(panel,114,choices=['WFM','NBFM','AM','USB','LSB '],label="Demodulation:"),0,wx.SHAPED) wx.EVT_RADIOBOX(panel,114,self.setdemodulationbox)

self.demodulationbox = wx.CheckBox(panel,115,"Demodulation on") litenbox = wx.BoxSizer(wx.VERTICAL) rbox2.Add(litenbox,0,wx.SHAPED) litenbox.Add(self.demodulationbox,0,wx.SHAPED) wx.EVT_CHECKBOX(panel,115,self.setdemodulationbox2) self.frequencyedit = wx.SpinCtrl(panel,116,"",max=8000,min=-8000,initial=0) litenbox.Add(self.frequencyedit,0,wx.SHAPED) wx.EVT_SPINCTRL(panel,116,self.nyoffsetfelt) #rbox2.Add(wx.StaticText(panel,-1,"kHz"),0,wx.SHAPED) hbox31 = wx.BoxSizer(wx.HORIZONTAL) vbox.Add(hbox31,0,wx.SHAPED) hbox41 = wx.BoxSizer(wx.HORIZONTAL) vbox.Add(hbox41,0,wx.SHAPED) hbox51 = wx.BoxSizer(wx.HORIZONTAL) vbox.Add(hbox51,0,wx.SHAPED) hbox31.Add(wx.Button(panel,136,"Up 100M",size=wx.Size(65,27)),0,wx.SHAPED) hbox41.Add(wx.Button(panel,137,"Do 100M",size=wx.Size(65,27)),0,wx.SHAPED) hbox31.Add(wx.Button(panel,134,"Up 10M",size=wx.Size(60,27)),0,wx.SHAPED) hbox41.Add(wx.Button(panel,135,"Do 10M",size=wx.Size(60,27)),0,wx.SHAPED) hbox31.Add(wx.Button(panel,130,"Up 1M",size=wx.Size(60,27)),0,wx.SHAPED) hbox41.Add(wx.Button(panel,131,"Do 1M",size=wx.Size(60,27)),0,wx.SHAPED) hbox31.Add(wx.Button(panel,132,"U 0.1M",size=wx.Size(60,27)),0,wx.SHAPED) hbox41.Add(wx.Button(panel,133,"D 0.1M",size=wx.Size(60,27)),0,wx.SHAPED) hbox31.Add(wx.Button(panel,140,"Dem. 25kHz up",size=wx.Size(120,27)),0,wx.SHAPED) hbox41.Add(wx.Button(panel,141,"Dem. 25kHz do",size=wx.Size(120,27)),0,wx.SHAPED) hbox31.Add(wx.Button(panel,138,"Dem. 100Hz up",size=wx.Size(120,27)),0,wx.SHAPED)

(5)

hbox41.Add(wx.Button(panel,139,"Dem. 100Hz do",size=wx.Size(120,27)),0,wx.SHAPED) self.datterkortknapp = wx.RadioBox(panel,143,choices=['A','B'],label="Daughterboard:") wx.EVT_RADIOBOX(panel,143,self.datterkortaction) hbox41.Add(self.datterkortknapp,0,wx.SHAPED) wx.EVT_BUTTON(panel,136,self.tunepluss_100m) wx.EVT_BUTTON(panel,137,self.tuneminus_100m) wx.EVT_BUTTON(panel,134,self.tunepluss_10m) wx.EVT_BUTTON(panel,135,self.tuneminus_10m) wx.EVT_BUTTON(panel,130,self.tunepluss_1m) wx.EVT_BUTTON(panel,131,self.tuneminus_1m) wx.EVT_BUTTON(panel,132,self.tunepluss_01m) wx.EVT_BUTTON(panel,133,self.tuneminus_01m) wx.EVT_BUTTON(panel,140,self.offpluss_25k) wx.EVT_BUTTON(panel,141,self.offminus_25k) wx.EVT_BUTTON(panel,138,self.offpluss_100) wx.EVT_BUTTON(panel,139,self.offminus_100) self.gainbox = wx.SpinCtrl(panel,152,"",max=100,min=0,initial=60) hbox31.Add(wx.StaticText(panel,-1,"Gain:"),0,wx.SHAPED) hbox31.Add(self.gainbox,0,wx.SHAPED) wx.EVT_SPINCTRL(panel,152,self.gainboxchange) #hbox31.Add(wx.StaticText(panel,-1,"dB"),0,wx.SHAPED) self.squelchbox = wx.SpinCtrl(panel,153,"",max=100,min=0,initial=50,size=wx.Size(50,20)) hbox51.Add(self.squelchbox,0,wx.SHAPED) hbox51.Add(wx.StaticText(panel,-1,"NBFM squelch level"),0,wx.SHAPED) wx.EVT_SPINCTRL(panel,153,self.squelchboxchange)

self.showfreqinfft = wx.CheckBox(panel,154,"Show frequency in FFT") hbox51.Add(self.showfreqinfft,0,wx.SHAPED) wx.EVT_CHECKBOX(panel,154,self.showfreqinffttrykk) hbox51.Add(wx.Button(panel,155,"Save settings"),0,wx.SHAPED) wx.EVT_BUTTON(panel,155,self.savesettingsknapp) #frequencybox = wx.SpinCtrl(panel,105,"",max=1000000,min=1000,initial=100000) # litenbox.Add(wx.CheckBox(panel,116,"Joda"),0,wx.SHAPED) # wx.EVT_CHECKBOX(panel,116,self.setdemodulationbox2) return hbox def start(self): if not self.is_running(): gr.flow_graph.start(self) def stop(self): if self.is_running(): gr.flow_graph.stop(self) def nullsignalknapp(self,event): self.nullsignal() def nullsignal(self):

(6)

self.signaltype = "No signal" nullsignal = gr.null_source(gr.sizeof_gr_complex) self.shiftinput(nullsignal,10000) def sinuskurveknapp(self,event): self.sinuskurve() def sinuskurve(self):

self.signaltype = "20Khz sine at 50Hz samplerate"

sinus = gr.sig_source_c(50000,gr.GR_SIN_WAVE,-20000,100) self.shiftinput(sinus,50000) def filsignalknapp(self,event): self.filsignal(self.filename) def filsignal(self,filename): self.signaltype = "Complex-file" self.samplerate = 64000000 / (self.hjelpsetdecimbox(self.decimbox.GetSelection())) if fileExists(filename): fil = gr.file_source(gr.sizeof_gr_complex,filename,self.repeatbox.GetValue()) self.shiftinput(fil,self.samplerate) else:

self.frame.SetStatusText(" No file loaded.",1) self.gainbox.SetRange(-100,100)

def loadfileknapp(self,event): self.loadfile()

def loadfile(self):

dlg = wx.FileDialog(self.panel, "Open", self.lastfolder,"","GNU radio complex data files (*.dat,*.cfile)|*.dat;*.cfile|All Files|*.*")

if dlg.ShowModal() == wx.ID_OK:

self.filename = str(dlg.GetPath())

self.lastfolder = str(dlg.GetDirectory())

self.frame.SetStatusText( self.filename + " loaded.",1) #self.filsignalknapp(None) dlg.Destroy() def pausefileknapp(self,event): self.pausefil() def pausefil(self): self.lastinput.stop() def repeatknapp(self,event): self.repeattoggle(event.GetEventObject().GetValue()) def repeattoggle(self,onoff): if self.signaltype == "Complex-file": self.filsignal(self.filename) def restartknapp(self,event): if self.signaltype == "Complex-file": self.filsignalknapp(None) def setdecimbox(self,event): selected = event.GetEventObject().GetSelection() decim = self.hjelpsetdecimbox(selected) self.setdecim(decim) def hjelpsetdecimbox(self,selected): if selected == 0: decim = 8

(7)

elif selected == 1: decim = 16 elif selected == 2: decim = 32 elif selected == 3: decim = 64 elif selected == 4: decim = 128 elif selected == 5: decim = 256 return decim def setdecim(self,decim):

self.samplerate = int(float(64000000 / decim)) if decim == 8: self.decimbox.SetSelection(0) elif decim == 16: self.decimbox.SetSelection(1) elif decim == 32: self.decimbox.SetSelection(2) elif decim == 64: self.decimbox.SetSelection(3) elif decim == 128: self.decimbox.SetSelection(4) elif decim == 256: self.decimbox.SetSelection(5) if self.isconnected: self.shiftinput(self.lastinput,self.samplerate) def setdemodulationbox(self,event): selected = event.GetEventObject().GetSelection() if selected == 0: demoding = "WFM" self.demodulationtype = "WFM" elif selected == 1: demoding = "NBFM" self.demodulationtype = "NBFM" elif selected == 2: demoding = "AM" self.demodulationtype = "AM" elif selected == 3: demoding = "USB" self.demodulationtype = "USB" elif selected == 4: demoding = "LSB" self.demodulationtype = "LSB" else: demoding = "" if self.isdemodulating: self.stopptmp() self.skiftmodulasjon() else: self.demodulationbox.SetValue(True) self.setdemodulationbox2(None) if self.showfreqinfft.GetValue(): self.showfreqinfft.SetValue(False) self.showfreqinffttrykk(None) #print demoding

(8)

def oppdaterdemod(self): if self.isdemodulating:

self.stopptmp()

self.skiftmodulasjon() def skiftmodulasjon(self):

if self.signaltype == "Complex-file" or self.signaltype == "USRP": self.stop() if self.demodulationtype == "WFM": self.demoduler = wfm(self,self.samplerate,self.offset) elif self.demodulationtype == "NBFM": self.demoduler = nbfm(self,self.samplerate,self.offset) self.squelchboxchange(None) self.demoduler.squelch.set_threshold(self.squelchlevel) elif self.demodulationtype == "AM":

self.demoduler = am(self,self.samplerate,self.offset)

elif self.demodulationtype == "USB": self.demoduler = ssb(self,self.samplerate,self.offset,"USB") elif self.demodulationtype == "LSB": self.demoduler = ssb(self,self.samplerate,self.offset,"LSB") else: self.demoduler = wfm(self,self.samplerate,self.offset) self.connect(self.forsterkning,self.demoduler) self.audio_sink = audio.sink(self.demoduler.get_audio_rate(),"default") self.connect(self.demoduler,self.audio_sink) self.start() self.isdemodulating = True else: self.demodulationbox.SetValue(False) def setdemodulationbox2(self,event): selected = self.demodulationbox.GetValue()#event.GetEventObject().GetValue() #print "Demodulation: ",selected

if self.signaltype == "Complex-file" or self.signaltype == "USRP": if selected: if not self.isdemodulating: self.skiftmodulasjon() self.isdemodulating = True if self.showfreqinfft.GetValue(): self.showfreqinfft.SetValue(False) self.showfreqinffttrykk(None) else: if self.isdemodulating: self.stop() self.disconnect(self.forsterkning,self.demoduler)

(9)

self.disconnect(self.demoduler,self.audio_sink) self.audio_sink = None self.demoduler = None self.start() self.isdemodulating = False if self.signaltype == "USRP": self.showfreqinfft.SetValue(True) self.showfreqinffttrykk(None) else: if self.isdemodulating: self.stopptmp() self.isdemodulating = False self.demodulationbox.SetValue(False)#event.GetEventObject().SetValue( False) def stopptmp(self): self.stop() self.disconnect(self.forsterkning,self.demoduler) self.disconnect(self.demoduler,self.audio_sink) self.audio_sink = None self.demoduler = None time.sleep(0.01) self.isdemodulating = False def shiftinput(self,signal,samplerate): self.stop_record_samples() wasrunning = False if self.is_running(): wasrunning = True wasdemod = False if self.isdemodulating: self.stopptmp() wasdemod = True if self.is_running(): self.stop() if self.isconnected: self.disconnect(self.lastinput,self.forsterkning) self.disconnect(self.forsterkning,self.nullthrottle) self.disconnect(self.nullthrottle,self.fft) if waterfall: self.disconnect(self.nullthrottle,self.waterfall) if not self.signaltype == "USRP":

self.stopusrpmode() self.nullthrottle = gr.throttle(gr.sizeof_gr_complex,samplerate) self.forsterkning = gr.multiply_const_cc(1) self.fft.set_sample_rate(samplerate) if waterfall: self.waterfall.set_sample_rate(samplerate) #print self.usrpmode if self.usrpmode: self.lastinput.set_decim_rate(self.hjelpsetdecimbox(self.decimbox.Get Selection())) #print "skiftet" #self.disconnect_all() self.connect(signal,self.forsterkning,self.nullthrottle,self.fft)

(10)

if waterfall: self.connect(self.nullthrottle,self.waterfall) self.lastinput = signal self.isconnected = True self.UpdateStatusText() self.samplerate = samplerate #self.oppdaterdemod() if wasdemod: self.skiftmodulasjon() if wasrunning: self.start() self.updateFFT() if self.signaltype == "Complex-file": self.settforsterkning(self.lastfilgain) def UpdateStatusText(self): if self.usrpmode: self.frame.SetStatusText("Rate: "+str(self.samplerate) + ", Signal type: "+str(self.signaltype) +", "+self.subdev.name(),0)

self.frame.SetStatusText("Demod freq: "+

str((float(self.usrpfrequency)/1000000)+(float(self.offset)/1000000))+"MHz, USRP-freq: "+ str(float(self.usrpfrequency)/1000000)+"MHz" ,1)

else:

self.frame.SetStatusText("Rate: "+str(self.samplerate) + ", Signal type: "+str(self.signaltype) ,0)

self.frame.SetStatusText("Offset: "+str(float(self.offset)/1000)+"KHz, "+ self.filename,1) def Up(self,event): self.keydown = False self.lastpos = 0 def Down(self,event): self.keydown = True self.Move(event) def Move(self,event): if self.keydown: if self.showfreqinfft.GetValue(): if self.signaltype == "USRP": if self.lastpos != 0: diff = -( event.GetX()-self.lastpos) faktor = 6000 self.plusstune(faktor*diff) self.lastpos = event.GetX() else: # print event.GetX() midt = 327 decim = 64000000 / self.samplerate k = 0 if decim == 8: midt = 336 k = 14080 elif decim == 16: midt = 329 k = 7250 elif decim == 32: midt = 329 k = 3640

(11)

elif decim == 64: midt = 329 k = 1802 elif decim == 128: midt = 327 k = 1087 elif decim == 256: midt = 327 k = 724 setting = event.GetX()-midt # print (setting*k)/1000 ,"KHz" #self.SetStatusText("Loaded: "+self.filename+", Offset: "+str((setting*k)/1000)+"KHz") #self.ddc.set_center_freq(-setting*k) self.offset = setting*k if self.signaltype == "Complex-file" or self.signaltype == "USRP": if self.demodulationbox.GetValue(): self.set_demod_frequency() self.frequencyedit.SetValue(int(self.offset/1000)) else: if self.demodulationbox.GetValue(): self.set_demod_frequency() self.frequencyedit.SetValue(int(self.offset/1000)) def nyoffsetfelt(self,event): value = float(event.GetEventObject().GetValue()) self.offset = value*1000 if self.demodulationbox.GetValue(): self.set_demod_frequency() def set_demod_frequency(self): if self.demodulationtype == "LSB":

off = -self.offset + self.demoduler.bfo elif self.demodulationtype == "USB":

off = -self.offset - self.demoduler.bfo else: off = -self.offset self.demoduler.selectfrequency.set_center_freq(off) self.UpdateStatusText() def usrpknapp(self,event): if not self.usrpmode: self.startusrpmode() def startusrpmode(self): try: u = usrp.source_c(0) except RuntimeError: u = None

self.frame.SetStatusText("No USRP is connected") else: self.signaltype = "USRP" self.samplerate = 64000000/(self.hjelpsetdecimbox((self.decimbox.GetSelection()))) u.set_decim_rate(self.hjelpsetdecimbox(self.decimbox.GetSelection())) #subdev_spec = usrp.pick_rx_subdevice(u)

(12)

#print subdev_spec subdev_spec = self.dboard u.set_mux(usrp.determine_rx_mux_value(u,subdev_spec)) self.subdev = usrp.selected_subdev(u,subdev_spec) self.subdev.set_auto_tr(True) g = self.subdev.gain_range() mid = float(g[0]+g[1])/2 f = self.subdev.freq_range() if f[1] < 10000000000: self.frequencyboxkont.SetRange(f[0]/1000,f[1]/1000) else: self.frequencyboxkont.SetRange(0,2000000000) self.gainbox.SetRange(int(g[0]),int(g[1])) if self.lastusrpgain == -100: self.gainbox.SetValue(int(mid)) self.lastusrpgain = int(mid) else: self.gainbox.SetValue(self.lastusrpgain) self.subdev.set_gain(int(self.gainbox.GetValue())) #print self.samplerate self.shiftinput(u,self.samplerate) self.usrpmode = True self.tune_usrp(self.usrpfrequency) self.updateFFT() def stopusrpmode(self): if self.usrpmode:

#print "Stops USRP-mode" self.lastinput = None self.subdev = None self.usrpmode = False def tune_usrp(self,freq): if self.usrpmode: r = usrp.tune(self.lastinput,0,self.subdev,freq) if r: #print "OK" self.usrpfrequency = freq self.UpdateStatusText() self.updateFFT() #print "feil" def frequencybox(self,event): self.tune_usrp(int(event.GetEventObject().GetValue())*1000) def plussoffset(self,verdi):

if not self.demoduler == None:

self.offset = self.offset + verdi self.set_demod_frequency() self.frequencyedit.SetValue(int(self.offset/1000)) def plusstune(self,verdi): if self.usrpmode: self.tune_usrp(self.usrpfrequency+verdi) self.frequencyboxkont.SetValue(int(float(self.usrpfrequency)/1000))

(13)

def record_samples(self,event): if self.usrpmode: if not self.recording: self.start_record_samples() else: self.stop_record_samples() def start_record_samples(self): self.stop() self.utfil = gr.file_sink(gr.sizeof_gr_complex,"/tmp/capture.cfile") self.connect(self.lastinput,self.utfil) self.start() self.frame.SetStatusText("Records to /tmp/capture.cfile. BE CAREFUL!!!") self.recording = True def stop_record_samples(self): if self.recording: self.stop() self.disconnect(self.lastinput,self.utfil) self.start() self.frame.SetStatusText("Finished recording to /tmp/capture.cfile") self.recording = False def gainboxchange(self,event): value = self.gainbox.GetValue() #int(event.GetEventObject().GetValue()) if self.usrpmode: self.subdev.set_gain(value) self.settforsterkning(0) self.lastusrpgain = value

elif self.signaltype == "Complex-file": self.settforsterkning(value) self.lastfilgain = value def settforsterkning(self,verdi,boxen=True): reell = 10**(verdi/10.) if self.signaltype == "Complex-file": self.forsterkning.set_k(reell) self.gainbox.SetValue(verdi) else: self.forsterkning.set_k(1) def tunepluss_100m(self,event): self.plusstune(100e6) def tuneminus_100m(self,event): self.plusstune(-100e6) def tunepluss_10m(self,event): self.plusstune(10e6) def tuneminus_10m(self,event): self.plusstune(-10e6) def tunepluss_1m(self,event): self.plusstune(1e6) def tuneminus_1m(self,event): self.plusstune(-1e6) def tunepluss_01m(self,event): self.plusstune(1e5) def tuneminus_01m(self,event): self.plusstune(-1e5)

(14)

def offpluss_25k(self,event): self.plussoffset(25000) def offminus_25k(self,event): self.plussoffset(-25000) def offpluss_100(self,event): self.plussoffset(100) def offminus_100(self,event): self.plussoffset(-100) def keyboard(self,event): key = event.GetKeyCode() if key == 314: self.offminus_100(None) elif key == 316: self.offpluss_100(None) elif key == 315: #Opp

self.tunepluss_01m(None) elif key == 317: self.tuneminus_01m(None) elif key == 65: #a if not self.showfreqinfft.GetValue(): self.showfreqinfft.SetValue(True) self.showfreqinffttrykk(None) else: self.showfreqinfft.SetValue(False) self.showfreqinffttrykk(None) def keyboardup(self,event): key = event.GetKeyCode() def datterkortaction(self,event): selected = event.GetEventObject().GetSelection() wasdemod = False if self.isdemodulating: wasdemod = True if selected == 0: if not self.dboard == (0,0): self.dboard = (0,0) if self.usrpmode: self.nullsignal() time.sleep(0.1) self.startusrpmode() if 0:#wasdemod: self.demodulationbox.SetValue(True) self.setdemodulationbox2(None) elif selected == 1: if not self.dboard == (1,0): self.dboard = (1,0) if self.usrpmode: self.nullsignal() time.sleep(0.1) self.startusrpmode() if 0:#wasdemod: self.demodulationbox.SetValue(True) self.setdemodulationbox2(None) def squelchboxchange(self,event): self.squelchlevel = float(self.squelchbox.GetValue())/100 if self.demodulationtype == "NBFM" and self.isdemodulating:

(15)

def showfreqinffttrykk(self,event): if not self.signaltype == "USRP":

self.showfreqinfft.SetValue(False) else: self.updateFFT() def updateFFT(self): if self.signaltype == "USRP": if self.showfreqinfft.GetValue(): self.fft.set_baseband_freq(self.usrpfrequency) else: self.fft.set_baseband_freq(0) else: self.fft.set_baseband_freq(0) class wfm(gr.hier_block):

def __init__(self,fg, samplerate, offset): #print "WFM"

decimation = max(int(float(samplerate) / 200000),1) if_rate = int(float(samplerate) / decimation)

audio_decimation = max(1,int(float(if_rate) / 50000)) audio_rate = int(float(if_rate)/audio_decimation) #print "if_rate: ", if_rate

#print "audio-rate: ", audio_rate channel_coeffs = gr.firdes.low_pass (1.0,samplerate,80e3,115e3,gr.firdes.WIN_HAMMING)

self.selectfrequency =

gr.freq_xlating_fir_filter_ccf(decimation, channel_coeffs, -offset, samplerate) #print "her" self.fm_demod = gr.quadrature_demod_cf(0.3) audio_coeffs = gr.firdes.band_pass(1.0,if_rate,80,11000, 1000,gr.firdes.WIN_HAMMING) self.audio_filter = gr.fir_filter_fff(audio_decimation,audio_coeffs) fg.connect(self.selectfrequency,self.fm_demod) fg.connect(self.fm_demod, self.audio_filter) self.audio_rate = audio_rate gr.hier_block.__init__(self,fg,self.selectfrequency,self.audio_filter ) def __del__(self): self.fg.disconnect(self.selectfrequency,self.fm_demod) self.fg.disconnect(self.fm_demod, self.audio_filter) self.selectfrequency = None self.fm_demod = None self.audio_filter = None def get_audio_rate(self): return self.audio_rate class nbfm(gr.hier_block):

def __init__(self,fg, samplerate, offset): #print "NBFM"

decimation = max(int(float(samplerate) / 50000),1) if_rate = int(float(samplerate) / decimation)

(16)

audio_decimation = max(1,int(float(if_rate) / 50000)) audio_rate = int(float(if_rate)/audio_decimation) #print "if_rate: ", if_rate

#print "audio-rate: ", audio_rate channel_coeffs = gr.firdes.low_pass (1.0,samplerate,10e3,16e3,gr.firdes.WIN_HAMMING)

self.selectfrequency =

gr.freq_xlating_fir_filter_ccf(decimation, channel_coeffs, -offset, samplerate) self.squelch = blks.standard_squelch(fg,audio_rate)#gr.simple_squelch_cc(1000) #print "her" self.fm_demod = gr.quadrature_demod_cf(0.5) audio_coeffs = gr.firdes.band_pass(1.0,if_rate,80,3000, 1000,gr.firdes.WIN_HAMMING) self.audio_filter = gr.fir_filter_fff(audio_decimation,audio_coeffs) fg.connect(self.selectfrequency,self.fm_demod) fg.connect(self.fm_demod,self.squelch) fg.connect(self.squelch, self.audio_filter) self.audio_rate = audio_rate gr.hier_block.__init__(self,fg,self.selectfrequency,self.audio_filter ) def __del__(self): self.fg.disconnect(self.selectfrequency,self.fm_demod) self.fg.disconnect(self.fm_demod,self.squelch) self.fg.disconnect(self.squelch, self.audio_filter) self.fg.disconnect (self.squelch.input_node, (self.squelch.squelch_mult, 0)) self.fg.disconnect (self.squelch.input_node,self.squelch.low_iir) self.fg.disconnect (self.squelch.low_iir,(self.squelch.low_square,0)) self.fg.disconnect (self.squelch.low_iir,(self.squelch.low_square,1)) self.fg.disconnect (self.squelch.low_square,self.squelch.low_smooth) self.fg.disconnect (self.squelch.low_smooth,(self.squelch.sub,0)) self.fg.disconnect (self.squelch.low_smooth, (self.squelch.add,0)) self.fg.disconnect (self.squelch.input_node,self.squelch.hi_iir) self.fg.disconnect (self.squelch.hi_iir,(self.squelch.hi_square,0)) self.fg.disconnect (self.squelch.hi_iir,(self.squelch.hi_square,1)) self.fg.disconnect (self.squelch.hi_square,self.squelch.hi_smooth) self.fg.disconnect (self.squelch.hi_smooth,(self.squelch.sub,1)) self.fg.disconnect (self.squelch.hi_smooth, (self.squelch.add,1))

(17)

self.fg.disconnect (self.squelch.sub, (self.squelch.div, 0)) self.fg.disconnect (self.squelch.add, (self.squelch.div, 1)) self.fg.disconnect (self.squelch.div, self.squelch.gate)

self.fg.disconnect (self.squelch.gate,self.squelch.squelch_lpf) self.fg.disconnect (self.squelch.squelch_lpf,(self.squelch.squelch_mult,1)) self.selectfrequency = None self.fm_demod = None self.audio_filter = None self.squelch = None def get_audio_rate(self): return self.audio_rate class am(gr.hier_block):

def __init__(self,fg, samplerate, offset): #print "AM"

decimation = max(int(float(samplerate) / 50000),1) if_rate = int(float(samplerate) / decimation)

audio_decimation = max(1,int(float(if_rate) / 50000)) audio_rate = int(float(if_rate)/audio_decimation) #print "if_rate: ", if_rate

#print "audio-rate: ", audio_rate channel_coeffs = gr.firdes.low_pass (1.0,samplerate,10e3,16e3,gr.firdes.WIN_HAMMING)

self.selectfrequency =

gr.freq_xlating_fir_filter_ccf(decimation, channel_coeffs, -offset, samplerate) #print "her" self.am_demod = gr.complex_to_mag()# gr.quadrature_demod_cf(0.5) self.volume = gr.multiply_const_ff(0.010) audio_coeffs = gr.firdes.band_pass(1.0,if_rate,80,2500, 100,gr.firdes.WIN_HAMMING) self.audio_filter = gr.fir_filter_fff(audio_decimation,audio_coeffs) self.agc = gr.agc2_ff(2,0.001,0.1,1,10) fg.connect(self.selectfrequency,self.am_demod) fg.connect(self.am_demod, self.volume) fg.connect(self.volume,self.agc) fg.connect(self.agc,self.audio_filter) self.audio_rate = audio_rate gr.hier_block.__init__(self,fg,self.selectfrequency,self.audio_filter ) def __del__(self): self.fg.disconnect(self.selectfrequency,self.am_demod) self.fg.disconnect(self.am_demod,self.volume) self.fg.disconnect(self.volume,self.agc) self.fg.disconnect(self.agc,self.audio_filter) self.selectfrequency = None self.am_demod = None self.audio_filter = None

(18)

self.agc = None def get_audio_rate(self):

return self.audio_rate class ssb(gr.hier_block):

def __init__(self,fg, samplerate, offset, type): #print "SSB"

bfo = 1500

if type == 'LSB':

off = -(offset - bfo) else:

off = -(offset + bfo) self.bfo = bfo

decimation = max(int(float(samplerate) / 50000),1) if_rate = int(float(samplerate) / decimation) audio_decimation = 1

audio_rate = if_rate

#print "if_rate: ", if_rate

#print "audio-rate: ", audio_rate channel_coeffs = gr.firdes.low_pass (1.0,samplerate,20e3,16e3,gr.firdes.WIN_HAMMING)

self.selectfrequency =

gr.freq_xlating_fir_filter_ccf(decimation, channel_coeffs,off, samplerate) #print "her" self.scale = gr.multiply_const_ff(0.02)#gr.agc2_ff(10,0.0000001,0.01,0.01,10) self.split = gr.complex_to_float() self.af_loi = gr.sig_source_f(audio_rate,gr.GR_COS_WAVE,bfo,1,0) self.af_loq = gr.sig_source_f(audio_rate,gr.GR_SIN_WAVE,bfo,1,0) audio_coeffs = gr.firdes.low_pass(1.0,audio_rate,1.8e3, 600,gr.firdes.WIN_HAMMING) self.audio_filter = gr.fir_filter_fff(audio_decimation,audio_coeffs) self.audio_filter2 = gr.fir_filter_fff(audio_decimation,audio_coeffs) self.af_mixi = gr.multiply_ff() self.af_mixq = gr.multiply_ff() if type == "LSB": self.sum = gr.add_ff() else: self.sum = gr.sub_ff() #self.scale = gr.multiply_const_ff(0.02) fg.connect(self.selectfrequency,self.split) fg.connect((self.split,0),self.audio_filter) fg.connect(self.audio_filter,(self.af_mixi,0)) fg.connect(self.af_loi, (self.af_mixi,1)) fg.connect(self.af_mixi,(self.sum,0))

(19)

fg.connect((self.split,1),self.audio_filter2) fg.connect(self.audio_filter2,(self.af_mixq,0)) fg.connect(self.af_loq,(self.af_mixq,1)) fg.connect(self.af_mixq,(self.sum,1)) fg.connect(self.sum,self.scale) #fg.connect(self.scale,self.agc) self.audio_rate = audio_rate gr.hier_block.__init__(self,fg,self.selectfrequency,self.scale) def __del__(self): self.fg.disconnect(self.selectfrequency,self.split) self.fg.disconnect((self.split,0),self.audio_filter) self.fg.disconnect(self.audio_filter,(self.af_mixi,0)) self.fg.disconnect(self.af_loi, (self.af_mixi,1)) self.fg.disconnect(self.af_mixi,(self.sum,0)) self.fg.disconnect((self.split,1),self.audio_filter2) self.fg.disconnect(self.audio_filter2,(self.af_mixq,0)) self.fg.disconnect(self.af_loq,(self.af_mixq,1)) self.fg.disconnect(self.af_mixq,(self.sum,1)) self.fg.disconnect(self.sum,self.scale) #self.fg.disconnect(self.scale,self.agc) self.selectfrequency = None self.am_demod = None self.audio_filter = None def get_audio_rate(self): return self.audio_rate if __name__ == '__main__':

app = stdgui.stdapp(vindu,"GNURadio Control GUI") app.MainLoop()

(20)

Riferimenti

Documenti correlati

- :l (A.T.R.) Alluvioni sciolte di rocce palcozoichc delle sponde occidcutu li della rossa tcuonica, sopra banchi sino a 40150 metri di spessore di argille plastiche bianche o grigie

Titolarità Classe di Concorso /Tipo posto Sede ottenuta A001 - ARTE E IMMAGINE SC. NON TROVA A060 -

[r]

[r]

(parte edibile, al netto degli scarti, per singola porzione).

[r]

[r]

Unità di GR consumate (per 1.000 abitanti) nel periodo gennaio-maggio 2020 rispetto al consumo programmato per