bw_src(_int), start from index 0 when downsampling
This commit is contained in:
parent
fb4d041838
commit
3a44034694
@ -129,15 +129,14 @@ static inline void bw_src_reset_state(const bw_src_coeffs *BW_RESTRICT coeffs, b
|
|||||||
state->z2 = state->z1;
|
state->z2 = state->z1;
|
||||||
state->z3 = state->z2;
|
state->z3 = state->z2;
|
||||||
state->z4 = state->z3;
|
state->z4 = state->z3;
|
||||||
state->i = 1.f;
|
|
||||||
} else {
|
} else {
|
||||||
// TDF-II
|
// TDF-II
|
||||||
state->z4 = (coeffs->b4 - coeffs->a4) * x0;
|
state->z4 = (coeffs->b4 - coeffs->a4) * x0;
|
||||||
state->z3 = (coeffs->b3 - coeffs->a3) * x0 + state->z4;
|
state->z3 = (coeffs->b3 - coeffs->a3) * x0 + state->z4;
|
||||||
state->z2 = (coeffs->b2 - coeffs->a2) * x0 + state->z3;
|
state->z2 = (coeffs->b2 - coeffs->a2) * x0 + state->z3;
|
||||||
state->z1 = (coeffs->b1 - coeffs->a1) * x0 + state->z2;
|
state->z1 = (coeffs->b1 - coeffs->a1) * x0 + state->z2;
|
||||||
state->i = 0.f;
|
|
||||||
}
|
}
|
||||||
|
state->i = 0.f;
|
||||||
state->xz1 = x0;
|
state->xz1 = x0;
|
||||||
state->xz2 = x0;
|
state->xz2 = x0;
|
||||||
state->xz3 = x0;
|
state->xz3 = x0;
|
||||||
@ -151,7 +150,6 @@ static inline void bw_src_process(const bw_src_coeffs *BW_RESTRICT coeffs, bw_sr
|
|||||||
// DF-II
|
// DF-II
|
||||||
const float z0 = x[i] - coeffs->a1 * state->z1 - coeffs->a2 * state->z2 - coeffs->a3 * state->z3 - coeffs->a4 * state->z4;
|
const float z0 = x[i] - coeffs->a1 * state->z1 - coeffs->a2 * state->z2 - coeffs->a3 * state->z3 - coeffs->a4 * state->z4;
|
||||||
const float o = coeffs->b0 * z0 + coeffs->b1 * state->z1 + coeffs->b2 * state->z2 + coeffs->b3 * state->z3 + coeffs->b4 * state->z4;
|
const float o = coeffs->b0 * z0 + coeffs->b1 * state->z1 + coeffs->b2 * state->z2 + coeffs->b3 * state->z3 + coeffs->b4 * state->z4;
|
||||||
state->i -= 1.f;
|
|
||||||
if (state->i <= 0.f) {
|
if (state->i <= 0.f) {
|
||||||
// 3rd degree Lagrange interpolation + Horner's rule
|
// 3rd degree Lagrange interpolation + Horner's rule
|
||||||
const float k1 = state->xz2 - state->xz1;
|
const float k1 = state->xz2 - state->xz1;
|
||||||
@ -165,6 +163,7 @@ static inline void bw_src_process(const bw_src_coeffs *BW_RESTRICT coeffs, bw_sr
|
|||||||
state->i -= coeffs->k;
|
state->i -= coeffs->k;
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
state->i -= 1.f;
|
||||||
state->z4 = state->z3;
|
state->z4 = state->z3;
|
||||||
state->z3 = state->z2;
|
state->z3 = state->z2;
|
||||||
state->z2 = state->z1;
|
state->z2 = state->z1;
|
||||||
|
@ -132,7 +132,7 @@ static inline void bw_src_int_reset_state(const bw_src_int_coeffs *BW_RESTRICT c
|
|||||||
state->z2 = state->z1;
|
state->z2 = state->z1;
|
||||||
state->z3 = state->z2;
|
state->z3 = state->z2;
|
||||||
state->z4 = state->z3;
|
state->z4 = state->z3;
|
||||||
state->i = 1;
|
state->i = 0;
|
||||||
} else {
|
} else {
|
||||||
// TDF-II
|
// TDF-II
|
||||||
state->z4 = (coeffs->b4 - coeffs->a4) * x0;
|
state->z4 = (coeffs->b4 - coeffs->a4) * x0;
|
||||||
@ -148,12 +148,12 @@ static inline int bw_src_int_process(const bw_src_int_coeffs *BW_RESTRICT coeffs
|
|||||||
for (int i = 0; i < n_in_samples; i++) {
|
for (int i = 0; i < n_in_samples; i++) {
|
||||||
// DF-II
|
// DF-II
|
||||||
const float z0 = x[i] - coeffs->a1 * state->z1 - coeffs->a2 * state->z2 - coeffs->a3 * state->z3 - coeffs->a4 * state->z4;
|
const float z0 = x[i] - coeffs->a1 * state->z1 - coeffs->a2 * state->z2 - coeffs->a3 * state->z3 - coeffs->a4 * state->z4;
|
||||||
state->i--;
|
|
||||||
if (!state->i) {
|
if (!state->i) {
|
||||||
state->i = -coeffs->ratio;
|
state->i = -coeffs->ratio;
|
||||||
y[n] = coeffs->b0 * z0 + coeffs->b1 * state->z1 + coeffs->b2 * state->z2 + coeffs->b3 * state->z3 + coeffs->b4 * state->z4;
|
y[n] = coeffs->b0 * z0 + coeffs->b1 * state->z1 + coeffs->b2 * state->z2 + coeffs->b3 * state->z3 + coeffs->b4 * state->z4;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
state->i--;
|
||||||
state->z4 = state->z3;
|
state->z4 = state->z3;
|
||||||
state->z3 = state->z2;
|
state->z3 = state->z2;
|
||||||
state->z2 = state->z1;
|
state->z2 = state->z1;
|
||||||
|
Loading…
Reference in New Issue
Block a user