From bf7d2f4ad7b9d4a17d906848e4de922709e485ca Mon Sep 17 00:00:00 2001 From: csrichter Date: Tue, 2 May 2017 13:09:00 +0200 Subject: [PATCH 1/7] added off-switch for mutex-debug --- python/tmc_parser.py | 46 +++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/python/tmc_parser.py b/python/tmc_parser.py index ca532cc..39dd656 100644 --- a/python/tmc_parser.py +++ b/python/tmc_parser.py @@ -253,60 +253,58 @@ class tmc_parser(gr.sync_block): print("symbol not decoded: "+"?%02X?"%ord(char)+"in string:"+return_string) pass return return_string +def print_dbg(message,end="\n"): + dbg=False + if dbg: + print(message,end=end) class tmc_parser_Widget(QtGui.QWidget): + def print_tmc_msg(self,tmc_msg): - print("print:",end="") self.logMutex.acquire(1) - print("got mutex,",end="") + print_dbg("print:got mutex,",end="") sb=self.logOutput.verticalScrollBar() - print(".",end="") + print_dbg(".",end="") oldmax=sb.maximum() - print(".",end="") + print_dbg(".",end="") auto_scroll= abs(oldmax-sb.value())<60#auto_scroll if scrollbar was at max - print(".",end="") - #print("%i %i %r"%(sb.maximum(),sb.value(),auto_scroll)) + print_dbg(".",end="") ef=unicode(self.event_filter.text().toUtf8(), encoding="UTF-8").lower() lf=unicode(self.location_filter.text().toUtf8(), encoding="UTF-8").lower() filters=[{"type":"location", "str":lf},{"type":"event", "str":ef}] if tmc_dict.matchFilter(tmc_msg,filters): - print("a",end="") + print_dbg("a",end="") self.logOutput.append(Qt.QString.fromUtf8(tmc_msg.log_string())) - print("a",end="") + print_dbg("a",end="") self.logOutput.append(Qt.QString.fromUtf8(tmc_msg.multi_str())) - print("a",end="") - #print("new message") + print_dbg("a",end="") if auto_scroll: #sb=self.logOutput.verticalScrollBar() #disabled 2017-04-28 might be cause of double free new_max=sb.maximum() - print("s",end="") + print_dbg("s",end="") sb.setValue(new_max) - print("s",end="") - print("\tdone") - # code.interact(local=locals()) - #print("scrolling %i %i %r"%(oldmax,new_max,sb.value())) - #code.interact(local=locals()) + print_dbg("s",end="") self.logMutex.release(1) + print_dbg("\tdone") def filterChanged(self): - print("filterChanged:",end="") self.logMutex.acquire(1) - print("got mutex,",end="") + print_dbg("filterChanged:got mutex,",end="") ef="" lf="" try: ef=unicode(self.event_filter.text().toUtf8(), encoding="UTF-8").lower() lf=unicode(self.location_filter.text().toUtf8(), encoding="UTF-8").lower() except Exception as e: - print(e) - print("error getting filter strings") + print_dbg(e) + print_dbg("error getting filter strings") code.interact(local=locals()) - print("read filters,",end="") + print_dbg("read filters,",end="") self.logOutput.clear() - print("cleared,",end="") + print_dbg("cleared,",end="") filters=[{"type":"location", "str":lf},{"type":"event", "str":ef}] self.logOutput.append(Qt.QString.fromUtf8(self.parser.tmc_messages.getLogString(filters))) - print("appended,",end="") + print_dbg("appended,",end="") self.logMutex.release(1) - print("done") + print_dbg("done") def __init__(self, parser,maxheight): QtGui.QWidget.__init__(self) layout = Qt.QVBoxLayout() From 947bbe21e42d870bb057d048bdc9922f61a6f52d Mon Sep 17 00:00:00 2001 From: csrichter Date: Tue, 2 May 2017 15:01:24 +0200 Subject: [PATCH 2/7] added showInvalid checkbox --- python/tmc_classes.py | 15 ++++++++------- python/tmc_parser.py | 18 ++++++++++++++---- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/python/tmc_classes.py b/python/tmc_classes.py index 2b20b29..6dcfb54 100644 --- a/python/tmc_classes.py +++ b/python/tmc_classes.py @@ -587,16 +587,16 @@ class tmc_dict: self.dict_lock=threading.Lock() self.list_lock=threading.Lock() @staticmethod - def matchFilter(msg,filters): - if not msg.location.is_valid: + def matchFilter(msg,showInvalid,filters): + #print("fun:matchFilter:%s,showInvalid:%i"%(filters,showInvalid)) + if showInvalid and not msg.location.is_valid: return True#always show invalid messages loc_str=str(msg.location)+str(msg.location.reflocs) if not msg.location.linRef==None: loc_str+=str(msg.location.linRef.roadnumber) - for f in filters:#filters is list of dicts {"type":"event","str":"Stau"} - stringlist=f["str"].lower().split(";") + stringlist=f["str"].lower().split(";")#filters can be separated by semicolon for string in stringlist: if f["type"]=="event" and unicode(str(msg.event), encoding="UTF-8").lower().find(string)==-1:#if event filter does not match return False @@ -629,11 +629,12 @@ class tmc_dict: print("ERROR, not adding: "+str(message)) finally: self.dict_lock.release() - def getLogString(self,filters): + def getLogString(self,showInvalid,filters): self.list_lock.acquire() retStr="" + #print("fun:getLogString,filters:%s"%filters) for message in self.message_list: - if tmc_dict.matchFilter(message,filters): + if tmc_dict.matchFilter(message,showInvalid,filters): retStr+=message.log_string() retStr+="\n" retStr+=message.multi_str() @@ -821,7 +822,7 @@ class tmc_message: text+=templates[language+"_2b"].format(D=self.location.first_name) else: text+=templates[language+"_2a"].format(D=self.location.first_name,E=offset_loc_name) - + text+=", dir:"+str(self.tmc_dir) #LocCode: RefLine: RoadNr #A #LocCode:RefLine:Name2 diff --git a/python/tmc_parser.py b/python/tmc_parser.py index 39dd656..3d70cbc 100644 --- a/python/tmc_parser.py +++ b/python/tmc_parser.py @@ -271,7 +271,7 @@ class tmc_parser_Widget(QtGui.QWidget): ef=unicode(self.event_filter.text().toUtf8(), encoding="UTF-8").lower() lf=unicode(self.location_filter.text().toUtf8(), encoding="UTF-8").lower() filters=[{"type":"location", "str":lf},{"type":"event", "str":ef}] - if tmc_dict.matchFilter(tmc_msg,filters): + if tmc_dict.matchFilter(tmc_msg,self.showInvalid,filters): print_dbg("a",end="") self.logOutput.append(Qt.QString.fromUtf8(tmc_msg.log_string())) print_dbg("a",end="") @@ -285,8 +285,10 @@ class tmc_parser_Widget(QtGui.QWidget): print_dbg("s",end="") self.logMutex.release(1) print_dbg("\tdone") + def filterChanged(self): self.logMutex.acquire(1) + #code.interact(local=locals()) print_dbg("filterChanged:got mutex,",end="") ef="" lf="" @@ -301,10 +303,13 @@ class tmc_parser_Widget(QtGui.QWidget): self.logOutput.clear() print_dbg("cleared,",end="") filters=[{"type":"location", "str":lf},{"type":"event", "str":ef}] - self.logOutput.append(Qt.QString.fromUtf8(self.parser.tmc_messages.getLogString(filters))) + #print("getting logstring with filters:%s, showInvalid:%i"%(filters,self.showInvalid)) + self.logOutput.append(Qt.QString.fromUtf8(self.parser.tmc_messages.getLogString(self.showInvalid,filters))) print_dbg("appended,",end="") self.logMutex.release(1) print_dbg("done") + def update_showInvalid(self): + self.showInvalid=self.GUI_showInvalid.isChecked() def __init__(self, parser,maxheight): QtGui.QWidget.__init__(self) layout = Qt.QVBoxLayout() @@ -316,13 +321,18 @@ class tmc_parser_Widget(QtGui.QWidget): self.location_filter=QtGui.QLineEdit(u"Baden-Württemberg") self.event_filter.returnPressed.connect(self.filterChanged) self.location_filter.returnPressed.connect(self.filterChanged) - + self.showInvalid=False + self.GUI_showInvalid=QtGui.QCheckBox() + self.GUI_showInvalid.setChecked(self.showInvalid) + #self.showInvalid.stateChanged.connect(lambda:self.btnstate(self.b1)) + self.GUI_showInvalid.stateChanged.connect(self.update_showInvalid) filter_layout = Qt.QHBoxLayout() filter_layout.addWidget(QtGui.QLabel("event filter:")) filter_layout.addWidget(self.event_filter) filter_layout.addWidget(QtGui.QLabel("location filter:")) filter_layout.addWidget(self.location_filter) - + filter_layout.addWidget(QtGui.QLabel("showInvalid:")) + filter_layout.addWidget(self.GUI_showInvalid) layout.addLayout(filter_layout) layout.addWidget(self.tmc_message_label) self.logOutput = Qt.QTextEdit() From ec3723ed9fa217d2c2034a18030b0a48f8bd7952 Mon Sep 17 00:00:00 2001 From: csrichter Date: Tue, 2 May 2017 15:01:54 +0200 Subject: [PATCH 3/7] added debug info (weakout_counter) --- lib/sync_decim_impl.cc | 32 ++++++++++++++++++++++---------- lib/sync_decim_impl.h | 2 ++ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/lib/sync_decim_impl.cc b/lib/sync_decim_impl.cc index f46a837..df8ae81 100644 --- a/lib/sync_decim_impl.cc +++ b/lib/sync_decim_impl.cc @@ -57,6 +57,7 @@ namespace gr { last_input=0; mode=COPY; dosync_counter=0; + weakout_counter=0; } /* * Our virtual destructor. @@ -73,10 +74,13 @@ namespace gr { pmt::pmt_t meta = pmt::car(pdu); // meta declares type 0:RDS, 1:sync/nosync pmt::pmt_t sync = pmt::cdr(pdu); if(1L==pmt::to_long(meta) && pmt::eqv(sync,pmt::PMT_F)){ - lout<< "entered nosync"<1000){ + outbit_counter=0; + weakout_counter=0; + lout<<"mode: "<=SYNC_COUNTER_MAX){ dosync_counter=0; float out_noskip; float out_skip; @@ -132,23 +145,22 @@ namespace gr { //lout<<"\t,out_skip:"<6){ + if (skip_is_better_counter>3){//2017-05-02 lowered from 6 mode=SKIP; lout<<"switched to skip"<< std::endl; } - else if (skip_is_better_counter<-6){ + else if (skip_is_better_counter<-3){ mode=NOSKIP; lout<<"switched to noskip"<< std::endl; } } - else if(mode==COPY){ + } + else if(mode==COPY){ dosync_counter++; - } } - - // Tell runtime system how many output items we produced. + outbit_counter+=noutput_items; return noutput_items; }/*end of work*/ } /* namespace multirds */ diff --git a/lib/sync_decim_impl.h b/lib/sync_decim_impl.h index 52cadff..1704ec8 100644 --- a/lib/sync_decim_impl.h +++ b/lib/sync_decim_impl.h @@ -47,6 +47,8 @@ namespace gr { unsigned int skip; void parse_ctrl_msg(pmt::pmt_t pdu); int dosync_counter; + int weakout_counter; + int outbit_counter; }; } // namespace multirds From 1f956f56bde94115e2cd6c384633efcc56150d73 Mon Sep 17 00:00:00 2001 From: csrichter Date: Tue, 2 May 2017 15:03:11 +0200 Subject: [PATCH 4/7] added calcSyndrome_vec from redsea, TODO: compare with "calc_syndrome" which is faster and if they have the same result --- lib/rds_decoder_redsea_impl.cc | 35 +++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/lib/rds_decoder_redsea_impl.cc b/lib/rds_decoder_redsea_impl.cc index e6d0179..384da0a 100644 --- a/lib/rds_decoder_redsea_impl.cc +++ b/lib/rds_decoder_redsea_impl.cc @@ -120,6 +120,30 @@ uint16_t rds_decoder_redsea_impl::calc_syndrome(uint32_t message,uint8_t mlen) { } //redsea stuff: +// Section B.1.1: '-- calculated by the modulo-two addition of all the rows of +// the -- matrix for which the corresponding coefficient in the -- vector is 1.' +uint32_t matrixMultiply(uint32_t vec, const std::vector& matrix) { + uint32_t result = 0; + + for (size_t k=0; k < matrix.size(); k++) + if ((vec >> k) & 0x01) + result ^= matrix[matrix.size() - 1 - k]; + + return result; +} + +// Section B.2.1: 'The calculation of the syndromes -- can easily be done by +// multiplying each word with the parity matrix H.' +uint32_t calcSyndrome_vec(uint32_t vec) { + static const std::vector parity_check_matrix({ + 0x200, 0x100, 0x080, 0x040, 0x020, 0x010, 0x008, 0x004, + 0x002, 0x001, 0x2dc, 0x16e, 0x0b7, 0x287, 0x39f, 0x313, + 0x355, 0x376, 0x1bb, 0x201, 0x3dc, + 0x1ee, 0x0f7, 0x2a7, 0x38f, 0x31b + }); + + return matrixMultiply(vec, parity_check_matrix); +} const unsigned kBitmask16 = 0x000FFFF; const unsigned kBitmask26 = 0x3FFFFFF; const unsigned kBitmask28 = 0xFFFFFFF; @@ -144,8 +168,8 @@ static const char * const offset_name[]={"A","B","C","D","c"};*/ for (uint32_t e : {0x1,0x3}) {//fix up to 2-bit burst errors (as book says) for (int shift=0; shift < 26; shift++) { uint32_t errvec = ((e << shift) & kBitmask26); - //uint16_t sy = calc_syndrome(errvec ^ offset_word[offset_num],26); uint32_t sy = calc_syndrome(errvec ^ offset_word[offset_num],26);//why uint32 and not uint16 as everywhere else??? + //uint32_t sy = calcSyndrome_vec(errvec ^ offset_word[offset_num]); result.insert({{sy, offset_name[offset_num]}, errvec}); //dout << "adding sy:"<(errvec) < 0) { - uint32_t err = kErrorLookup.at({(uint16_t)syndrome, (char)offset}); + if (kErrorLookup.count({syndrome, offset}) > 0) { + uint32_t err = kErrorLookup.at({syndrome, offset}); //dout << "correcting"< Date: Tue, 2 May 2017 15:03:23 +0200 Subject: [PATCH 5/7] updated flowgraphs --- apps/fft-multi-decoder_fixed_hackrf.grc | 6 +++--- apps/ifft-RDS-decoder_hier-block.grc | 10 +++++----- apps/read_fmdec.grc | 4 ++-- apps/read_sync_decim.grc | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/apps/fft-multi-decoder_fixed_hackrf.grc b/apps/fft-multi-decoder_fixed_hackrf.grc index 10fa067..dbf98ff 100644 --- a/apps/fft-multi-decoder_fixed_hackrf.grc +++ b/apps/fft-multi-decoder_fixed_hackrf.grc @@ -2516,7 +2516,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in log - False + True loop_bw @@ -3170,7 +3170,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in writeDB - True + False @@ -3244,7 +3244,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in _enabled - True + 1 _coordinate diff --git a/apps/ifft-RDS-decoder_hier-block.grc b/apps/ifft-RDS-decoder_hier-block.grc index 2872749..98223b0 100644 --- a/apps/ifft-RDS-decoder_hier-block.grc +++ b/apps/ifft-RDS-decoder_hier-block.grc @@ -533,11 +533,11 @@ _enabled - 0 + 1 file - "/tmp/psk_out_2375_"+str(cutpoint) + "/tmp/cr/psk_out_2375_"+str(cutpoint) _coordinate @@ -584,7 +584,7 @@ _enabled - 0 + 1 file @@ -2339,7 +2339,7 @@ debug - True + False _enabled @@ -2402,7 +2402,7 @@ log - log + False maxoutbuf diff --git a/apps/read_fmdec.grc b/apps/read_fmdec.grc index 4186abc..44113df 100644 --- a/apps/read_fmdec.grc +++ b/apps/read_fmdec.grc @@ -1196,7 +1196,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in log - False + True maxoutbuf @@ -1235,7 +1235,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in _enabled - True + 0 _coordinate diff --git a/apps/read_sync_decim.grc b/apps/read_sync_decim.grc index ace5beb..c61871c 100644 --- a/apps/read_sync_decim.grc +++ b/apps/read_sync_decim.grc @@ -800,7 +800,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in _enabled - True + 1 _coordinate From 6a95b80ac35079c294ce6a30865ea7ad56f19187 Mon Sep 17 00:00:00 2001 From: csrichter Date: Tue, 2 May 2017 15:28:03 +0200 Subject: [PATCH 6/7] fixed loopBW --- apps/read_fmdec.grc | 187 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 183 insertions(+), 4 deletions(-) diff --git a/apps/read_fmdec.grc b/apps/read_fmdec.grc index 44113df..30a4c4c 100644 --- a/apps/read_fmdec.grc +++ b/apps/read_fmdec.grc @@ -162,6 +162,33 @@ 240000 + + variable + + comment + + + + _enabled + True + + + _coordinate + (151, 706) + + + _rotation + 0 + + + id + fft19k_len + + + value + 2048 + + variable_qtgui_range @@ -535,7 +562,7 @@ file - /user/wire2/richter/fm_dec_rec/fm_dec_240k_597.333333333 + /tmp/cr/rds_rec_all_1500news/fm_dec_240k_5888.0 _coordinate @@ -798,7 +825,7 @@ w - loop_bw + 3.14/loop_bw M @@ -1046,6 +1073,140 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in fcc + + logpwrfft_x + + avg_alpha + 1.0 + + + average + False + + + alias + + + + comment + + + + affinity + + + + _enabled + True + + + fft_size + fft19k_len + + + frame_rate + 30 + + + _coordinate + (231, 519) + + + _rotation + 0 + + + id + logpwrfft_x_0 + + + type + float + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + ref_scale + 2 + + + sample_rate + baseband_rate + + + + multirds_pilot_SNR + + alias + + + + comment + + + + affinity + + + + debug + False + + + _enabled + 1 + + + _coordinate + (559, 543) + + + _rotation + 0 + + + id + multirds_pilot_SNR_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + carrier_freq + 19e3 + + + fft_len + fft19k_len + + + gap_width + 4e3 + + + msg_adr + 3 + + + samp_rate + baseband_rate + + + update_period + 0.4 + + multirds_rds_decoder_redsea @@ -1082,7 +1243,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in log - False + True maxoutbuf @@ -1196,7 +1357,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in log - True + False maxoutbuf @@ -2142,6 +2303,12 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in 0 0 + + blocks_throttle_0 + logpwrfft_x_0 + 0 + 0 + blocks_throttle_0 qtgui_freq_sink_x_0_0_1_2 @@ -2190,6 +2357,18 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in 0 0 + + logpwrfft_x_0 + multirds_pilot_SNR_0 + 0 + 0 + + + multirds_pilot_SNR_0 + multirds_rds_parser_table_qt_0 + out + in + multirds_rds_decoder_redsea_0 multirds_rds_parser_table_qt_0 From 19f170f2e4a6a8bddc322fd4189951bd8c76a229 Mon Sep 17 00:00:00 2001 From: csrichter Date: Tue, 2 May 2017 16:27:45 +0200 Subject: [PATCH 7/7] updated flowgraphs --- apps/ifft-RDS-decoder_hier-block.grc | 2 +- apps/read_sync_decim.grc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/ifft-RDS-decoder_hier-block.grc b/apps/ifft-RDS-decoder_hier-block.grc index 98223b0..89b3354 100644 --- a/apps/ifft-RDS-decoder_hier-block.grc +++ b/apps/ifft-RDS-decoder_hier-block.grc @@ -482,7 +482,7 @@ _enabled - 1 + 0 file diff --git a/apps/read_sync_decim.grc b/apps/read_sync_decim.grc index c61871c..57b5d2f 100644 --- a/apps/read_sync_decim.grc +++ b/apps/read_sync_decim.grc @@ -344,7 +344,7 @@ file - /tmp/cr/rds-rec_sync-decim_170324_weekend/sync_decim_out_11861 + /tmp/cr/rds_rec_all_1500news/sync_decim_out_5888.0 _coordinate