summaryrefslogtreecommitdiff
path: root/src/filt/filt_5th.c
diff options
context:
space:
mode:
authorFreeArtMan <dos21h@gmail.com>2016-05-08 16:02:01 +0100
committerFreeArtMan <dos21h@gmail.com>2016-05-08 16:02:01 +0100
commite42911405c4bc2f8c097f47d4598baf8522ef3da (patch)
tree9eb767c5e6a4443e8773b18ea76cf4216f6c8758 /src/filt/filt_5th.c
parent9b95088bddcf1f83e3a8f73f08f49b38ecb0f500 (diff)
downloadradiola-master.tar.gz
radiola-master.zip
Moved source to src directoryHEADmaster
Diffstat (limited to 'src/filt/filt_5th.c')
-rw-r--r--src/filt/filt_5th.c32
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;
+}