簡體   English   中英

在 GNU Radio 中實現自定義信號源

[英]Implement custom signal source in GNU Radio

我正在嘗試在 GNU Radio 中實現自定義信號源,它必須發出帶通高斯白噪聲,以頻率f為中心,具有兩側帶寬BW ,如圖所示在此處輸入圖像描述

為此,我應該實現一個帶通濾波器並將其應用於高斯隨機變量。 過濾器的 output 讀取

其中抽頭是濾波器系數,並且 是濾波器輸入。 在我的案例中,抽頭是通過使用 GNU Radio 的Band-pass Filter Taps抽頭塊獲得的,輸入設置為隨機高斯變量。

要獲得我的過濾器的 output,我應該寫一個work function 看起來像

def work(self, input_items, output_items):
    samp_rate = self.get_samp_rate()
    f0 = self.get_f0()
    BW = self.get_BW()
    my_BP_filter = filter.fir_filter_fff(
                   1,
                   firdes.band_pass(
                       1,
                       samp_rate,
                       f0 - 0.5*BW,
                       f0 + 0.5*BW,
                       BW*1e-2,
                       firdes.WIN_HAMMING,
                       6.76
                       )
                   )
    taps = my_BP_filter.taps()
    ntaps = len(taps)

    min_array = min(output_items[0], taps, key=len)
    max_array = max(output_items[0], taps, key=len)
    min_len, max_len = len(min_array), len(max_array)

    noise = np.random.normal(loc=0.0, scale=1.0, size=min_len)

    t = 0.0
    for idx_out in range(len(output_items[0])):
        for idx_taps, val_taps in enumerate(taps):
            t += val_taps * noise[len(noise)-1-idx_taps]
        output_items[0][idx_out] = t

    return len(output_items[0])

但是代碼非常慢。 我怎樣才能得到與所示圖片相似的 output(通過以下構造獲得)?

在此處輸入圖像描述

絕對(大寫 D)不想在work中重復重新實例化(制作新的)過濾器。

請記住,work 在連續的數據塊上被調用了數千次。

所以,這是一個基本的架構錯誤:你需要一個過濾器,它在兩次調用之間保持它的 state 工作。

此外,您絕不能編寫依賴於數據“視圖”的信號處理,即無窮無盡的 stream 樣本如何恰好到達您的塊。 想象一下這個很長的數字 stream:

… … -2 -1 0 1 2 3 4 5 … …

你的工作被要求分塊,例如你的第一個work獲得值 -4000 到 -2000,你的第二個 -1999 到 -1990,第三個 -1989 到 2000,第四個 2001 到 2466,你得到主意。

或者,它完全不同,在第一次調用work時,你會看到 -4000 到 -2001,在第二個 -2000 到 -1500,在第三個 -1499 到 -500,在第四個 -499 到 0,在第五個 1 到 2466。

然后,您的min_araymax_len取決於信號的打包方式。 這很糟糕,因為它會改變你所做的數學運算。

我會建議實施什么,但整個街區對我來說真的毫無意義。 這是不必要的——在噪聲源上使用現有的帶通濾波器也有同樣的效果——如果我要推薦如何去做,我建議你自己實現同樣的方法,沒有什么不同:兩個塊,一個產生噪聲,第二個塊使用正確實現的帶通濾波器對其進行整形,使用現有濾波器的源代碼作為示例。

暫無
暫無

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

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