簡體   English   中英

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 每次通用 work() 都使用 input_buffer_len 元素? 還是我誤解了什么? 我使用 GNU Radio V3.8.2

塊的 geeral_work() 函數與 input_buffer_len 樣本完全一致

這不可能。 這是 GNU Radio 工作方式的核心。 此外,這是沒有必要的:喂,你的塊總是需要1000個項目,產生900個2000項之間的東西(如果這個比值是容易的,你不會使用與一般的塊general_work ,但sync_block ,或interpolatordecimator )。 然后,您的預測應該始終明確表明您需要 1000 件商品才能生產任何東西。 然后,在您的general_work ,檢查您是否至少有 1000 件物品,是否消耗了 1000 件物品,而不是您擁有的全部物品。 看起來你好像不太明白consume()produce()做什么的!

你可以做的是使用set_output_multiple和類似的函數來限制你的數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM