Browse Source

fft-decoder: setting station by frequency,tested sample rates and decimations, added RDS decoder , added ifft-hier block;rdstable:option to hide TMClog, added group frequency counter, set minsize depending on nPorts, googlemaps: removed html tags from hovertext

master
Clemens Richter 9 years ago
parent
commit
348765e85d
  1. 16
      grc/crfa_rds_parser_table_qt.xml
  2. 9
      grc/crfa_vector_cutter.xml
  3. BIN
      python/cache/data7/0/3loioqhp.d
  4. BIN
      python/cache/data7/3/2jayz5n3.d
  5. BIN
      python/cache/data7/5/2yrvdig5.d
  6. BIN
      python/cache/data7/5/3k87jkxu.d
  7. BIN
      python/cache/data7/6/2h60aaa6.d
  8. BIN
      python/cache/data7/6/3kqqka76.d
  9. BIN
      python/cache/data7/7/388lt1tw.d
  10. BIN
      python/cache/data7/9/28slll29.d
  11. BIN
      python/cache/data7/9/34vyu839.d
  12. BIN
      python/cache/data7/9/3hmw9s8i.d
  13. BIN
      python/cache/data7/a/32on7s1j.d
  14. BIN
      python/cache/data7/a/3e289n0j.d
  15. BIN
      python/cache/data7/b/2y312ork.d
  16. 39
      python/rds_parser_table_qt.py
  17. 24
      python/vector_cutter.py

16
grc/crfa_rds_parser_table_qt.xml

@ -13,7 +13,7 @@
#end if
$(signals) = rds_parser_table_qt_Signals()
self.$(id) = crfa.rds_parser_table_qt($(signals),$nPorts,self.set_$(freq_tune),$freq_tune,$log, $debug,$workdir,$writeDB)
$(win) = rds_parser_table_qt_Widget($signals, $label,self.$(id))
$(win) = rds_parser_table_qt_Widget($signals, $label,self.$(id),$showTMC)
$(gui_hint()($win))</make>
<callback>set_freq_tune($freq_tune);</callback>
<param>
@ -49,6 +49,20 @@ $(gui_hint()($win))</make>
<value>2</value>
<type>int</type>
<hide>part</hide>
</param>
<param>
<name>show TMC</name>
<key>showTMC</key>
<value>False</value>
<type>bool</type>
<option>
<name>Enable</name>
<key>True</key>
</option>
<option>
<name>Disable</name>
<key>False</key>
</option>
</param>
<param>
<name>Log</name>

9
grc/crfa_vector_cutter.xml

@ -4,13 +4,14 @@
<key>crfa_vector_cutter</key>
<category>[crfa]</category>
<import>import crfa</import>
<make>crfa.vector_cutter($insize, $outsize, $cutpoint,$pad_out)</make>
<make>crfa.vector_cutter($insize, $outsize, $cutpoint,$pad_out,$zero_len)</make>
<!-- Make one 'param' node for every Parameter you want settable from the GUI.
Sub-nodes:
* name
* key (makes the value accessible as $keyname, e.g. in the make node)
* type -->
<callback>set_cutpoint($cutpoint);</callback>
<callback>set_zero_len($zero_len);</callback>
<!-- <param>
<name>padded output</name>
<key>pad_out</key>
@ -40,6 +41,12 @@
<key>False</key>
</option>
</param>
<param>
<name>num-zeros</name>
<key>zero_len</key>
<value>0</value>
<type>int</type>
</param>
<param>
<name>insize</name>
<key>insize</key>

BIN
python/cache/data7/0/3loioqhp.d vendored

Binary file not shown.

BIN
python/cache/data7/3/2jayz5n3.d vendored

Binary file not shown.

BIN
python/cache/data7/5/2yrvdig5.d vendored

Binary file not shown.

BIN
python/cache/data7/5/3k87jkxu.d vendored

Binary file not shown.

BIN
python/cache/data7/6/2h60aaa6.d vendored

Binary file not shown.

BIN
python/cache/data7/6/3kqqka76.d vendored

Binary file not shown.

BIN
python/cache/data7/7/388lt1tw.d vendored

Binary file not shown.

BIN
python/cache/data7/9/28slll29.d vendored

Binary file not shown.

BIN
python/cache/data7/9/34vyu839.d vendored

Binary file not shown.

BIN
python/cache/data7/9/3hmw9s8i.d vendored

Binary file not shown.

BIN
python/cache/data7/a/32on7s1j.d vendored

Binary file not shown.

BIN
python/cache/data7/a/3e289n0j.d vendored

Binary file not shown.

BIN
python/cache/data7/b/2y312ork.d vendored

Binary file not shown.

39
python/rds_parser_table_qt.py

@ -503,12 +503,13 @@ class tmc_message:
else:
return "88:88"
def __init__(self,PI,tmc_x,tmc_y,tmc_z,datetime_received,tableobj):#TODO handle out of sequence data
self.psn=tableobj.RDS_data[PI]["PSN"]
#check LTN
try:
msg_ltn=tableobj.RDS_data[PI]["AID_list"][52550]["LTN"]
table_ltn=1#german table
if msg_ltn != table_ltn and tableobj.debug:
print("msg_ltn:%i does not match given table (1)"%msg_ltn)
print("msg_ltn:%i does not match given table (1) on station: %s"%(msg_ltn,self.psn))
except KeyError:
if tableobj.debug:
print("no LTN found")
@ -520,7 +521,6 @@ class tmc_message:
self.hastime=True
self.debug_data=""
self.tableobj=tableobj
self.psn=tableobj.RDS_data[PI]["PSN"]
self.PI=PI
#self.isCancelled=False
self.cancellation_time=None
@ -749,6 +749,7 @@ class rds_parser_table_qt(gr.sync_block):#START
for i in range(0,nPorts):
self.message_port_register_in(pmt.intern('in%d'%i))
self.set_msg_handler(pmt.intern('in%d'%i), functools.partial(self.handle_msg, port=i))
self.nPorts=nPorts
self.message_port_register_in(pmt.intern('freq'))
self.set_msg_handler(pmt.intern('freq'), self.set_freq)
self.message_port_register_out(pmt.intern('ctrl'))
@ -838,8 +839,10 @@ class rds_parser_table_qt(gr.sync_block):#START
reader.next()#skip header
self.pty_dict=dict((int(rows[0]),rows[1]) for rows in reader)
f.close()
self.minute_count=0
self.minute_count_timer=time.time()
self.save_data_timer=time.time()
atexit.register(self.goodbye)
def clean_data_and_commit_db(self):
@ -900,7 +903,13 @@ class rds_parser_table_qt(gr.sync_block):#START
if time.time()-self.save_data_timer > 10:#every 10 seconds
self.save_data_timer=time.time()
self.clean_data_and_commit_db()
if time.time()-self.minute_count_timer > 3:#every 3 second
self.minute_count=0
self.minute_count_timer=time.time()
pr.enable()#disabled-internal-profiling
self.minute_count+=1
self.signals.DataUpdateEvent.emit({'group_count':self.minute_count})
if self.writeDB:
#db=sqlite3.connect(self.db_name)
db=self.db
@ -1338,7 +1347,8 @@ class rds_parser_table_qt(gr.sync_block):#START
#print("TMC-info variant:%i"%adr)
if adr==4 or adr==5:#service provider name
segment=self.decode_chars(chr(array[4])+chr(array[5])+chr(array[6])+chr(array[7]))
print("adr:%i, segment:%s"%(adr,segment))
if self.debug:
print("TMC-info adr:%i (provider name), segment:%s"%(adr,segment))
if adr== 7:#freq of tuned an mapped station (not seen yet)
freq_TN=tmc_y>>8
freq_ON=tmc_y&0xff#mapped frequency
@ -1624,10 +1634,11 @@ class rds_parser_table_qt(gr.sync_block):#START
formatted_text=("<span style='font-family:Courier New;color:%s'>%s</span>"*3)% (textcolor,text[:start],segmentcolor,text[start:end],textcolor,text[end:])
return formatted_text
class rds_parser_table_qt_Widget(QtGui.QWidget):
def __init__(self, signals,label,tableobj):
def __init__(self, signals,label,tableobj,showTMC):
#print("gui initializing")self.tableobj.RDS_data["D3A2"]
self.signals = signals
self.tableobj=tableobj
self.showTMC=showTMC
self.signals.DataUpdateEvent.connect(self.display_data)
""" Creates the QT Range widget """
QtGui.QWidget.__init__(self)
@ -1669,9 +1680,15 @@ class rds_parser_table_qt_Widget(QtGui.QWidget):
mode_button.clicked.connect(self.switchMode)
button_layout.addWidget(mode_button)
layout.addLayout(button_layout)
label_layout = Qt.QHBoxLayout()
self.freq_label=QtGui.QLabel("decoder frequencies:")
layout.addWidget(self.freq_label)
self.count_label=QtGui.QLabel("count:")
label_layout.addWidget(self.freq_label)
label_layout.addWidget(self.count_label)
layout.addLayout(label_layout)
#TODO set different minsize if TMC is shown
self.setMinimumSize(Qt.QSize(500,50*self.tableobj.nPorts))
if self.showTMC:
self.tmc_message_label=QtGui.QLabel("TMC messages:")
self.event_filter=QtGui.QLineEdit()#QPlainTextEdit ?
self.location_filter=QtGui.QLineEdit(u"Baden-Württemberg")
@ -1694,8 +1711,8 @@ class rds_parser_table_qt_Widget(QtGui.QWidget):
font = self.logOutput.font()
font.setFamily("Courier")
font.setPointSize(10)
self.lastResizeTime=0
layout.addWidget(self.logOutput)
self.lastResizeTime=0
self.clip = QtGui.QApplication.clipboard()
#self.cb.clear(mode=cb.Clipboard )
#self.cb.setText("Clipboard Text", mode=cb.Clipboard)
@ -1747,9 +1764,11 @@ class rds_parser_table_qt_Widget(QtGui.QWidget):
self.table.setCellWidget(rowPosition,button_col,cellWidget)
def display_data(self, event):
#pp.pprint(event)
if type(event)==dict and event.has_key('group_count'):
self.count_label.setText("count:%i"%event['group_count'])
if type(event)==dict and event.has_key('decoder_frequencies'):
self.freq_label.setText(event['decoder_frequencies'])
if type(event)==dict and event.has_key('TMC_log'):
if type(event)==dict and event.has_key('TMC_log') and self.showTMC:
tmc_msg=event['TMC_log']
ef=unicode(self.event_filter.text().toUtf8(), encoding="UTF-8").lower()
lf=unicode(self.location_filter.text().toUtf8(), encoding="UTF-8").lower()
@ -1768,7 +1787,7 @@ class rds_parser_table_qt_Widget(QtGui.QWidget):
#self.logOutput.append(Qt.QString.fromUtf8(message_string))
#if event.has_key('multi_str'):
#self.logOutput.append(Qt.QString.fromUtf8(event['multi_str']))
if type(event)==dict and event.has_key('TMC_log_str'):
if type(event)==dict and event.has_key('TMC_log_str')and self.showTMC:
ef=unicode(self.event_filter.text().toUtf8(), encoding="UTF-8").lower()
lf=unicode(self.location_filter.text().toUtf8(), encoding="UTF-8").lower()
text=unicode(event['TMC_log_str'], encoding="UTF-8").lower()

24
python/vector_cutter.py

@ -27,7 +27,7 @@ class vector_cutter(gr.sync_block):
"""
docstring for block vector_cutter
"""
def __init__(self, insize=2048,outsize=1024,cutpoint=512,pad_out=False):
def __init__(self, insize=2048,outsize=1024,cutpoint=512,pad_out=False,zero_len=0):
if pad_out:
gr.sync_block.__init__(self,
name="vector_cutter",
@ -41,9 +41,17 @@ class vector_cutter(gr.sync_block):
self.cutpoint=cutpoint
self.insize=insize
self.outsize=outsize
print(pad_out)
#print(pad_out)
self.pad_out=pad_out
self.zero_len=zero_len
self.mask=np.concatenate((np.zeros(zero_len),np.ones(outsize-zero_len*2),np.zeros(zero_len)))
def set_zero_len(self,zero_len=None):
if zero_len is not None:
if isinstance(zero_len, float) or isinstance(zero_len, int):
self.zero_len=zero_len
else:
self.zero_len = int(zero_len)
self.mask=np.concatenate((np.zeros(self.zero_len),np.ones(self.outsize-self.zero_len*2),np.zeros(self.zero_len)))
def set_cutpoint(self, cutpoint=None):
#print("cutpoint set to %i"%cutpoint)
if cutpoint is not None:
@ -62,14 +70,20 @@ class vector_cutter(gr.sync_block):
attenuation=1e-2#40db (power)
for i,in_vec in enumerate(in0):
if 0<=cutpoint<self.insize-self.outsize:
out[i]=in_vec[cutpoint:cutpoint+self.outsize]
out_cut=in_vec[cutpoint:cutpoint+self.outsize]
if self.pad_out:
out_padded[i]=in_vec*np.concatenate((attenuation*np.ones(cutpoint),np.ones(self.outsize),attenuation*np.ones(self.insize-self.outsize-cutpoint)))
elif cutpoint <=self.insize:
out[i]=np.append(in_vec[cutpoint:self.insize],in_vec[0:self.outsize-self.insize+cutpoint])
out_cut=np.append(in_vec[cutpoint:self.insize],in_vec[0:self.outsize-self.insize+cutpoint])
if self.pad_out:
out_padded[i]=in_vec*np.concatenate((np.ones(cutpoint+self.outsize-self.insize),attenuation*np.ones(self.insize-self.outsize),np.ones(self.insize-cutpoint)))
else:
out_cut=in_vec[0:self.outsize]#dummy values
#out[i]=np.append(out_cut[self.outsize/2:self.outsize],out_cut[0:self.outsize/2])
if self.zero_len==0:
out[i]=out_cut
else:
out[i]=out_cut*self.mask
#out = in0[512:1536]
#code.interact(local=locals())
#out[0] = in0[0][512:1536]

Loading…
Cancel
Save