FIR滤波的起始从零开始上升那段有没有办法避免掉?
程序如下:void fir_filter(float b[],float c[])
{
int i,j=0;
float sum;
float h[21]={
-0.09055792262407, 0.009744804975761, 0.01838867509003, 0.03195961694651,
0.04917012260358, 0.06836127325356, 0.08774901331544, 0.1053433191277,
0.1194310387162, 0.128484986607, 0.1316381457976, 0.128484986607,
0.1194310387162, 0.1053433191277, 0.08774901331544, 0.06836127325356,
0.04917012260358, 0.03195961694651, 0.01838867509003, 0.009744804975761,
-0.09055792262407
};
for(i=0;i<300;i++)
{
sum=0.0;
for(j=0;j<21;j++)
{
if(i >= j)
sum+=h[j]*b[i-j];
else
;
}
c[i]=sum;
}
mangui zhang:
你这波形怎么看到的 在matlab中还是?
有些软件中都是从0开始的
fir的话 你修改参数 让整体右移
FIR滤波的起始从零开始上升那段有没有办法避免掉?
程序如下:void fir_filter(float b[],float c[])
{
int i,j=0;
float sum;
float h[21]={
-0.09055792262407, 0.009744804975761, 0.01838867509003, 0.03195961694651,
0.04917012260358, 0.06836127325356, 0.08774901331544, 0.1053433191277,
0.1194310387162, 0.128484986607, 0.1316381457976, 0.128484986607,
0.1194310387162, 0.1053433191277, 0.08774901331544, 0.06836127325356,
0.04917012260358, 0.03195961694651, 0.01838867509003, 0.009744804975761,
-0.09055792262407
};
for(i=0;i<300;i++)
{
sum=0.0;
for(j=0;j<21;j++)
{
if(i >= j)
sum+=h[j]*b[i-j];
else
;
}
c[i]=sum;
}
jianfa cai:
回复 mangui zhang:
这是我对DSP28335的直流ADC输入进行滤波后的结果,理想应该是一条直线才对,但是FIR滤波刚开始等于滤波器长度的那段我觉得本身滤波算法有缺陷
FIR滤波的起始从零开始上升那段有没有办法避免掉?
程序如下:void fir_filter(float b[],float c[])
{
int i,j=0;
float sum;
float h[21]={
-0.09055792262407, 0.009744804975761, 0.01838867509003, 0.03195961694651,
0.04917012260358, 0.06836127325356, 0.08774901331544, 0.1053433191277,
0.1194310387162, 0.128484986607, 0.1316381457976, 0.128484986607,
0.1194310387162, 0.1053433191277, 0.08774901331544, 0.06836127325356,
0.04917012260358, 0.03195961694651, 0.01838867509003, 0.009744804975761,
-0.09055792262407
};
for(i=0;i<300;i++)
{
sum=0.0;
for(j=0;j<21;j++)
{
if(i >= j)
sum+=h[j]*b[i-j];
else
;
}
c[i]=sum;
}
whisper luther:
回复 jianfa cai:
采样刚开始 的时候,你的数组没写入值的时候,滤波出来当然是0。
FIR滤波的起始从零开始上升那段有没有办法避免掉?
程序如下:void fir_filter(float b[],float c[])
{
int i,j=0;
float sum;
float h[21]={
-0.09055792262407, 0.009744804975761, 0.01838867509003, 0.03195961694651,
0.04917012260358, 0.06836127325356, 0.08774901331544, 0.1053433191277,
0.1194310387162, 0.128484986607, 0.1316381457976, 0.128484986607,
0.1194310387162, 0.1053433191277, 0.08774901331544, 0.06836127325356,
0.04917012260358, 0.03195961694651, 0.01838867509003, 0.009744804975761,
-0.09055792262407
};
for(i=0;i<300;i++)
{
sum=0.0;
for(j=0;j<21;j++)
{
if(i >= j)
sum+=h[j]*b[i-j];
else
;
}
c[i]=sum;
}
jianfa cai:
回复 whisper luther:
whisper luther
采样刚开始 的时候,你的数组没写入值的时候,滤波出来当然是0。
FIR滤波的起始从零开始上升那段有没有办法避免掉?
程序如下:void fir_filter(float b[],float c[])
{
int i,j=0;
float sum;
float h[21]={
-0.09055792262407, 0.009744804975761, 0.01838867509003, 0.03195961694651,
0.04917012260358, 0.06836127325356, 0.08774901331544, 0.1053433191277,
0.1194310387162, 0.128484986607, 0.1316381457976, 0.128484986607,
0.1194310387162, 0.1053433191277, 0.08774901331544, 0.06836127325356,
0.04917012260358, 0.03195961694651, 0.01838867509003, 0.009744804975761,
-0.09055792262407
};
for(i=0;i<300;i++)
{
sum=0.0;
for(j=0;j<21;j++)
{
if(i >= j)
sum+=h[j]*b[i-j];
else
;
}
c[i]=sum;
}
whisper luther:
回复 jianfa cai:
那个, 假设b [ ] = {1,1,1,1,…..};
两个for循环中,i是慢慢 增大的,相当于当 i< j 时,一直在对 h[ ] 做累加,所以sum 是慢慢增大的。
i > j 时, h [ ] 的累加就达成定值了,变成直线。
从i = 21(j 的最大值开始)到300,应该就不会出现这种现象了吧。
FIR滤波的起始从零开始上升那段有没有办法避免掉?
程序如下:void fir_filter(float b[],float c[])
{
int i,j=0;
float sum;
float h[21]={
-0.09055792262407, 0.009744804975761, 0.01838867509003, 0.03195961694651,
0.04917012260358, 0.06836127325356, 0.08774901331544, 0.1053433191277,
0.1194310387162, 0.128484986607, 0.1316381457976, 0.128484986607,
0.1194310387162, 0.1053433191277, 0.08774901331544, 0.06836127325356,
0.04917012260358, 0.03195961694651, 0.01838867509003, 0.009744804975761,
-0.09055792262407
};
for(i=0;i<300;i++)
{
sum=0.0;
for(j=0;j<21;j++)
{
if(i >= j)
sum+=h[j]*b[i-j];
else
;
}
c[i]=sum;
}
jianfa cai:
回复 whisper luther:
whisper luther
那个, 假设b [ ] = {1,1,1,1,…..};
两个for循环中,i是慢慢 增大的,相当于当 i< j 时,一直在对 h[ ] 做累加,所以sum 是慢慢增大的。
i > j 时, h [ ] 的累加就达成定值了,变成直线��
从i = 21(j 的最大值开始)到300,应该就不会出现这种现象了吧。