c实现matlab自带的filter函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
27.
}
28.
else
29.
{
30.
y[i] += (b[j]*x[i-j]-a[j]*y[i-j]);
31.
}
32.
}
33.
// if(zi&&i<nfilt-1) y[i] += zi[i]; //zi[i],查分方程可以不计,滤波的表
达式 1.[y, zf] = filter(b ,a, X) 2.[y, zf] = filter(b, a, X, zi)
14.
}
15. }
16.
17. memset(y,0,xlen*sizeof(double));
18.
19. a[0]=0.0;
20. for(i=0;i<xlen;i++)
21. {
22.
for(j=0;i>=j&&j<nfilt;j++)
23.
{
24.
y[i] += (b[j]*x[i-j]-a[j]*y[i-j]);
15. }
16.
17. memset(y,0,xlen*sizeof(double));
18.
19. a[0]=0.0;
20. for(i=0;i<xlen;i++)
21. {
22.
for(j=0;i>=j&&j<nfilt;j++)
23.
{
24.
if(j>0)
25.
{
26.
y[i] += -a[j]*y[i-j];
25.
}
26.
// if(zi&&i<nfilt-1) y[i] += zi[i]; //zi[i],查分方程可以不计,滤波的表
达式 1.[y, zf] = filter(b ,a, X) 2.[y, zf] = b, a, X, zi)
27. }
28. a[0]=1.0;
29.
30. }
2.y=filter(1, a, x);/////// 1.函数外部调用定义 b[1]={1} 2.里面的改上面关于 b[i]的循环运算, 只处理只有的 b[0]
[html] view plain copy print?
1. void filter(const double* x, double* y, int xlen, double* a, double* b, int
34. }
35. a[0]=1.0;
36.
37. }
nfilt)
2. {
3.
double tmp;
4.
int i,j;
5.
6.
//normalization
7.
if( (*a-1.0>EPS) || (*a-1.0<-EPS) )
8.
{
9.
tmp=*a;
10.
for(i=0;i<nfilt;i++)
11.
{
12.
b[i]/=tmp;
13.
a[i]/=tmp;
nfilt)
2. {
3.
double tmp;
4.
int i,j;
5.
6.
//normalization
7.
if( (*a-1.0>EPS) || (*a-1.0<-EPS) )
8.
{
9.
tmp=*a;
10.
for(i=0;i<nfilt;i++)
11.
{
12.
a[i]/=tmp;
13.
}
14.
b[0]/=tmp;
1.y = filter(b, a, x);
filter(x, y, length, a, b, nfilt);//length 为 x 的大小,nfilt 为滤波器的大小
[html] view plain copy print?
1. void filter(const double* x, double* y, int xlen, double* a, double* b, int