本文簡要介紹 python 語言中 scipy.signal.upfirdn
的用法。
用法:
scipy.signal.upfirdn(h, x, up=1, down=1, axis=-1, mode='constant', cval=0)#
上采樣、FIR 濾波器和下采樣。
- h: array_like
一維 FIR(finite-impulse 響應)濾波器係數。
- x: array_like
輸入信號數組。
- up: 整數,可選
上采樣率。默認值為 1。
- down: 整數,可選
下采樣率。默認值為 1。
- axis: 整數,可選
沿其應用線性濾波器的輸入數據數組的軸。過濾器沿該軸應用於每個子陣列。默認值為 -1。
- mode: str,可選
要使用的信號擴展模式。套裝
{"constant", "symmetric", "reflect", "edge", "wrap"}
對應於提供的模式numpy.pad."smooth"
通過基於數組兩端最後 2 個點的斜率進行擴展,實現平滑擴展。"antireflect"
和"antisymmetric"
是反對稱版本的"reflect"
和"symmetric"
.模式“line”根據由沿線的第一個點和最後一個點定義的線性趨勢擴展信號axis
.- cval: 浮點數,可選
mode == "constant"
時使用的常量值。
- y: ndarray
輸出信號數組。除沿軸外,尺寸將與 x 相同,它將根據 h、up 和 down 參數改變大小。
參數 ::
返回 ::
注意:
該算法是 Vaidyanathan 文本 [1](圖 4.3-8d)第 129 頁所示框圖的實現。
使用零插入按因子 P 進行上采樣、長度為
N
的 FIR 濾波以及按 Q 因子進行下采樣的直接方法是每個輸出樣本 O(N*Q)。這裏使用的多相實現是 O(N/P)。參考:
[1]P. P. Vaidyanathan,多速率係統和濾波器組,Prentice Hall,1993 年。
例子:
簡單的操作:
>>> import numpy as np >>> from scipy.signal import upfirdn >>> upfirdn([1, 1, 1], [1, 1, 1]) # FIR filter array([ 1., 2., 3., 2., 1.]) >>> upfirdn([1], [1, 2, 3], 3) # upsampling with zeros insertion array([ 1., 0., 0., 2., 0., 0., 3.]) >>> upfirdn([1, 1, 1], [1, 2, 3], 3) # upsampling with sample-and-hold array([ 1., 1., 1., 2., 2., 2., 3., 3., 3.]) >>> upfirdn([.5, 1, .5], [1, 1, 1], 2) # linear interpolation array([ 0.5, 1. , 1. , 1. , 1. , 1. , 0.5]) >>> upfirdn([1], np.arange(10), 1, 3) # decimation by 3 array([ 0., 3., 6., 9.]) >>> upfirdn([.5, 1, .5], np.arange(10), 2, 3) # linear interp, rate 2/3 array([ 0. , 1. , 2.5, 4. , 5.5, 7. , 8.5])
將單個濾波器應用於多個信號:
>>> x = np.reshape(np.arange(8), (4, 2)) >>> x array([[0, 1], [2, 3], [4, 5], [6, 7]])
沿
x
的最後一個維度應用:>>> h = [1, 1] >>> upfirdn(h, x, 2) array([[ 0., 0., 1., 1.], [ 2., 2., 3., 3.], [ 4., 4., 5., 5.], [ 6., 6., 7., 7.]])
沿
x
的第 0 維應用:>>> upfirdn(h, x, 2, axis=0) array([[ 0., 1.], [ 0., 1.], [ 2., 3.], [ 2., 3.], [ 4., 5.], [ 4., 5.], [ 6., 7.], [ 6., 7.]])
相關用法
- Python SciPy signal.unit_impulse用法及代碼示例
- Python SciPy signal.unique_roots用法及代碼示例
- Python SciPy signal.czt_points用法及代碼示例
- Python SciPy signal.chirp用法及代碼示例
- Python SciPy signal.residue用法及代碼示例
- Python SciPy signal.iirdesign用法及代碼示例
- Python SciPy signal.max_len_seq用法及代碼示例
- Python SciPy signal.kaiser_atten用法及代碼示例
- Python SciPy signal.oaconvolve用法及代碼示例
- Python SciPy signal.hilbert用法及代碼示例
- Python SciPy signal.ricker用法及代碼示例
- Python SciPy signal.group_delay用法及代碼示例
- Python SciPy signal.cheb2ord用法及代碼示例
- Python SciPy signal.get_window用法及代碼示例
- Python SciPy signal.lfilter用法及代碼示例
- Python SciPy signal.morlet用法及代碼示例
- Python SciPy signal.coherence用法及代碼示例
- Python SciPy signal.dfreqresp用法及代碼示例
- Python SciPy signal.TransferFunction用法及代碼示例
- Python SciPy signal.dbode用法及代碼示例
- Python SciPy signal.residuez用法及代碼示例
- Python SciPy signal.bilinear_zpk用法及代碼示例
- Python SciPy signal.firls用法及代碼示例
- Python SciPy signal.impulse用法及代碼示例
- Python SciPy signal.buttord用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.signal.upfirdn。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。