function dericheCausalCoeff(a_out, b_out, sigma) {
const K = 4;
const alpha = Float64Array.of(
0.84,
1.8675,
0.84,
-1.8675,
-0.34015,
-0.1299,
-0.34015,
0.1299
);
const x1 = Math.exp(-1.783 / sigma);
const x2 = Math.exp(-1.723 / sigma);
const y1 = 0.6318 / sigma;
const y2 = 1.997 / sigma;
const beta = Float64Array.of(
-x1 * Math.cos(y1),
x1 * Math.sin(y1),
-x1 * Math.cos(-y1),
x1 * Math.sin(-y1),
-x2 * Math.cos(y2),
x2 * Math.sin(y2),
-x2 * Math.cos(-y2),
x2 * Math.sin(-y2)
);
const denom = sigma * 2.5066282746310007;
const b = Float64Array.of(alpha[0], alpha[1], 0, 0, 0, 0, 0, 0);
const a = Float64Array.of(1, 0, beta[0], beta[1], 0, 0, 0, 0, 0, 0);
let j, k;
for (k = 2; k < 8; k += 2) {
b[k] = beta[k] * b[k - 2] - beta[k + 1] * b[k - 1];
b[k + 1] = beta[k] * b[k - 1] + beta[k + 1] * b[k - 2];
for (j = k - 2; j > 0; j -= 2) {
b[j] += beta[k] * b[j - 2] - beta[k + 1] * b[j - 1];
b[j + 1] += beta[k] * b[j - 1] + beta[k + 1] * b[j - 2];
}
for (j = 0; j <= k; j += 2) {
b[j] += alpha[k] * a[j] - alpha[k + 1] * a[j + 1];
b[j + 1] += alpha[k] * a[j + 1] + alpha[k + 1] * a[j];
}
a[k + 2] = beta[k] * a[k] - beta[k + 1] * a[k + 1];
a[k + 3] = beta[k] * a[k + 1] + beta[k + 1] * a[k];
for (j = k; j > 0; j -= 2) {
a[j] += beta[k] * a[j - 2] - beta[k + 1] * a[j - 1];
a[j + 1] += beta[k] * a[j - 1] + beta[k + 1] * a[j - 2];
}
}
for (k = 0; k < K; ++k) {
j = k << 1;
b_out[k] = b[j] / denom;
a_out[k + 1] = a[j + 2];
}
}