3 This file is part of a program that implements a Software-Defined Radio.
5 Copyright (C) 2004 by Frank Brickle, AB2KT and Bob McGwier, N4HY
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 The authors can be reached by email at
29 The DTTS Microwave Society
37 ChAp_eval(ChAp ca, REAL x, BOOLEAN *err) {
41 if (x < ChApLob(ca)) {
44 } else if (x > ChApHib(ca)) {
47 } else if (err) *err = FALSE;
50 u = (2.0 * x - ChApDif(ca)) / ChApDif(ca);
52 for (i = ChApLen(ca) - 1; i > 0; --i) {
54 d = v * d - e + ChApCoef(ca, i);
58 return u * d - e + 0.5 * ChApCoef(ca, 0);
63 int i, j, n = ChApLen(ca);
64 REAL (*func)(REAL) = ChApFunc(ca),
65 bma = 0.5 * (ChApHib(ca) - ChApLob(ca)),
66 bpa = 0.5 * (ChApHib(ca) + ChApLob(ca)),
68 *tbl = newvec_REAL(n, ChApTag(ca));
69 for (j = 0; j < n; j++) {
70 REAL y = cos(M_PI * (j + 0.5) / n);
71 tbl[j] = (*func)(y * bma + bpa);
73 for (i = 0; i < n; i++) {
75 for (j = 0; j < n; j++)
76 sum += tbl[j] * cos((M_PI * i) * ((j + 0.5) / n));
77 ChApCoef(ca, i) = fac * sum;
84 newChAp(REAL (*func)(REAL arg),
89 ChAp ca = (ChAp) safealloc(1, sizeof(ChApDesc), tag);
94 ChApDif(ca) = hi - lo;
95 ChApCoefBase(ca) = newvec_REAL(len, tag);
96 ChApTag(ca) = strdup(tag);
103 safefree((char *) ChApCoefBase(ca));
104 safefree(ChApTag(ca));
105 safefree((char *) ca);