24 #define SAMPLE_FORMAT float
29 #define SAMPLE_FORMAT double
35 #define fn3(a,b) a##_##b
36 #define fn2(a,b) fn3(a,b)
37 #define fn(a) fn2(a, SAMPLE_FORMAT)
42 const int order =
s->order;
49 output =
s->fdsp->scalarproduct_float(delay,
tmp,
s->kernel_size);
51 output =
s->fdsp->scalarproduct_double(delay,
tmp,
s->kernel_size);
62 for (
int i = 0;
i <=
N;
i++)
65 for (
int i = 0;
i <
N;
i++) {
69 for (
int k =
i; k <
N; k++) {
86 for (
int j =
i + 1; j <
N; j++) {
89 for (
int k =
i + 1; k <
N; k++)
90 MA[j][k] -= MA[j][
i] * MA[
i][k];
99 for (
int j = 0; j <
N; j++) {
100 for (
int i = 0;
i <
N;
i++) {
103 for (
int k = 0; k <
i; k++)
104 IA[
i][j] -= MA[
i][k] *
IA[k][j];
107 for (
int i =
N - 1;
i >= 0;
i--) {
108 for (
int k =
i + 1; k <
N; k++)
109 IA[
i][j] -= MA[
i][k] *
IA[k][j];
111 IA[
i][j] /= MA[
i][
i];
118 ftype *dcoeffs = (
ftype *)
s->dcoeffs->extended_data[ch];
119 ftype *coeffs = (
ftype *)
s->coeffs->extended_data[ch];
120 ftype *delay = (
ftype *)
s->delay->extended_data[ch];
121 ftype **itmpmp = (
ftype **)&
s->itmpmp[
s->projection * ch];
122 ftype **tmpmp = (
ftype **)&
s->tmpmp[
s->projection * ch];
128 int *p = (
int *)
s->p->extended_data[ch];
129 int *
offset = (
int *)
s->offset->extended_data[ch];
130 const int projection =
s->projection;
132 const int order =
s->order;
133 const int length = projection + order;
135 const ftype tol = 0.00001f;
144 for (
int i = 0;
i < projection;
i++) {
145 const int iprojection =
i * projection;
147 for (
int j =
i; j < projection; j++) {
149 for (
int k = 0; k < order; k++)
151 tmpm[iprojection + j] = sum;
153 tmpm[j * projection +
i] = sum;
156 tmpm[iprojection +
i] +=
delta;
162 for (
int i = 0;
i < projection;
i++) {
164 for (
int j = 0; j < projection; j++)
165 sum += itmpmp[
i][j] * e[j +
offset[1]];
169 for (
int i = 0;
i < order;
i++) {
171 for (
int j = 0; j < projection; j++)
176 for (
int i = 0;
i < order;
i++)
177 coeffs[
i] = coeffs[
i + order] = coeffs[
i] + mu * dcoeffs[
i];
180 offset[1] = projection - 1;
185 switch (
s->output_mode) {
199 const int start = (
out->ch_layout.nb_channels * jobnr) / nb_jobs;
200 const int end = (
out->ch_layout.nb_channels * (jobnr+1)) / nb_jobs;
202 for (
int c = start;
c < end;
c++) {
204 const ftype *desired = (
const ftype *)
s->frame[1]->extended_data[
c];
207 for (
int n = 0; n <
out->nb_samples; n++) {
209 if (
ctx->is_disabled)