@@ -45,9 +45,6 @@ function filt!(out::AbstractArray, b::Union{AbstractVector, Number}, a::Union{Ab
4545 a = @noinline broadcast (/ , a, norml)
4646 b = @noinline broadcast (/ , b, norml)
4747 end
48- # Pad the coefficients with zeros if needed
49- bs< sz && (b = copyto! (zeros (eltype (b), sz), b))
50- 1 < as< sz && (a = copyto! (zeros (eltype (a), sz), a))
5148
5249 si = Vector {promote_type(eltype(b), eltype(a), T)} (undef, sz - 1 )
5350
@@ -75,10 +72,22 @@ function _filt_iir!(out, b, a, x, si, col)
7572 xi = x[i, col]
7673 val = muladd (xi, b[1 ], si[1 ])
7774 out[i, col] = val
78- for j= 1 : ( silen- 1 )
75+ for j in 1 : min ( length (a), length (b), silen) - 1
7976 si[j] = muladd (val, - a[j+ 1 ], muladd (xi, b[j+ 1 ], si[j+ 1 ]))
8077 end
81- si[silen] = muladd (xi, b[silen+ 1 ], - a[silen+ 1 ]* val)
78+ if length (a) == length (b)
79+ si[silen] = muladd (xi, b[silen+ 1 ], - a[silen+ 1 ]* val)
80+ elseif length (a) > length (b)
81+ for j in length (b): silen- 1
82+ si[j] = muladd (val, - a[j+ 1 ], si[j+ 1 ])
83+ end
84+ si[silen] = - a[silen+ 1 ]* val
85+ else
86+ for j in length (a): silen- 1
87+ si[j] = muladd (xi, b[j+ 1 ], si[j+ 1 ])
88+ end
89+ si[silen] = xi* b[silen+ 1 ]
90+ end
8291 end
8392end
8493
0 commit comments