设计中用到的函数语句:
void filtery(b,a,m,n,x,len,px,py)
其中:
b---双精度实型一文数组,长度为(m+1).存放滤波器分子多项式的系数b(i).
a---双精度实型一文数组,长度为(n+1).存放滤波器分母多项式的系数a(i).
m---整型变量.滤波器分子多项式的阶数.
n---整型变量.滤波器分母多项式的阶数.
x---双精度实型一文数组,长度为len.开始时存放滤波器的输入序列,最后存放滤波器的输出序列;在分块处理时,它用于表示当前块内的滤波器的输入序列与输出序列.
len---整型变量.输入序列与输出序列的长度;在分块处理时,它用于表示块的长度.
px---双精度实型一文数组,长度为(m+1).在分块算题时,它用于保存前一块滤波时的(m+1)个输入序列值.
py---双精度实型一文数组,长度为(n+1).在分块算题时,它用于保存前一块滤波时的n个输出序列值.
当输入序列x(k)很长时,由于计算机内存的限制,常将其分成彼此衔接的若干块进行处理.数组px与py就是专为分块处理而设置的.px用于保存前一块滤波时的(m+1)个输入序列值,即px[]={x(k),x(k-1),...,x(k-m)};py用于保存前一块滤波时的n 个输出序列值,即py[]={y(k-1),y(k-2),...,y(k-n)}.通常,我们假定滤波器的初始条件为零,因此数组px[]与py[]在滤波前都要初始化为零.
代码为:
#include "math.h"
void filtery(b,a,m,n,x,len,px,py)
int m,n,len;
double a[],b[],x[],px[],py[];
{
int k,i;
for(k=0;k<len;k++)
{
px[0]=x[k];
x[k]=0.0;
for(i=0;i<=m;i++)
{x[k]=x[k]+b[i]*px[i];}
for(i=0;i<=n;i++)
{x[k]=x[k]-a[i]*py[i];}
if(fabs(x[k])>1.0e10)
{printf("This is an unstable filter!\n");
exit(0);}
for(i=m;i>=1;i--)
{px[i]=px[i-1];}
for(i=n;i>=2;i--)
{py[i]=py[i-1];}
py[1]=x[k];
}
}
<< 上一页 [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] ... 下一页 >>