r3979 - trunk/bse
- From: timj svn gnome org
- To: svn-commits-list gnome org
- Subject: r3979 - trunk/bse
- Date: Mon, 16 Oct 2006 18:35:29 -0400 (EDT)
Author: timj
Date: 2006-10-16 18:35:20 -0400 (Mon, 16 Oct 2006)
New Revision: 3979
Modified:
trunk/bse/ChangeLog
trunk/bse/bseellipticfilter.c
trunk/bse/bseellipticfilter.h
Log:
Tue Oct 17 00:31:20 2006 Tim Janik <timj gtk org>
* bseellipticfilter.c: removed remaining static integers by using
either local variables or by using ds->z_counter. minor whitespace
fixups.
* bseellipticfilter.h: added and documented z_counter.
Modified: trunk/bse/ChangeLog
===================================================================
--- trunk/bse/ChangeLog 2006-10-16 22:17:52 UTC (rev 3978)
+++ trunk/bse/ChangeLog 2006-10-16 22:35:20 UTC (rev 3979)
@@ -1,3 +1,11 @@
+Tue Oct 17 00:31:20 2006 Tim Janik <timj gtk org>
+
+ * bseellipticfilter.c: removed remaining static integers by using
+ either local variables or by using ds->z_counter. minor whitespace
+ fixups.
+
+ * bseellipticfilter.h: added and documented z_counter.
+
Tue Oct 17 00:17:23 2006 Tim Janik <timj gtk org>
* bseellipticfilter.c: whitespace and paranthese fixes.
Modified: trunk/bse/bseellipticfilter.c
===================================================================
--- trunk/bse/bseellipticfilter.c 2006-10-16 22:17:52 UTC (rev 3978)
+++ trunk/bse/bseellipticfilter.c 2006-10-16 22:35:20 UTC (rev 3979)
@@ -886,10 +886,6 @@
static double an = 0.0;
static double gam = 0.0;
static double gain = 0.0;
-static int jt = 0;
-static int ii = 0;
-static int ir = 0;
-static int icnt = 0;
#endif
/* --- prototypes --- */
@@ -1265,10 +1261,11 @@
*/
if (ifr->type >= 3)
{
+ int ii = 0;
/* map s => 1/s */
for (j = 0; j < ds->n_poles; j++)
{
- ir = j + j;
+ int ir = j + j;
ii = ir + 1;
double b = zs[ir]*zs[ir] + zs[ii]*zs[ii];
zs[ir] = zs[ir] / b;
@@ -1281,9 +1278,9 @@
{
ds->n_zeros += ifr->order / 2;
}
- for (j=0; j < ds->n_zeros; j++)
+ for (j = 0; j < ds->n_zeros; j++)
{
- ir = ii + 1;
+ int ir = ii + 1;
ii = ir + 1;
zs[ir] = 0.0;
zs[ii] = 0.0;
@@ -1321,10 +1318,11 @@
*/
if (ifr->type >= 3)
{
+ int ii = 0;
/* map s => 1/s */
for (j = 0; j < ds->n_poles; j++)
{
- ir = j + j;
+ int ir = j + j;
ii = ir + 1;
b = zs[ir]*zs[ir] + zs[ii]*zs[ii];
zs[ir] = zs[ir] / b;
@@ -1337,9 +1335,9 @@
{
ds->n_zeros += ifr->order / 2;
}
- for (j=0; j < ds->n_zeros; j++)
+ for (j = 0; j < ds->n_zeros; j++)
{
- ir = ii + 1;
+ int ir = ii + 1;
ii = ir + 1;
zs[ir] = 0.0;
zs[ii] = 0.0;
@@ -1359,9 +1357,9 @@
double b = (Kk * a) / ifr->order;
ellpj (b, m, &sn, &cn, &dn, &phi);
int lr = 2 * ds->n_poles + 2 * i;
- zs[ lr ] = 0.0;
+ zs[lr] = 0.0;
a = ds->wc / (ds->elliptic_k * sn); /* elliptic_k = sqrt(m) */
- zs[ lr + 1 ] = a;
+ zs[lr + 1] = a;
}
for (i = 0; i < ds->n_poles; i++)
{ /* poles */
@@ -1378,10 +1376,10 @@
}
if (ifr->type >= 3)
{
- int nt = ds->n_poles + ds->n_zeros;
+ int ii = 0, nt = ds->n_poles + ds->n_zeros;
for (j = 0; j < nt; j++)
{
- ir = j + j;
+ int ir = j + j;
ii = ir + 1;
double b = zs[ir]*zs[ir] + zs[ii]*zs[ii];
zs[ir] = zs[ir] / b;
@@ -1389,7 +1387,7 @@
}
while (ds->n_poles > ds->n_zeros)
{
- ir = ii + 1;
+ int ir = ii + 1;
ii = ir + 1;
ds->n_zeros += 1;
zs[ir] = 0.0;
@@ -1477,15 +1475,15 @@
}
int nc = ds->n_poles;
- jt = -1;
- ii = -1;
-
- for (icnt=0; icnt < 2; icnt++)
+ ds->z_counter = -1;
+
+ int icnt, ii = -1;
+ for (icnt = 0; icnt < 2; icnt++)
{
/* The maps from s plane to z plane */
do
{
- ir = ii + 1;
+ int ir = ii + 1;
ii = ir + 1;
r.r = zs[ir];
r.i = zs[ii];
@@ -1506,14 +1504,14 @@
cnum.i = C * r.i;
cden.r = 1 - C * r.r;
cden.i = -C * r.i;
- jt += 1;
- Cdiv (&cden, &cnum, &z[jt]);
+ ds->z_counter += 1;
+ Cdiv (&cden, &cnum, &z[ds->z_counter]);
if (r.i != 0.0)
{
/* fill in complex conjugate root */
- jt += 1;
- z[jt].r = z[jt - 1 ].r;
- z[jt].i = -z[jt - 1 ].i;
+ ds->z_counter += 1;
+ z[ds->z_counter].r = z[ds->z_counter - 1].r;
+ z[ds->z_counter].i = -z[ds->z_counter - 1].i;
}
break;
@@ -1553,25 +1551,25 @@
ca.i *= 2.0;
Cadd (&b4ac, &cb, &cnum); /* -b + sqrt(b^2 - 4ac) */
Cdiv (&ca, &cnum, &cnum); /* ... /2a */
- jt += 1;
- Cmov (&cnum, &z[jt]);
+ ds->z_counter += 1;
+ Cmov (&cnum, &z[ds->z_counter]);
if (cnum.i != 0.0)
{
- jt += 1;
- z[jt].r = cnum.r;
- z[jt].i = -cnum.i;
+ ds->z_counter += 1;
+ z[ds->z_counter].r = cnum.r;
+ z[ds->z_counter].i = -cnum.i;
}
if ((r.i != 0.0) || (cnum.i == 0))
{
Csub (&b4ac, &cb, &cnum); /* -b - sqrt(b^2 - 4ac) */
Cdiv (&ca, &cnum, &cnum); /* ... /2a */
- jt += 1;
- Cmov (&cnum, &z[jt]);
+ ds->z_counter += 1;
+ Cmov (&cnum, &z[ds->z_counter]);
if (cnum.i != 0.0)
{
- jt += 1;
- z[jt].r = cnum.r;
- z[jt].i = -cnum.i;
+ ds->z_counter += 1;
+ z[ds->z_counter].r = cnum.r;
+ z[ds->z_counter].i = -cnum.i;
}
}
} /* end switch */
@@ -1580,7 +1578,7 @@
if (icnt == 0)
{
- ds->n_solved_poles = jt + 1;
+ ds->n_solved_poles = ds->z_counter + 1;
if (ds->n_zeros <= 0)
{
if (ifr->kind != 3)
@@ -1606,55 +1604,54 @@
if (ifr->kind != 3)
{ /* Butterworth or Chebyshev */
/* generate the remaining zeros */
- while (2 * ds->n_solved_poles - 1 > jt)
+ while (2 * ds->n_solved_poles - 1 > ds->z_counter)
{
if (ifr->type != 3)
{
printf ("adding zero at Nyquist frequency\n");
- jt += 1;
- z[jt].r = -1.0; /* zero at Nyquist frequency */
- z[jt].i = 0.0;
+ ds->z_counter += 1;
+ z[ds->z_counter].r = -1.0; /* zero at Nyquist frequency */
+ z[ds->z_counter].i = 0.0;
}
if ((ifr->type == 2) || (ifr->type == 3))
{
printf ("adding zero at 0 Hz\n");
- jt += 1;
- z[jt].r = 1.0; /* zero at 0 Hz */
- z[jt].i = 0.0;
+ ds->z_counter += 1;
+ z[ds->z_counter].r = 1.0; /* zero at 0 Hz */
+ z[ds->z_counter].i = 0.0;
}
}
}
else
{ /* elliptic */
- while (2 * ds->n_solved_poles - 1 > jt)
+ while (2 * ds->n_solved_poles - 1 > ds->z_counter)
{
- jt += 1;
- z[jt].r = -1.0; /* zero at Nyquist frequency */
- z[jt].i = 0.0;
+ ds->z_counter += 1;
+ z[ds->z_counter].r = -1.0; /* zero at Nyquist frequency */
+ z[ds->z_counter].i = 0.0;
if ((ifr->type == 2) || (ifr->type == 4))
{
- jt += 1;
- z[jt].r = 1.0; /* zero at 0 Hz */
- z[jt].i = 0.0;
+ ds->z_counter += 1;
+ z[ds->z_counter].r = 1.0; /* zero at 0 Hz */
+ z[ds->z_counter].i = 0.0;
}
}
}
printf ("order = %d\n", ds->n_solved_poles);
- int j;
-
/* Expand the poles and zeros into numerator and
* denominator polynomials
*/
- for (icnt=0; icnt < 2; icnt++)
+ int j, icnt;
+ for (icnt = 0; icnt < 2; icnt++)
{
- for (j=0; j < ARRSIZ; j++)
+ for (j = 0; j < ARRSIZ; j++)
{
pp[j] = 0.0;
y[j] = 0.0;
}
pp[0] = 1.0;
- for (j=0; j < ds->n_solved_poles; j++)
+ for (j = 0; j < ds->n_solved_poles; j++)
{
int jj = j;
if (icnt)
@@ -1671,7 +1668,7 @@
}
if (icnt == 0)
{
- for (j=0; j <= ds->n_solved_poles; j++)
+ for (j = 0; j <= ds->n_solved_poles; j++)
aa[j] = pp[j];
}
}
@@ -1732,7 +1729,7 @@
pp[j] = gain * pp[j];
printf ("z plane Denominator Numerator\n");
- for (j=0; j <= ds->n_solved_poles; j++)
+ for (j = 0; j <= ds->n_solved_poles; j++)
{
printf ("%2d %17.9E %17.9E\n", j, aa[j], pp[j]);
}
@@ -1741,7 +1738,7 @@
* so that it can be implemented without stability problems -- stw
*/
printf ("poles and zeros with corresponding quadratic factors\n");
- for (j=0; j < ds->n_solved_poles; j++)
+ for (j = 0; j < ds->n_solved_poles; j++)
{
double a = z[j].r;
double b = z[j].i;
@@ -1857,7 +1854,7 @@
num.i = 0.0;
den.r = 1.0;
den.i = 0.0;
- for (j=0; j < ds->n_solved_poles; j++)
+ for (j = 0; j < ds->n_solved_poles; j++)
{
Csub (&z[j], &x, &w);
Cmul (&w, &den, &den);
Modified: trunk/bse/bseellipticfilter.h
===================================================================
--- trunk/bse/bseellipticfilter.h 2006-10-16 22:17:52 UTC (rev 3978)
+++ trunk/bse/bseellipticfilter.h 2006-10-16 22:35:20 UTC (rev 3979)
@@ -51,6 +51,7 @@
typedef struct {
int n_poles;
int n_zeros;
+ int z_counter; /* incremented as z^N coefficients are found, indexes poles and zeros */
int n_solved_poles;
double gain_scale;
double ripple_epsilon;
@@ -69,6 +70,7 @@
static const DesignState default_design_state = {
.n_poles = 0,
.n_zeros = 0,
+ .z_counter = 0,
.n_solved_poles = 0,
.gain_scale = 0.0,
.ripple_epsilon = 0.0,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]