Erik van de Coevering
/
Multicopter_2018
Latest version of my quadcopter controller with an LPC1768 and MPU9250.
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Fri Jul 15 2022 02:25:27 by 1.7.2