Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
wavejumper
Date:
Sun Jan 28 12:38:34 2018 +0000
Commit message:
FIR_Filter mixed-c/asm (not working yet)

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 76eeca7a361f main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Jan 28 12:38:34 2018 +0000
@@ -0,0 +1,90 @@
+#include "mbed.h"
+
+/*LPF cut off frequency 600Hz(3rd Order with 20kHz sampling frequency)*/
+AnalogIn Ain(p15);
+AnalogOut Aout(p18);
+
+float data_in,data_out;
+
+Ticker s1_khz_tick;
+
+__ASM int addi(int a, int b)
+{
+    ADDS R0, R1
+    BX LR
+}
+
+__ASM int multi(int a, int b)
+{
+    MUL R0, R1
+    BX LR
+}
+
+__ASM int move(int a, int b)
+{
+    MOV R0, R1
+    BX LR
+}
+
+float LPF(float LPF_in)
+{
+
+    //------------------------------FIR ----------------------------------------------------
+    float fda_coeff[16] = {0.00028360651120682420830293457569837301,
+                           0.00822761997979659653879025427158921957,
+                           0.009652502067820697279065811358123028185,
+                           -0.020505027860776389725394608376518590376,
+                           -0.055082214281865632399259880003228317946,
+                           0.001759656378417649713608028605449362658,
+                           0.187202210776797661750947554537560790777,
+                           0.369320487034980882157242376706562936306,
+                           0.369320487034980882157242376706562936306,
+                           0.187202210776797661750947554537560790777,
+                           0.001759656378417649713608028605449362658,
+                           -0.055082214281865632399259880003228317946,
+                           -0.020505027860776389725394608376518590376,
+                           0.009652502067820697279065811358123028185,
+                           0.00822761997979659653879025427158921957,
+                           0.00028360651120682420830293457569837301
+                          };
+
+    static float LPF_out;                     //the return variable/outbput of filter
+    static float x[12], y, z[12];
+
+    for (int i = 10; i >= 0; i--) {
+        x[i+1] = move(x[i+1], x[i]);
+    }
+
+    x[0] = move(x[0], LPF_in);
+
+    for (int i = 0; i < 12; i++) {
+        z[i] = multi(fda_coeff[i], x[i]);
+    }
+
+    for (int i = 0; i < 12; i++) {
+        y = addi(z[i], y);
+    }
+
+    LPF_out = move(LPF_out, y);
+    return LPF_out; //output filtered value
+}
+
+void s1khz_task(void)
+{
+    data_in = Ain - 0.5;   //Note the embed can only accept positive voltage inputs, it is necessary to add a small coupling and biasing circuit to
+    //offset the signal midway of approx 1.65V.
+    //A DC offset is a frequency component at 0 Hz. This can cause signal to wander.
+    //Therefore the mean value of the signal is subtracted.This is also to normalize the signal to an average value of zero,
+    //and allows the filter algorithm to perform DSP with no DC offset in the data.
+
+    data_out = LPF(data_in);
+    Aout = data_out + 0.5;
+}
+
+int main()
+{
+    s1_khz_tick.attach_us(&s1khz_task,1000); //1kHz sampling
+
+    while(1);
+
+}
\ No newline at end of file
diff -r 000000000000 -r 76eeca7a361f mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sun Jan 28 12:38:34 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/7130f322cb7e
\ No newline at end of file