Latest version of my quadcopter controller with an LPC1768 and MPU9250.

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers LPfilter.cpp Source File

LPfilter.cpp

00001 // Coded by Erik van de Coevering 
00002 // DSP-style low-pass IIR filters designed with Matlab's FDAtool. 
00003 // For information on how to implement these filters, check this pdf: http://spinlab.wpi.edu/courses/ece4703_2009/how_to_interpret_matlab_dfii_sos.pdf
00004 
00005 #include "LPfilter.h"
00006 /*
00007 float LPfilter::run(float input) {
00008     filterbuffer[2] = filterbuffer[1];
00009     filterbuffer[1] = filterbuffer[0];
00010     filterbuffer[0] = input*LP_A + filterbuffer[1]*LP_B + filterbuffer[2]*LP_C;
00011 
00012     out = filterbuffer[0]*LP_D + filterbuffer[1]*LP_E + filterbuffer[2]*LP_F;
00013     return out;
00014 }
00015 
00016 float LPfilter2::run(float input) {
00017     filterbuffer1[2] = filterbuffer1[1];
00018     filterbuffer1[1] = filterbuffer1[0];
00019     filterbuffer1[0] = input*0.003762202981699 + filterbuffer1[1]*1.893415601023 + filterbuffer1[2]*-0.9084644129493;
00020     
00021     out_temp = filterbuffer1[0] + filterbuffer1[1]*2.0f + filterbuffer1[2];
00022     
00023     filterbuffer2[2] = filterbuffer2[1];
00024     filterbuffer2[1] = filterbuffer2[0];
00025     filterbuffer2[0] = out_temp*0.003533495923378 + filterbuffer2[1]*1.778313488139 + filterbuffer2[2]*-0.7924474718329;
00026     
00027     out = filterbuffer2[0] + filterbuffer2[1]*2.0f + filterbuffer2[2];
00028     return out;
00029 }
00030 
00031 float LPfilter2_1::run(float input) {
00032     filterbuffer1[2] = filterbuffer1[1];
00033     filterbuffer1[1] = filterbuffer1[0];
00034     filterbuffer1[0] = input*0.007954132308248 + filterbuffer1[1]*1.836787188551 + filterbuffer1[2]*-0.8686037177835;
00035     
00036     out_temp = filterbuffer1[0] + filterbuffer1[1]*2.0f + filterbuffer1[2];
00037     
00038     filterbuffer2[2] = filterbuffer2[1];
00039     filterbuffer2[1] = filterbuffer2[0];
00040     filterbuffer2[0] = out_temp*0.007277930990548 + filterbuffer2[1]*1.680637168775 + filterbuffer2[2]*-0.7097488927369;
00041     
00042     out = filterbuffer2[0] + filterbuffer2[1]*2.0f + filterbuffer2[2];
00043     return out;
00044 }
00045 */
00046 //8th order IIR filter, with Fs = 1500Hz and Fc = 45Hz
00047 
00048 float LPfilter8::run(float input) {
00049     filterbuffer1[2] = filterbuffer1[1];
00050     filterbuffer1[1] = filterbuffer1[0];
00051     filterbuffer1[0] = input*0.008544036438708 + filterbuffer1[1]*1.895289756537 + filterbuffer1[2]*-0.9294659022914;
00052     
00053     out_temp1 = filterbuffer1[0] + filterbuffer1[1]*2.0f + filterbuffer1[2];
00054     
00055     filterbuffer2[2] = filterbuffer2[1];
00056     filterbuffer2[1] = filterbuffer2[0];
00057     filterbuffer2[0] = out_temp1*0.008021326615853 + filterbuffer2[1]*1.779339107215 + filterbuffer2[2]*-0.811424413678;
00058     
00059     out_temp2 = filterbuffer2[0] + filterbuffer2[1]*2.0f + filterbuffer2[2];
00060     
00061     filterbuffer3[2] = filterbuffer3[1];
00062     filterbuffer3[1] = filterbuffer3[0];
00063     filterbuffer3[0] = out_temp2*0.007662537043122 + filterbuffer3[1]*1.699750237618 + filterbuffer3[2]*-0.7304003857905;
00064     
00065     out_temp3 = filterbuffer3[0] + filterbuffer3[1]*2.0f + filterbuffer3[2];
00066     
00067     filterbuffer4[2] = filterbuffer4[1];
00068     filterbuffer4[1] = filterbuffer4[0];
00069     filterbuffer4[0] = out_temp3*0.007481430998498 + filterbuffer4[1]*1.659576201179 + filterbuffer4[2]*-0.6895019251732;
00070     
00071     out = filterbuffer4[0] + filterbuffer4[1]*2.0f + filterbuffer4[2];
00072     
00073     return out;
00074 }