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