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

📄 bpf.cpp

📁 以前写的一个切比雪夫带通滤波器及频谱分析显示程序
💻 CPP
字号:
#include "stdafx.h"
#include "BPF.h"
/*********************************
b:分子系数数组指针
a:分母系数数组指针
buflen:滤波器阶数-1,也就是系数数组长度
inputdat:输入数据  
返回:滤波后的数据**********************************/
/*
int BPF30(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	unsigned char mod=256-buflen;
	static unsigned char n=0;
	static double X[8]={0,0,0,0,0,0,0,0};
	static double Y0=0;
	static double Y1=0;
	static double Y2=0;
	static double Y3=0;
	static double Y4=0;
	static double Y5=0;
	static double Y6=0;
	static double Y7=0;
	static char mark=0;
	double A,B;
	unsigned char n_1,n_2,n_3,n_4,n_5,n_6,n_7;
	n_1=(n-1);
	n_1%=mod;
	n_2=(n-2);
	n_2%=mod;
	n_3=(n-3);
	n_3%=mod;
	n_4=(n-4);
	n_4%=mod;
	n_5=(n-5);
	n_5%=mod;
	n_6=(n-6);
	n_6%=mod;
	n_7=(n-7);
	n_7%=mod;
	X[n]=inputdat;

	A=b[0]*X[n]+b[1]*X[n_1]+b[2]*X[n_2]+b[3]*X[n_3]+b[4]*X[n_4]+b[5]*X[n_5]+b[6]*X[n_6];//+b[7]*X[n_7];
	B=a[1]*Y1+a[2]*Y2+a[3]*Y3+a[4]*Y4+a[5]*Y5+a[6]*Y6;//+a[7]*Y7;//+a[0]*Y0;
	Y0=A-B;
//	Y7=Y6;
	Y6=Y5;
	Y5=Y4;Y4=Y3;Y3=Y2;Y2=Y1;Y1=Y0;
	n=(n+1);
	n%=buflen;
	return (short)Y0;
}*/
int BPF30(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
}
int BPF60(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
} 
int BPF100(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
}  
int BPF150(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
}  
int BPF300(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
}  
int BPF500(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
}  
int BPF1k(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
}  
int BPF2k(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
}  
int BPF3k(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
}  
int BPF4k(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
}  
int BPF5k(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
}  
int BPF6k(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
}  
int BPF7k(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
}  
int BPF8k(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
}  
int BPF9k(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
} 
int BPF10k(const double *b,const double *a,unsigned char buflen,int inputdat)
{
	static double X[]={0,0,0,0,0,0,0,0,0,0,0};
	static double Y[]={0,0,0,0,0,0,0,0,0,0,0}; 
	double yn;
	static unsigned char n=0;
	unsigned char m;//=(n-1)%(256-buflen);
	unsigned char kb,ka,i;
	unsigned char mod=256-buflen; 
	X[n]=inputdat;       
	for(i=0,kb=0,ka=1,yn=0;i<buflen;i++)
	{                 
		m=n-kb;
		m%=mod;
		yn+=(b[i]*X[m]);
		
		if(i>0)
		{
			m=n-ka;
			m%=mod;
			yn-=(a[i]*Y[m]);
			ka=(++ka)%buflen;
		}
		
		kb=(++kb)%buflen;
		
	}  
	Y[n]=yn;
	n=(++n)%buflen;
	return ((int)yn);
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -