00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 #ifndef _BIQUAD_H_
00023 #define _BIQUAD_H_
00024 
00025 #include <aversive.h>
00026 #include <stdlib.h>
00027 
00029 struct biquad_filter
00030 {
00031 
00032         int16_t     b0, b1, b2;
00033         int16_t     a1, a2; 
00034   
00035         uint8_t     out_shift;
00036         uint8_t     recursive_shift;
00037 
00038         int32_t     mem_in_1;
00039         int32_t     mem_in_2;
00040         int32_t     mem_out_1;
00041         int32_t     mem_out_2;
00042   
00043         struct biquad_filter * son;
00044   
00045 };
00046 
00047 
00048 
00049 
00056 extern void biquad_init (struct biquad_filter * p);
00057 
00058 
00059 extern void biquad_set_numerator_coeffs  (struct biquad_filter *p, int16_t b0, int16_t b1, int16_t b2);
00060 extern void biquad_set_deniminator_coeffs(struct biquad_filter *p,             int16_t a1, int16_t a2);
00061 
00062 extern void biquad_set_divisor_shifts(struct biquad_filter *p, uint8_t recursive_shift, uint8_t out_shift);
00063 
00076 extern void biquad_set_series_son(struct biquad_filter *p,   struct biquad_filter *son);
00077 
00086 extern void biquad_flush_memories(struct biquad_filter *p);
00087 
00088 
00094 extern int32_t biquad_do_filter(void * data , int32_t in);
00095         
00096         
00097 #endif