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)
40 static double scalarproduct_double(
const double *v1,
const double *v2,
int len)
44 for (
int i = 0;
i <
len;
i++)
54 const int order =
s->order;
61 output =
s->fdsp->scalarproduct_float(delay,
tmp,
s->kernel_size);
63 output = scalarproduct_double(delay,
tmp,
s->kernel_size);
74 for (
int i = 0;
i <=
N;
i++)
77 for (
int i = 0;
i <
N;
i++) {
81 for (
int k =
i; k <
N; k++) {
98 for (
int j =
i + 1; j <
N; j++) {
101 for (
int k =
i + 1; k <
N; k++)
102 MA[j][k] -= MA[j][
i] * MA[
i][k];
111 for (
int j = 0; j <
N; j++) {
112 for (
int i = 0;
i <
N;
i++) {
115 for (
int k = 0; k <
i; k++)
116 IA[
i][j] -= MA[
i][k] *
IA[k][j];
119 for (
int i =
N - 1;
i >= 0;
i--) {
120 for (
int k =
i + 1; k <
N; k++)
121 IA[
i][j] -= MA[
i][k] *
IA[k][j];
123 IA[
i][j] /= MA[
i][
i];
130 ftype *dcoeffs = (
ftype *)
s->dcoeffs->extended_data[ch];
131 ftype *coeffs = (
ftype *)
s->coeffs->extended_data[ch];
132 ftype *delay = (
ftype *)
s->delay->extended_data[ch];
133 ftype **itmpmp = (
ftype **)&
s->itmpmp[
s->projection * ch];
134 ftype **tmpmp = (
ftype **)&
s->tmpmp[
s->projection * ch];
140 int *p = (
int *)
s->p->extended_data[ch];
141 int *
offset = (
int *)
s->offset->extended_data[ch];
142 const int projection =
s->projection;
144 const int order =
s->order;
145 const int length = projection + order;
147 const ftype tol = 0.00001f;
156 for (
int i = 0;
i < projection;
i++) {
157 const int iprojection =
i * projection;
159 for (
int j =
i; j < projection; j++) {
161 for (
int k = 0; k < order; k++)
163 tmpm[iprojection + j] = sum;
165 tmpm[j * projection +
i] = sum;
168 tmpm[iprojection +
i] +=
delta;
174 for (
int i = 0;
i < projection;
i++) {
176 for (
int j = 0; j < projection; j++)
177 sum += itmpmp[
i][j] * e[j +
offset[1]];
181 for (
int i = 0;
i < order;
i++) {
183 for (
int j = 0; j < projection; j++)
188 for (
int i = 0;
i < order;
i++)
189 coeffs[
i] = coeffs[
i + order] = coeffs[
i] + mu * dcoeffs[
i];
192 offset[1] = projection - 1;
197 switch (
s->output_mode) {
211 const int start = (
out->ch_layout.nb_channels * jobnr) / nb_jobs;
212 const int end = (
out->ch_layout.nb_channels * (jobnr+1)) / nb_jobs;
214 for (
int c = start;
c < end;
c++) {
216 const ftype *desired = (
const ftype *)
s->frame[1]->extended_data[
c];
219 for (
int n = 0; n <
out->nb_samples; n++) {
221 if (
ctx->is_disabled)