[英]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
,或interpolator
或decimator
)。 然后,您的預測應該始終明確表明您需要 1000 件商品才能生產任何東西。 然后,在您的general_work
,檢查您是否至少有 1000 件物品,是否消耗了 1000 件物品,而不是您擁有的全部物品。 看起來你好像不太明白consume()
和produce()
做什么的!
你可以做的是使用set_output_multiple
和類似的函數來限制你的數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.