summaryrefslogtreecommitdiff
path: root/apps/eq.c
diff options
context:
space:
mode:
authorDan Everton <dan@iocaine.org>2006-03-09 09:40:03 +0000
committerDan Everton <dan@iocaine.org>2006-03-09 09:40:03 +0000
commit62441704e7ef623c5350f3f306513ca03f4addd6 (patch)
tree85d9f2a0a9861e600e6ecd0372ad0345cea5f341 /apps/eq.c
parentaa830112cce5078b29217d01bb74255bd2517fa0 (diff)
downloadrockbox-62441704e7ef623c5350f3f306513ca03f4addd6.tar.gz
rockbox-62441704e7ef623c5350f3f306513ca03f4addd6.zip
C implementation of eq filter. Allows equalizer to be used in the simulator. Code from preglow.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8973 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/eq.c')
-rw-r--r--apps/eq.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/apps/eq.c b/apps/eq.c
index eecfc650d9..0a835d5484 100644
--- a/apps/eq.c
+++ b/apps/eq.c
@@ -217,12 +217,28 @@ void eq_hs_coefs(unsigned long cutoff, unsigned long Q, long db, long *c)
217void eq_filter(long **x, struct eqfilter *f, unsigned num, 217void eq_filter(long **x, struct eqfilter *f, unsigned num,
218 unsigned channels, unsigned shift) 218 unsigned channels, unsigned shift)
219{ 219{
220 /* TODO: Implement generic filtering routine. */ 220 unsigned c, i;
221 (void)x; 221 long long acc;
222 (void)f; 222
223 (void)num; 223 /* Direct form 1 filtering code.
224 (void)channels; 224 y[n] = b0*x[i] + b1*x[i - 1] + b2*x[i - 2] + a1*y[i - 1] + a2*y[i - 2],
225 (void)shift; 225 where y[] is output and x[] is input.
226 */
227
228 for (c = 0; c < channels; c++) {
229 for (i = 0; i < num; i++) {
230 acc = (long long) x[c][i] * f->coefs[0];
231 acc += (long long) f->history[c][0] * f->coefs[1];
232 acc += (long long) f->history[c][1] * f->coefs[2];
233 acc += (long long) f->history[c][2] * f->coefs[3];
234 acc += (long long) f->history[c][3] * f->coefs[4];
235 f->history[c][1] = f->history[c][0];
236 f->history[c][0] = x[c][i];
237 f->history[c][3] = f->history[c][2];
238 x[c][i] = (acc << shift) >> 32;
239 f->history[c][2] = x[c][i];
240 }
241 }
226} 242}
227#endif 243#endif
228 244