我設計了乙個名為
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 函式來預...