iir: copy_within is better than rotate_right
This commit is contained in:
parent
b0e0b5144f
commit
d9e4f6a052
@ -159,10 +159,12 @@ impl IIR {
|
||||
/// * `xy` - Current filter state.
|
||||
/// * `x0` - New input.
|
||||
pub fn update(&self, xy: &mut IIRState, x0: f32) -> f32 {
|
||||
let n = self.ba.len();
|
||||
debug_assert!(xy.len() == n);
|
||||
// `xy` contains x0 x1 y0 y1 y2
|
||||
// Increment time x1 x2 y1 y2 y3
|
||||
// Rotate y3 x1 x2 y1 y2
|
||||
xy.rotate_right(1);
|
||||
xy.copy_within(0..n - 1, 1); // unrolls better than xy.rotate_right(1)
|
||||
// Store x0 x0 x1 x2 y1 y2
|
||||
xy[0] = x0;
|
||||
// Compute y0 by multiply-accumulate
|
||||
@ -170,7 +172,7 @@ impl IIR {
|
||||
// Limit y0
|
||||
let y0 = max(self.y_min, min(self.y_max, y0));
|
||||
// Store y0 x0 x1 y0 y1 y2
|
||||
xy[xy.len() / 2] = y0;
|
||||
xy[n / 2] = y0;
|
||||
y0
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user