GNU Radio 缓冲区大小

GNU Radio buffer size

如何在 GNU Radio 中为 OOT python 块设置自定义缓冲区大小?我的目标是输入参数为 input_buffer_len 的块,块的 geeral_work() 函数恰好适用于 input_buffer_len 个样本。 input_buffer_len = 1360
到目前为止我的代码:

import numpy as np
from gnuradio import gr
   def __init(self, input_buffer_len):
      gr.basic_block.__init__(self,
         name="sync_test",
         in_sig=[np.uint8],
         out_sig=[np.uint8])
      self.input_buffer_len = input_buffer_len

   def forecast(self, noutput_items, ninput_items_required):
      print("FORECAST START")
      ninput_items_required[0] = self.input_buffer_len
      print("len(ninput_items_required),noutput_items",len(ninput_items_required),noutput_items)
      print("FORECAST END")

   def general_work(self, input_items, output_items):
      print("GENERAL WORK START")
      print("len(input_items)", len(input_items[0]))
      print("len(output_items)", len(output_items[0]))
      output_items[0][0:self.input_buffer_len] = input_items[0][0:self.input_buffer_len]
      self.produce(0, self.input_buffer_len)
      self.consume(0, self.input_buffer_len)
      print("GENERAL WORK END")
      return 0

输出:

FORECAST START
len(ninput_items_required),noutput_items 1 32768
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 16384
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 8192
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 4096
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 2048
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 1024
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 512
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 256
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 128
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 64
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 32
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 16
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 8
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 4
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 2
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 1
FORECAST END
FORECAST START
len(ninput_items_required),noutput_items 1 32768
FORECAST END
GENERAL WORK START
len(input_items) 32895
len(output_items) 32768
GENERAL WORK END
FORECAST START
len(ninput_items_required),noutput_items 1 32768
FORECAST END
GENERAL WORK START
len(input_items) 30175
len(output_items) 32768
GENERAL WORK END
FORECAST START
len(ninput_items_required),noutput_items 1 32768
FORECAST END
GENERAL WORK START
len(input_items) 27455
len(output_items) 32768
GENERAL WORK END
FORECAST START
len(ninput_items_required),noutput_items 1 32768
FORECAST END
GENERAL WORK START
len(input_items) 26095
len(output_items) 32768
GENERAL WORK END
FORECAST START
len(ninput_items_required),noutput_items 1 32768
FORECAST END
GENERAL WORK START
len(input_items) 24735
len(output_items) 32768
GENERAL WORK END
...
GENERAL WORK END

看起来 input_items 每次 general_work() 调用都会减少 input_buffer_len 而 output_items 保持在 32768,这是否意味着 GNU Radio 可以与 input_buffer_len elements every general work()?还是我误会了什么?我正在使用 GNU Radio V3.8.2

block's geeral_work() function works with exactly input_buffer_len sample

那是不可能的。这是 GNU Radio 工作原理的核心。此外,这不是必需的:比如说,你的块总是需要 1000 件物品并产生 900 到 2000 件之间的物品(如果这个配给很容易,你就不会使用带有 general_work 的通用块,而是 sync_block,或 interpolator,或 decimator)。然后,您的预测应该始终清楚地表明您需要 1000 件物品才能生产任何东西。然后,在你的 general_work 中,检查你是否至少拥有 1000 件物品,消耗恰好 1000 件物品,而不是你拥有的全部物品。看起来你有点不太明白 consume()produce() 是做什么的!

你可以做的是使用 set_output_multiple 和类似的功能来限制你的号码。