From 43d0250f007bfae031b23b2d3ea781fc1986f34f Mon Sep 17 00:00:00 2001 From: csrichter Date: Mon, 13 Mar 2017 20:42:53 +0100 Subject: [PATCH] home 2017-03-10 prophunt-tag --- grc/CMakeLists.txt | 3 +- grc/crfa_diff_add_sync_decim.xml | 60 ------------ include/crfa/CMakeLists.txt | 3 +- include/crfa/diff_add_sync_decim.h | 56 ------------ lib/CMakeLists.txt | 3 +- lib/diff_add_sync_decim_impl.cc | 141 ----------------------------- lib/diff_add_sync_decim_impl.h | 54 ----------- python/rds_parser_table_qt.py | 71 +++++---------- swig/crfa_swig.i | 3 - 9 files changed, 24 insertions(+), 370 deletions(-) delete mode 100644 grc/crfa_diff_add_sync_decim.xml delete mode 100644 include/crfa/diff_add_sync_decim.h delete mode 100644 lib/diff_add_sync_decim_impl.cc delete mode 100644 lib/diff_add_sync_decim_impl.h diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt index 976dd6b..203134f 100644 --- a/grc/CMakeLists.txt +++ b/grc/CMakeLists.txt @@ -26,6 +26,5 @@ install(FILES crfa_smooth_vectors.xml crfa_stream_selector.xml crfa_vector_cutter.xml - crfa_decoder_compare.xml - crfa_diff_add_sync_decim.xml DESTINATION share/gnuradio/grc/blocks + crfa_decoder_compare.xml DESTINATION share/gnuradio/grc/blocks ) diff --git a/grc/crfa_diff_add_sync_decim.xml b/grc/crfa_diff_add_sync_decim.xml deleted file mode 100644 index dc61390..0000000 --- a/grc/crfa_diff_add_sync_decim.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - diff_add_sync_decim - crfa_diff_add_sync_decim - [crfa] - import crfa - crfa.diff_add_sync_decim($threshold,$max_ratio_below_threshold, $log) - - - Log - log - False - bool - - - - - Threshold - threshold - 0.5 - float - - - max_ratio_below_threshold - max_ratio_below_threshold - 0.8 - float - - 0 < $max_ratio_below_threshold < 1 - - - - in - float - - - - - out - float - - diff --git a/include/crfa/CMakeLists.txt b/include/crfa/CMakeLists.txt index 718cea8..5743aa6 100644 --- a/include/crfa/CMakeLists.txt +++ b/include/crfa/CMakeLists.txt @@ -22,6 +22,5 @@ ######################################################################## install(FILES api.h - rds_decoder.h - diff_add_sync_decim.h DESTINATION include/crfa + rds_decoder.h DESTINATION include/crfa ) diff --git a/include/crfa/diff_add_sync_decim.h b/include/crfa/diff_add_sync_decim.h deleted file mode 100644 index a3bb88b..0000000 --- a/include/crfa/diff_add_sync_decim.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2017 <+YOU OR YOUR COMPANY+>. - * - * This is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * This software 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - - -#ifndef INCLUDED_CRFA_DIFF_ADD_SYNC_DECIM_H -#define INCLUDED_CRFA_DIFF_ADD_SYNC_DECIM_H - -#include -#include - -namespace gr { - namespace crfa { - - /*! - * \brief <+description of block+> - * \ingroup crfa - * - */ - class CRFA_API diff_add_sync_decim : virtual public gr::sync_decimator - { - public: - typedef boost::shared_ptr sptr; - - /*! - * \brief Return a shared_ptr to a new instance of crfa::diff_add_sync_decim. - * - * To avoid accidental use of raw pointers, crfa::diff_add_sync_decim's - * constructor is in a private implementation - * class. crfa::diff_add_sync_decim::make is the public interface for - * creating new instances. - */ - static sptr make(float threshold,float max_ratio_below_threshold,bool log); - }; - - } // namespace crfa -} // namespace gr - -#endif /* INCLUDED_CRFA_DIFF_ADD_SYNC_DECIM_H */ - diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 929fa93..385b6c2 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -25,8 +25,7 @@ include(GrPlatform) #define LIB_SUFFIX include_directories(${Boost_INCLUDE_DIR}) link_directories(${Boost_LIBRARY_DIRS}) list(APPEND crfa_sources - rds_decoder_impl.cc - diff_add_sync_decim_impl.cc ) + rds_decoder_impl.cc ) set(crfa_sources "${crfa_sources}" PARENT_SCOPE) if(NOT crfa_sources) diff --git a/lib/diff_add_sync_decim_impl.cc b/lib/diff_add_sync_decim_impl.cc deleted file mode 100644 index 0d5de6e..0000000 --- a/lib/diff_add_sync_decim_impl.cc +++ /dev/null @@ -1,141 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2017 <+YOU OR YOUR COMPANY+>. - * - * This is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * This software 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include "diff_add_sync_decim_impl.h" -#define DECIM 2 -#define lout log && std::cout - -namespace gr { - namespace crfa { - - diff_add_sync_decim::sptr - diff_add_sync_decim::make(float threshold,float max_ratio_below_threshold,bool log) - { - return gnuradio::get_initial_sptr - (new diff_add_sync_decim_impl(threshold,max_ratio_below_threshold,log)); - } - - /* - * The private constructor - */ - diff_add_sync_decim_impl::diff_add_sync_decim_impl(float threshold,float max_ratio_below_threshold,bool log) - : gr::sync_decimator("diff_add_sync_decim", - gr::io_signature::make(1, 1, sizeof(float)), - gr::io_signature::make(1, 1, sizeof(float)), DECIM), - threshold(threshold), - max_ratio_below_threshold(max_ratio_below_threshold), - log(log) - - { - //nothing to do? - - //init persistant vars - last_input=0; - skip=0; - } - - /* - * Our virtual destructor. - */ - diff_add_sync_decim_impl::~diff_add_sync_decim_impl() - { - } - - int - diff_add_sync_decim_impl::work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) - { - const float *in = (const float *) input_items[0]; - float *out = (float *) output_items[0]; - int values_below_threshold=0; - int values_below_threshold_skip=0; - int values_below_threshold_noskip=0; - float out_noskip; - float out_skip; - for (int i = 0; i < noutput_items; i++) { - //out[i]=in[DECIM*i];// keep 1 in DECIM - if(i==0){ - out_skip=last_input-in[DECIM*i];} - else{ - out_skip=in[DECIM*i-1]-in[DECIM*i];} - - out_noskip=in[DECIM*i]-in[DECIM*i+1]; - - switch(skip){ - case 0: - out[i]=out_noskip; - break; - case 1: - out[i]=out_skip; - break; - default: - out[i]=out_noskip; - break; - } - - if(abs(out[i])0.5) - if ((float)values_below_threshold / (float)noutput_items >max_ratio_below_threshold && values_below_threshold>8)//2/2(=100%) below threshold is not significant - { - //lout<<"resync:"<9){ -// if(values_below_threshold_noskip>values_below_threshold_skip){ -// skip=1; -// } -// else{ -// skip=0; -// } -// } - //lout << "noutput_items:"<< noutput_items <<", threshold:"<. - * - * This is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * This software 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef INCLUDED_CRFA_DIFF_ADD_SYNC_DECIM_IMPL_H -#define INCLUDED_CRFA_DIFF_ADD_SYNC_DECIM_IMPL_H - -#include - -namespace gr { - namespace crfa { - - class diff_add_sync_decim_impl : public diff_add_sync_decim - { - private: - // Nothing to declare in this block. - - public: - diff_add_sync_decim_impl(float threshold,float max_ratio_below_threshold,bool log); - ~diff_add_sync_decim_impl(); - - // Where all the action really happens - int work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - bool log; - float threshold; - float max_ratio_below_threshold; - float last_input; - //enum { SKIP, NOSKIP } d_state; - unsigned int skip; - }; - - } // namespace crfa -} // namespace gr - -#endif /* INCLUDED_CRFA_DIFF_ADD_SYNC_DECIM_IMPL_H */ - diff --git a/python/rds_parser_table_qt.py b/python/rds_parser_table_qt.py index 4f0b7a7..1ace89a 100644 --- a/python/rds_parser_table_qt.py +++ b/python/rds_parser_table_qt.py @@ -508,8 +508,8 @@ class tmc_message: try: msg_ltn=tableobj.RDS_data[PI]["AID_list"][52550]["LTN"] table_ltn=1#german table - if msg_ltn != table_ltn and tableobj.debug and False:#disabled, spams log - print("msg_ltn:%i does not match expected table (1) on station: %s"%(msg_ltn,self.psn)) + if msg_ltn != table_ltn and tableobj.debug: + 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") @@ -648,14 +648,6 @@ class mgm_tag:#mgm=multi group message ,5:" Equivalent of diversion bit set to '1'." ,6:" Increase the number of steps in the problem extent by 8." ,7:" Increase the number of steps in the problem extent by 16."} - control_codes_short={0:"urgency+=1" - ,1:" urgency-=1" - ,2:" directionality changed" - ,3:" dynamic/longer-lasting changed" - ,4:" spoken/unspoken duration changed" - ,5:" diversion=1" - ,6:" extent+=8" - ,7:" extent+=16"} @staticmethod def decode_time_date(raw):#label7/8 raw to datestring if raw<=95: @@ -688,7 +680,7 @@ class mgm_tag:#mgm=multi group message if(self.label==0): return "duration: %i"%self.data.uint elif(self.label==1): - return "control code %i: %s"%(self.data.uint,mgm_tag.control_codes_short[self.data.uint]) + return "control code: %i"%self.data.uint elif(self.label==2): return "length affected: %i km"%self.length_to_km(self.data.uint) elif(self.label==3): @@ -1143,8 +1135,7 @@ class rds_parser_table_qt(gr.sync_block):#START paging=array[4]&0xf extended_country_code=array[5] self.RDS_data[PI]["ECC"]=extended_country_code - if self.debug: - print("PI:%s PSN:%s,ECC:%s"%(PI,self.RDS_data[PI]["PSN"],hex(extended_country_code))) + #print("ECC:%s"%hex(extended_country_code)) elif variant==1: TMC_info=SLC elif variant==2: @@ -1152,7 +1143,7 @@ class rds_parser_table_qt(gr.sync_block):#START elif variant==3: language_codes=SLC if self.debug: - print("PI:%s PSN:%s,language_codes:%s"%(PI,self.RDS_data[PI]["PSN"],hex(language_codes))) + print("language_codes:%s"%hex(language_codes)) elif variant==6: #for use by broadcasters if self.debug: @@ -1223,7 +1214,7 @@ class rds_parser_table_qt(gr.sync_block):#START textcolor=""#use default color (white if background is black) l=list(self.RDS_data[PI]["RT_"+str(ab_flag)]["RT"]) rt="".join(l[0:text_end])#remove underscores(default symbol) after line end marker - if not self.RDS_data[PI]["internals"]["last_valid_rt"]==rt:#ignore duplicates #TODO add 2nd order duplicates ABAB + if not self.RDS_data[PI]["internals"]["last_valid_rt"]==rt:#ignore duplicates self.RDS_data[PI]["internals"]["RT_history"].append(l) if len(self.RDS_data[PI]["internals"]["RT_history"])>10:#only store last 10 RTs self.RDS_data[PI]["internals"]["RT_history"].pop(0) @@ -1263,31 +1254,20 @@ class rds_parser_table_qt(gr.sync_block):#START self.RDS_data[PI]["AID_list"][AID]["groupType"]=app_group self.RDS_data[PI]["AID_list"][AID]["app_name"]=app_name self.RDS_data[PI]["AID_list"][AID]["app_data"]=app_data - if AID==52550:#TMC alert-c initialize - self.RDS_data[PI]["AID_list"][AID]["provider name"]="________" if self.log: - print("new ODA: AID:%i, name:'%s', app_group:%s, station:%s" %(AID,app_name,app_group,PI)) + print("new ODA: AID:%i, name:%s, app_group:%s, station:%s" %(AID,app_name,app_group,PI)) #decode 3A group of TMC - if AID==52550:#TMC alert-c (continuously update) - variant=app_data>>14 + if AID==52550:#TMC alert-c + variant=app_data>>14 if variant==0: - self.RDS_data[PI]["AID_list"][AID]["LTN"]=(app_data>>6)&0x3f#location table number (6 bits) + self.RDS_data[PI]["AID_list"][AID]["LTN"]=(app_data>>6)&0x3f#location table number self.RDS_data[PI]["AID_list"][AID]["AFI"]=(app_data>>5)&0x1#alternative frequency indicator self.RDS_data[PI]["AID_list"][AID]["M"]=(app_data>>4)&0x1#transmission mode indicator #Message Geographical Scope: - self.RDS_data[PI]["AID_list"][AID]["scope"]="" - if (app_data>>3)&0x1==1: - self.RDS_data[PI]["AID_list"][AID]["scope"]+="I"#international (EUROROAD) - if (app_data>>2)&0x1==1: - self.RDS_data[PI]["AID_list"][AID]["scope"]+="N"#national - if (app_data>>1)&0x1==1: - self.RDS_data[PI]["AID_list"][AID]["scope"]+="R"#regional - if (app_data>>0)&0x1==1: - self.RDS_data[PI]["AID_list"][AID]["scope"]+="U"#urban - #self.RDS_data[PI]["AID_list"][AID]["I"]=(app_data>>3)&0x1#international (EUROROAD) - #self.RDS_data[PI]["AID_list"][AID]["N"]=(app_data>>2)&0x1#national - #self.RDS_data[PI]["AID_list"][AID]["R"]=(app_data>>1)&0x1#regional - #self.RDS_data[PI]["AID_list"][AID]["U"]=(app_data>>0)&0x1#urban + self.RDS_data[PI]["AID_list"][AID]["I"]=(app_data>>3)&0x1#international (EUROROAD) + self.RDS_data[PI]["AID_list"][AID]["N"]=(app_data>>2)&0x1#national + self.RDS_data[PI]["AID_list"][AID]["R"]=(app_data>>1)&0x1#regional + self.RDS_data[PI]["AID_list"][AID]["U"]=(app_data>>0)&0x1#urban elif variant==1: self.RDS_data[PI]["AID_list"][AID]["SID"]=(app_data>>6)&0x3f#service identifier #timing parameters (used to switch away from TMC station without missing messages): @@ -1393,23 +1373,18 @@ class rds_parser_table_qt(gr.sync_block):#START 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])) if self.debug: - print("TMC-info adr:%i (provider name), segment:%s, station:%s"%(adr,segment,self.RDS_data[PI]["PSN"])) - if self.RDS_data[PI]["AID_list"].has_key(52550): - text_list=list(self.RDS_data[PI]["AID_list"][52550]["provider name"]) - seg_adr_start=(adr-4)*4#start of segment - text_list[seg_adr_start:seg_adr_start+4]=segment - self.RDS_data[PI]["AID_list"][52550]["provider name"]="".join(text_list) + 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 if self.debug: - print("TMC-info: TN:%i, station:%s"%(freq_TN,self.RDS_data[PI]["PSN"])) + print("TMC-info: TN:%i"%freq_TN) self.RDS_data[PI]["TMC_TN"]=freq_TN else: if self.debug: - print("alert plus on station %s (%s)"%(PI,self.RDS_data[PI]["PSN"]))#(not seen yet) + print("alert plus")#(not seen yet) - #self.tableobj.RDS_data["D301"]["AID_list"][52550]["provider name"]="test____" + #RadioText+ (grouptype mostly 12A): elif self.RDS_data[PI]["AID_list"].has_key(19415) and self.RDS_data[PI]["AID_list"][19415]["groupType"]==groupType:#RT+ if not self.RDS_data[PI].has_key("RT+"): @@ -1553,14 +1528,12 @@ class rds_parser_table_qt(gr.sync_block):#START #lock in tuned network if freq_TN matches decoder frequency if(self.RDS_data[PI].has_key("tuned_freq") and freq_TN==self.RDS_data[PI]["tuned_freq"]and not self.RDS_data[PI]["AF"].has_key("main")): if self.log: - print("main frequency found in 14A: station:%s, freq:%0.1fM"% (self.RDS_data[PI]["PSN"],freq_TN/1e6)) + print("main frequency found: station:%s, freq:%0.1fM"% (self.RDS_data[PI]["PSN"],freq_TN/1e6)) self.RDS_data[PI]["AF"]["main"]=freq_TN - freq_str="EON_TN:%0.1fM"% (freq_TN/1e6) - self.signals.DataUpdateEvent.emit({'PI':PI,'freq':freq_str}) #lock in ON if TN is locked in if(self.RDS_data[PI]["AF"].has_key("main") and self.RDS_data[PI]["AF"]["main"]==freq_TN and not self.RDS_data[PI_ON]["AF"].has_key("main")): if self.log: - print("mapped frequency found in 14A: station:%s, freq:%0.1fM"% (self.RDS_data[PI_ON]["PSN"],freq_ON/1e6)) + print("mapped frequency found: station:%s, freq:%0.1fM"% (self.RDS_data[PI_ON]["PSN"],freq_ON/1e6)) self.RDS_data[PI_ON]["AF"]["main"]=freq_ON freq_str="EON:%0.1fM"% (freq_ON/1e6) self.signals.DataUpdateEvent.emit({'PI':PI_ON,'freq':freq_str}) @@ -1678,7 +1651,6 @@ class rds_parser_table_qt(gr.sync_block):#START return_string+=alphabet[alnr][index] except KeyError: return_string+="?%02X?"%ord(char) - print("symbol not decoded: "+"?%02X?"%ord(char)+"in string:"+return_string) #charlist[i]='?'#symbol not decoded #TODO pass #return "".join(charlist) @@ -1744,7 +1716,7 @@ class rds_parser_table_qt_Widget(QtGui.QWidget): label_layout.addWidget(self.count_label) layout.addLayout(label_layout) #TODO set different minsize if TMC is shown - self.setMinimumSize(Qt.QSize(500,40*self.tableobj.nPorts)) + 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 ? @@ -1961,7 +1933,6 @@ class rds_parser_table_qt_Widget(QtGui.QWidget): scrollArea.setWidgetResizable(True) scrollArea.setWidget(l) view.layout().addWidget(scrollArea) - view.setWindowTitle(self.tableobj.RDS_data[PI]["PSN"]) view.exec_() def onCLick(self): print("button clicked") diff --git a/swig/crfa_swig.i b/swig/crfa_swig.i index f9e337f..273d991 100644 --- a/swig/crfa_swig.i +++ b/swig/crfa_swig.i @@ -9,10 +9,7 @@ %{ #include "crfa/rds_decoder.h" -#include "crfa/diff_add_sync_decim.h" %} %include "crfa/rds_decoder.h" GR_SWIG_BLOCK_MAGIC2(crfa, rds_decoder); -%include "crfa/diff_add_sync_decim.h" -GR_SWIG_BLOCK_MAGIC2(crfa, diff_add_sync_decim);