⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filter_compu.c

📁 ADI公司的ADSP21065L的专业数字音频处理器的源代码
💻 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 + -