diff options
Diffstat (limited to 'src/filt/filt_5th.c')
-rw-r--r-- | src/filt/filt_5th.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/filt/filt_5th.c b/src/filt/filt_5th.c new file mode 100644 index 0000000..23d5aab --- /dev/null +++ b/src/filt/filt_5th.c @@ -0,0 +1,32 @@ +#include "filt.h" + +void f_5th(int16_t *data, int length, int16_t *hist) +/* for half of interleaved data */ +{ + int i; + int16_t a, b, c, d, e, f; + a = hist[1]; + b = hist[2]; + c = hist[3]; + d = hist[4]; + e = hist[5]; + f = data[0]; + /* a downsample should improve resolution, so don't fully shift */ + data[0] = (a + (b+e)*5 + (c+d)*10 + f) >> 4; + for (i=4; i<length; i+=4) { + a = c; + b = d; + c = e; + d = f; + e = data[i-2]; + f = data[i]; + data[i/2] = (a + (b+e)*5 + (c+d)*10 + f) >> 4; + } + /* archive */ + hist[0] = a; + hist[1] = b; + hist[2] = c; + hist[3] = d; + hist[4] = e; + hist[5] = f; +} |