📄 filter_compu.c
字号:
#include <signal.h>
#include <def21065l.h>
#include <21060.h>
#include <signal.h>
#include <sport.h>
#include <macros.h>
#include <math.h>
#include <filters.h>
#include <trans.h>
#include "functions.h"
#include "myhead.h"
extern float sample;
////////2 band///////////
void lp_fil_buttwith_2or(float fc,float g,float *a_coeff,float *b_coeff)
{
float wc,wc2;
float c0,c1;
wc=tan(PI*fc/fs);
g=1.4142136;
wc2=wc*wc;
c0=1+g*wc+wc*wc;
c1=g*wc;
// b_eq_1[2]=wc2/c0; b_eq_1[1]=2*b_eq_1[2]; b_eq_1[0]=b_eq_1[2];
*(b_coeff+2)=wc2/c0; *(b_coeff+1)=2* *(b_coeff+2); *(b_coeff)=*(b_coeff+2);
// a_eq_1[2]=1; a_eq_1[1]=2*(1-wc2)/c0; a_eq_1[0]=(c1-1-wc2)/c0;
*(a_coeff+2)=1; *(a_coeff+1)=2*(1-wc2)/c0; *(a_coeff)=(c1-1-wc2)/c0;
}
////////2 band///////////
void hp_fil_buttwith_2or(float fc,float g,float *a_coeff,float *b_coeff)
{
float wc,wc2;
float c0,c1;
wc=tan(PI*fc/fs);
g=1.4142136;
wc2=wc*wc;
c0=1+g*wc+wc*wc;
c1=g*wc;
// b_eq_1[2]=1/c0; b_eq_1[1]=-2*b_eq_1[2], b_eq_1[0]=b_eq_1[2];
*(b_coeff+2)=1/c0; *(b_coeff+1)=-2* *(b_coeff+2), *(b_coeff)=*(b_coeff+2);
// a_eq_1[2]=1; a_eq_1[1]=2*(1-wc2)/c0; a_eq_1[0]=(c1-1-wc2)/c0;
*(a_coeff+2)=1; *(a_coeff+1)=2*(1-wc2)/c0; *(a_coeff)=(c1-1-wc2)/c0;
}
/////////4 band lowpass buttwith////////////
void lp_fil_buttwith_4or(float fc,float *a_coeff,float *b_coeff)
{
float wc,wc2;
float c0,c1,c2,c3,c4;
float g1=2.6131259,g2=3.4142136;
wc=tan(PI*fc/fs);
wc2=wc*wc;
c1=g1*wc*(1+wc2);
c2=g1*wc*(1-wc2);
c3=wc2*(g2+wc2);
c4=2*wc2*wc2;
c0=1+c1+c3;
// b_filter1[4]=wc2*wc2/c0; a_filter1[4]=1;
*(b_coeff+4)=wc2*wc2/c0; *(a_coeff+4)=1;
// b_filter1[3]=4*b_filter1[4]; a_filter1[3]=2*(2+c2-c4)/c0;
*(b_coeff+3)=4* *(b_coeff+4); *(a_coeff+3)=2*(2+c2-c4)/c0;
// b_filter1[2]=6*b_filter1[4]; a_filter1[2]=-2*(3-c3+2*c4)/c0;
*(b_coeff+2)=6* *(b_coeff+4); *(a_coeff+2)=-2*(3-c3+2*c4)/c0;
// b_filter1[1]=b_filter1[3]; a_filter1[1]=2*(2-c2-c4)/c0;
*(b_coeff+1)=*(b_coeff+3); *(a_coeff+1)=2*(2-c2-c4)/c0;
// b_filter1[0]=b_filter1[4]; a_filter1[0]=-(1-c1+c3)/c0;
*(b_coeff)=*(b_coeff+4); *(a_coeff)=-(1-c1+c3)/c0;
}
/////////4 band highpass buttwith////////////
void hp_fil_buttwith_4or(float fc,float *a_coeff,float *b_coeff)
{
float wc,wc2;
float c0,c1,c2,c3,c4;
float g1=2.6131259,g2=3.4142136;
wc=tan(PI*fc/fs);
wc2=wc*wc;
c1=g1*wc*(1+wc2);
c2=g1*wc*(1-wc2);
c3=wc2*(g2+wc2);
c4=2*wc2*wc2;
c0=1+c1+c3;
// b_filter1[4]=1/c0; a_filter1[4]=1;
*(b_coeff+4)=1/c0; *(a_coeff+4)=1;
// b_filter1[3]=-4*b_filter1[4]; a_filter1[3]=2*(2+c2-c4)/c0;
*(b_coeff+3)=-4* *(b_coeff+4); *(a_coeff+3)=2*(2+c2-c4)/c0;
// b_filter1[2]=6*b_filter1[4]; a_filter1[2]=-2*(3-c3+2*c4)/c0;
*(b_coeff+2)=6* *(b_coeff+4); *(a_coeff+2)=-2*(3-c3+2*c4)/c0;
// b_filter1[1]=b_filter1[3]; a_filter1[1]=2*(2-c2-c4)/c0;
*(b_coeff+1)=*(b_coeff+3); *(a_coeff+1)=2*(2-c2-c4)/c0;
// b_filter1[0]=b_filter1[4]; a_filter1[0]=-(1-c1+c3)/c0;
*(b_coeff)=*(b_coeff+4); *(a_coeff)=-(1-c1+c3)/c0;
}
////////2 band///////////
void lp_fil_bessel_2or(float fc,float *a_coeff,float *b_coeff)
{
float wc,wc2;
float c0;
wc=tan(PI*fc/fs);
wc2=wc*wc;
c0=1/3+wc+wc*wc;
// b_eq_1[2]=wc2/c0; b_eq_1[1]=2*b_eq_1[2]; b_eq_1[0]=b_eq_1[2];
*(b_coeff+2)=wc2/c0; *(b_coeff+1)=2* *(b_coeff+2); *(b_coeff)=*(b_coeff+2);
// a_eq_1[2]=1; a_eq_1[1]=2*(1/3-wc2)/c0; a_eq_1[0]=(wc-1/3-wc2)/c0;
*(a_coeff+2)=1; *(a_coeff+1)=2*(1/3-wc2)/c0; *(a_coeff)=(wc-1/3-wc2)/c0;
}
////////2 band///////////
void hp_fil_bessel_2or(float fc,float *a_coeff,float *b_coeff)
{
float wc,wc2;
float c0;
wc=tan(PI*fc/fs);
wc2=wc*wc;
c0=1+wc+wc*wc/3;
// b_eq_1[2]=1/c0; b_eq_1[1]=-2*b_eq_1[2]; b_eq_1[0]=b_eq_1[2];
*(b_coeff+2)=1/c0; *(b_coeff+1)=-2* *(b_coeff+2); *(b_coeff)=*(b_coeff+2);
// a_eq_1[2]=1; a_eq_1[1]=2*(1-wc2/3)/c0; a_eq_1[0]=(wc-1-wc2/3)/c0;
*(a_coeff+2)=1; *(a_coeff+1)=2*(1-wc2/3)/c0; *(a_coeff)=(wc-1-wc2/3)/c0;
}
////////4 band highpass///////////
void hp_fil_bessel_4or(float fc,float *a_coeff,float *b_coeff)
{
float wc,wc2;
float c0,c4;
float g1,g2,g3;
wc=tan(pi*fc/fs);
wc2=wc*wc;
c4=wc2*wc2;
g1=3./7.;
g2=2./21.;
g3=1./105.;
c0=1.+wc+g1*wc2+g2*wc*wc2+g3*c4;
// b_filter1[4]=1/c0; a_filter1[4]=1.;
*(b_coeff+4)=1/c0; *(a_coeff+4)=1.;
// b_filter1[3]=-4*b_filter1[4]; a_filter1[3]=2.*(2+wc-g2*wc*wc2-2*g3*c4)/c0;
*(b_coeff+3)=-4* *(b_coeff+4); *(a_coeff+3)=2.*(2+wc-g2*wc*wc2-2*g3*c4)/c0;
// b_filter1[2]=6*b_filter1[4]; a_filter1[2]=-2.*(3.-g1*wc2+3*g3*c4)/c0;
*(b_coeff+2)=6* *(b_coeff+4); *(a_coeff+2)=-2.*(3.-g1*wc2+3*g3*c4)/c0;
// b_filter1[1]=b_filter1[3]; a_filter1[1]=2*(2-wc+g2*wc*wc2-2*g3*c4)/c0;
*(b_coeff+1)=*(b_coeff+3); *(a_coeff+1)=2*(2-wc+g2*wc*wc2-2*g3*c4)/c0;
// b_filter1[0]=b_filter1[4]; a_filter1[0]=(wc-1-g1*wc2+g2*wc*wc2-g3*c4)/c0;
*(b_coeff)=*(b_coeff+4); *(a_coeff)=(wc-1-g1*wc2+g2*wc*wc2-g3*c4)/c0;
}
////////4 band lowhpass///////////
void lp_fil_bessel_4or(float fc,float *a_coeff,float *b_coeff)
{
float wc,wc2;
float c0,c4;
float g1,g2,g3;
wc=tan(pi*fc/fs);
wc2=wc*wc;
c4=wc2*wc2;
g1=3./7.;
g2=2./21.;
g3=1./105.;
c0=g3+g2*wc+g1*wc2+wc*wc2+c4;
// b_filter1[4]=c4/c0; a_filter1[4]=1.;
*(b_coeff+4)=c4/c0; *(a_coeff+4)=1.;
// b_filter1[3]=4*b_filter1[4]; a_filter1[3]=2.*(2*g3+g2*wc-wc*wc2-2*c4)/c0;
*(b_coeff+3)=4* *(b_coeff+4); *(a_coeff+3)=2.*(2*g3+g2*wc-wc*wc2-2*c4)/c0;
// b_filter1[2]=6*b_filter1[4]; a_filter1[2]=-2.*(3.*g3-g1*wc2+3*c4)/c0;
*(b_coeff+2)=6* *(b_coeff+4); *(a_coeff+2)=-2.*(3.*g3-g1*wc2+3*c4)/c0;
// b_filter1[1]=b_filter1[3]; a_filter1[1]=2*(2*g3-g2*wc+wc*wc2-2*c4)/c0;
*(b_coeff+1)=*(b_coeff+3); *(a_coeff+1)=2*(2*g3-g2*wc+wc*wc2-2*c4)/c0;
// b_filter1[0]=b_filter1[4]; a_filter1[0]=(-g3+g2*wc-g1*wc2+wc*wc2-c4)/c0;
*(b_coeff)=*(b_coeff+4); *(a_coeff)=(-g3+g2*wc-g1*wc2+wc*wc2-c4)/c0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -