單級iir訊號處理模組

2021-07-07 06:09:35 字數 1963 閱讀 5157

我設計了乙個名為

txxy

的module

,然後新增乙個單級

iir濾波器模組,模組的輸入輸出關係為:

y[i] =alpha*x[i] + (1-alpha)*y[i-1]

要求每次至少處理

vlen

的整數倍個資料。我們使用

gnuradio

自帶的gr_modtool

工具來生成檔案模版:「

txxy

」是生成模組的名字。

接下來修改生成的

c++檔案。

gr-txxy/include/txxy/single_pole_iir_filter_ff.h

gr-txxy/lib/single_pole_iir_filter_ff_impl.h

gr-txxy/lib/single_pole_iir_filter_ff_impl.cc

我們這個例子比較簡單,

single_pole_iir_filter_ff.h

不需要修改;

而single_pole_iir_filter_ff_impl.h

只需要增加幾個資料成員定義:

single_pole_iir_filter_ff_impl.cc

修改:首先修改建構函式,定義輸入輸出埠,

make(1, 1,vlen*sizeof(float))

的意思是最少

1 個輸入(輸出)埠,最多也是

1 個輸入(輸出)埠,每個資料單元的位元組數為

vlen*sizeof

(float

),當你設定

vlen

為1000

時,每個資料單元就是

1000

個float

資料。

然後根據演算法修改

work

函式:

在work

函式中,我們一開始定義了輸入輸出快取區資料的指標,然後逐個處理。由於

1 個資料單元包含有

d_vlen

個float

資料,所以我做了

2 層迴圈。最後

return

語句告訴

gnuradio

我們這次呼叫

work

函式處理了多少輸入輸出資料單元。

接下來為了使得我們設計的訊號處理模組能夠在

grc

中使用,使用

gr_modtool

生成xml

檔案:

這時在gr-txxy/grc/

中生成了

txxy_single_pole_iir_filter_ff.xml

檔案。開啟該檔案做相應修改。如果不知道如何修改,可以在

gnuradio

中找乙個類似的現有模組,觀察它是如何寫的。

gr-txxy/python/qa_single_pole_iir_filter_ff.py

現在我們已經完全寫好了乙個自定義的訊號處理模組。

接下來了編譯安裝:

即進入到該模組目錄後:

mkdir build

cd build

cmake ..

make

make test

sudo make install

sudo ldconfig   (

更新庫)

重啟gnuradio-companion

按ctrl+f

開啟搜尋框,輸入

txxy

,可以看到我們設計的訊號處理模組出現在

grc

中了:

我們使用該模組設計乙個簡單的流圖,乙個疊加了雜訊的正弦訊號經過我們的訊號處理模組濾波處理,最後將處理前和處理後的訊號用

scope

對比顯示,我將該例子放在

gr-txxy/examples/:

下圖是執行結果:

python 訊號處理模組signal

signal包負責在python程式內部處理訊號,典型的操作包括預設訊號處理函式,暫停並等待訊號,以及定時發出sigalrm等。要注意,signal包主要是針對unix平台 比如linux,mac os 而windows核心中由於對訊號機制的支援不充分 signal包定義了各個訊號名及其對應的整數,...

Python 訊號處理 signal 模組

官方文件上有這樣的示例 import signal,os 定義乙個訊號處理函式,該函式列印收到的訊號,然後raise ioerror def handler signum,frame print signal handler called with signal signum raise ioerr...

Python訊號處理模組signal

python中對訊號處理的模組主要是使用signal模組,但signal主要是針對unix系統,所以在windows平台上python不能很好的發揮訊號處理的功能。要檢視python中的訊號量,可以使用dir signal 來檢視。在signal模組中,主要是使用signal.signal 函式來預...