python scipy.signal_python scipy signal.upfirdn用法及代码示例

上采样,FIR滤波器和下采样

参数:

h:array_like一维FIR(finite-impulse响应)滤波器系数。

x:array_like输入信号阵列。

up:int, 可选参数上采样率。默认值为1。

down:int, 可选参数下采样率。默认值为1。

axis:int, 可选参数输入数据数组的轴,沿该轴应用线性滤波器。过滤器沿此轴应用于每个子数组。默认值为-1。

mode:str, 可选参数要使用的信号扩展模式。套装{"constant", "symmetric", "reflect", "edge", "wrap"}对应于由numpy.pad。"smooth"通过基于数组两端的最后2个点的斜率进行扩展,实现平滑扩展。"antireflect"和"antisymmetric"是的anti-symmetric版本"reflect"和"symmetric"。模式“line”根据线性趋势由信号的第一个点和最后一个点定义的信号扩展信号axis。

1.4.0版的新函数。

cval:float, 可选参数何时使用的常数mode == "constant"。

1.4.0版的新函数。

返回值:

y:ndarray输出信号数组。除沿轴方向外,尺寸将与x相同,后者将根据h,up和down参数改变尺寸。

注意:

该算法是Vaidyanathan文本第129页上显示的框图的实现[1](图4.3-8d)。

P.P. Vaidyanathan,多速率系统和滤波器组,Prentice Hall,1993年。

直接用零因子P进行上采样的方法,长度的FIR滤波N,并且按Q因子进行的下采样是每个输出采样的O(N * Q)。此处使用的多相实现是O(N /P)。

版本0.18中的新函数。

例子:

操作简单:

>>> 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., 0., 0.])

>>> 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, 0. ])

>>> 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, 0. ])

将单个滤波器应用于多个信号:

>>> 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.]])

沿的第0维应用x:

>>> upfirdn(h, x, 2, axis=0)

array([[ 0., 1.],

[ 0., 1.],

[ 2., 3.],

[ 2., 3.],

[ 4., 5.],

[ 4., 5.],

[ 6., 7.],

[ 6., 7.]])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值