Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用GNURadio处理Python块中样本的输入和输出数量?_Python_Gnuradio - Fatal编程技术网

如何使用GNURadio处理Python块中样本的输入和输出数量?

如何使用GNURadio处理Python块中样本的输入和输出数量?,python,gnuradio,Python,Gnuradio,我正在用Python构建一个GNURadio块,用根升余弦信号卷积输入信号。我注意到发送到函数general_work的输入信号有许多不同的样本,这对于我来说非常烦人。事实上,对于样本数为n_的输入信号和样本数为n的根升余弦滤波器,输出信号的长度为n_in+n-1(卷积信号的特性) 我不能使用插值块,因为我不知道n_in,所以我不知道插值因子(n_in+n-1)/n_in的值。 因此,由于提供了gr_modtool,我正在使用此表单的常规块: import numpy as np from gn

我正在用Python构建一个GNURadio块,用根升余弦信号卷积输入信号。我注意到发送到函数general_work的输入信号有许多不同的样本,这对于我来说非常烦人。事实上,对于样本数为n_的输入信号和样本数为n的根升余弦滤波器,输出信号的长度为n_in+n-1(卷积信号的特性)

我不能使用插值块,因为我不知道n_in,所以我不知道插值因子(n_in+n-1)/n_in的值。 因此,由于提供了gr_modtool,我正在使用此表单的常规块:

import numpy as np
from gnuradio import gr

class Convolve(gr.basic_block):
"""
docstring for block Convolve
"""
n=45 #Number of samples in the Root-raised cosine signal
def __init__(self):
    gr.basic_block.__init__(self,
        name="Convolve",
        in_sig=[np.complex64],
        out_sig=[np.complex64])

def forecast(self, noutput_items, ninput_items_required):
    #setup size of input_items[i] for work call
    print("---------- Forecast function --------------")
    n_in = noutput_items-self.n+1
    if n_in<=0:
        ninput_items_required[0]=1
    else:
        ninput_items_required[0]=n_in
    print("n_in : ", n_in)
    print("ninput_items_required[0] : ", ninput_items_required[0])
    print("noutput_items : ", noutput_items)

def general_work(self, input_items, output_items):
    print("---------- General work function ----------------")
    output_items[0][:] = 1 #Output is not important for the example
    print("input_items[0] : ", len(input_items[0]))
    print("output_items[0] : ", len(output_items[0]))
    self.consume(0, len(input_items[0]))
    #self.consume_each(len(input_items[0]))
    return len(output_items[0])
看起来函数Forecast被多次调用以测试输入和输出长度的不同值。它似乎工作正常,但在调用通用功函数之后,输入和输出的长度在此示例中是相同的。。。这与使用Forecast函数获得的值不一致

---------- General work function ----------------
('input_items[0] : ', 4096)
('output_items[0] : ', 4096)
有人能解释一下为什么在一般功函数中有相同长度的信号吗? 如何更轻松地处理输入和输出信号的长度? 是否有更合适的方法来处理n_in为负值的情况,而不是这种方式:

    [...]
    if n_in<=0:
        ninput_items_required[0]=1
    else:
        ninput_items_required[0]=n_in
    [...]
[…]
如果你不在
    [...]
    if n_in<=0:
        ninput_items_required[0]=1
    else:
        ninput_items_required[0]=n_in
    [...]