upfirdn#
- scipy.signal.upfirdn(h, x, up=1, down=1, axis=-1, mode='constant', cval=0)[source]#
- Upsample, FIR filter, and downsample. - Parameters:
- harray_like
- 1-D FIR (finite-impulse response) filter coefficients. 
- xarray_like
- Input signal array. 
- upint, optional
- Upsampling rate. Default is 1. 
- downint, optional
- Downsampling rate. Default is 1. 
- axisint, optional
- The axis of the input data array along which to apply the linear filter. The filter is applied to each subarray along this axis. Default is -1. 
- modestr, optional
- The signal extension mode to use. The set - {"constant", "symmetric", "reflect", "edge", "wrap"}correspond to modes provided by- numpy.pad.- "smooth"implements a smooth extension by extending based on the slope of the last 2 points at each end of the array.- "antireflect"and- "antisymmetric"are anti-symmetric versions of- "reflect"and- "symmetric". The mode “line” extends the signal based on a linear trend defined by the first and last points along the- axis.- Added in version 1.4.0. 
- cvalfloat, optional
- The constant value to use when - mode == "constant".- Added in version 1.4.0. 
 
- Returns:
- yndarray
- The output signal array. Dimensions will be the same as x except for along axis, which will change size according to the h, up, and down parameters. 
 
 - Notes - The algorithm is an implementation of the block diagram shown on page 129 of the Vaidyanathan text [1] (Figure 4.3-8d). - The direct approach of upsampling by factor of P with zero insertion, FIR filtering of length - N, and downsampling by factor of Q is O(N*Q) per output sample. The polyphase implementation used here is O(N/P).- Added in version 0.18. - References [1]- P. P. Vaidyanathan, Multirate Systems and Filter Banks, Prentice Hall, 1993. - Examples - Simple operations: - >>> 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]) - Apply a single filter to multiple signals: - >>> x = np.reshape(np.arange(8), (4, 2)) >>> x array([[0, 1], [2, 3], [4, 5], [6, 7]]) - Apply along the last dimension of - 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.]]) - Apply along the 0th dimension of - x:- >>> upfirdn(h, x, 2, axis=0) array([[ 0., 1.], [ 0., 1.], [ 2., 3.], [ 2., 3.], [ 4., 5.], [ 4., 5.], [ 6., 7.], [ 6., 7.]])