GNURadio Утечка памяти при повторных симуляциях - PullRequest
0 голосов
/ 12 февраля 2020

Я использую GNURadio для декодирования большого количества комплексных векторов из 1024 выборок различных схем модуляции. Таким образом, у меня есть для l oop, который запускает gr.top_block.run () на каждой итерации и использует векторный приемник для сбора результатов. Проблема состоит в том, что, поскольку моделирование продолжается, каждое итерация занимает больше времени (например, начинается с 120it / se c, а затем после 5000 итераций замедляется до 10it / se c). Я вижу в диспетчере задач (я на windows), что память увеличивается так ясно, что есть утечка памяти, где каким-то образом не удаляются результаты итераций.

Существует ли явный способ удаления прогонов или это ошибка?

КОД:

код вызова:

for _ in range(10000):
    decode(sig)

декодировать удовольствие c:

def decode(channel_sigs):
    tb = gr.top_block()

    ##################################################
    # Variables
    ##################################################
    nfilts = 32
    sps = 4
    timing_loop_bw = 3 * 6.28 / 100.0  # NOTE: this controls convergence speed!
    constellation_scheme, bps = get_constellation_scheme(scheme)
    rrc_taps = firdes.root_raised_cosine(nfilts, nfilts, 1.0 / float(sps), 0.35, 11 * sps * nfilts)
    phase_bw = 6.28 / 100.0
    eq_gain = 0.01
    arity = 4

    #### Actual blocks
    channel_src = blocks.vector_source_c(channel_sigs, False)
    digital_pfb_clock_sync = digital.pfb_clock_sync_ccf(sps, timing_loop_bw, rrc_taps, nfilts,
                                                        nfilts / 2, 1.5, 1)
    constellation_soft_decoder = digital.constellation_soft_decoder_cf(constellation_scheme)
    binary_slicer = digital.binary_slicer_fb()
    blocks_char_to_float = blocks.char_to_float(1, 1)
    recovered_bits_dst = blocks.vector_sink_f()

    ##################################################
    # Connections
    ##################################################
    tb.connect((channel_src, 0), (digital_pfb_clock_sync, 0))
    tb.connect((digital_pfb_clock_sync, 0), (constellation_soft_decoder, 0))
    tb.connect((constellation_soft_decoder, 0), (binary_slicer, 0))
    tb.connect((binary_slicer, 0), (blocks_char_to_float, 0))
    tb.connect((blocks_char_to_float, 0), (recovered_bits_dst, 0))

    tb.run()

    recovered_bits = np.array(recovered_bits_dst.data())
    return recovered_bits
...