From affb5c7e4b84cde42ad3704043a11f0f7b2a0558 Mon Sep 17 00:00:00 2001 From: Piotr Krysik <ptrkrysik@gmail.com> Date: Fri, 4 May 2018 07:49:36 +0200 Subject: uhd: fix freq_hopping example - missing 'time' Freq_hopping example wasn't working correctly and symptom of it was that frequency changes were happening in random moments. The reason was that time of execution of tune commands wasn't specified and so they were executed as non-timed commands. In case of of full tuning (dsp_tuning == false) more changes were needed. 'tx_freq' tag can't be executed as a timed command at all, so I changed it to 'tx_command' with 'freq' element and also added missing 'time'. I found out about the issue but credit of fixing it by adding 'time' element to 'tx_command' tag value goes to Sylvain Munaut, as this change was suggested by him. --- gr-uhd/examples/python/freq_hopping.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'gr-uhd/examples/python') diff --git a/gr-uhd/examples/python/freq_hopping.py b/gr-uhd/examples/python/freq_hopping.py index 1d034c1862..56cedf58ab 100755 --- a/gr-uhd/examples/python/freq_hopping.py +++ b/gr-uhd/examples/python/freq_hopping.py @@ -128,6 +128,10 @@ class FrequencyHopperSrc(gr.hier_block2): gain_tag.value = pmt.to_pmt({'gain': tx_gain}) tag_list = [gain_tag,] for i in range(len(self.hop_sequence)): + time = pmt.cons( + pmt.from_uint64(int(base_time + i * hop_time+0.01)), + pmt.from_double((base_time + i * hop_time+0.01) % 1), + ) tune_tag = gr.tag_t() tune_tag.offset = i * burst_length # TODO dsp_tuning should also be able to do post_tuning @@ -136,9 +140,11 @@ class FrequencyHopperSrc(gr.hier_block2): if dsp_tuning: tune_tag.key = pmt.string_to_symbol('tx_command') tune_tag.value = pmt.to_pmt({'lo_freq': base_freq, 'dsp_freq': base_freq - self.hop_sequence[i]}) + tune_tag.value = pmt.dict_add(tune_tag.value, pmt.intern("time"),time) else: - tune_tag.key = pmt.string_to_symbol('tx_freq') - tune_tag.value = pmt.to_pmt(self.hop_sequence[i]) + tune_tag.key = pmt.string_to_symbol('tx_command') + tune_tag.value = pmt.to_pmt({'freq': self.hop_sequence[i]}) + tune_tag.value = pmt.dict_add(tune_tag.value, pmt.intern('time'), time) tag_list.append(tune_tag) length_tag = gr.tag_t() length_tag.offset = i * burst_length @@ -149,8 +155,8 @@ class FrequencyHopperSrc(gr.hier_block2): time_tag.offset = i * burst_length time_tag.key = pmt.string_to_symbol('tx_time') time_tag.value = pmt.make_tuple( - pmt.from_uint64(int(base_time + i * hop_time)), - pmt.from_double((base_time + i * hop_time) % 1), + pmt.car(time), + pmt.cdr(time) ) tag_list.append(time_tag) tag_source = blocks.vector_source_c((1.0,) * n_samples_total, repeat=False, tags=tag_list) @@ -239,4 +245,3 @@ if __name__ == '__main__': main() except KeyboardInterrupt: pass - -- cgit v1.2.3