This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
FIR滤波的起始从零开始上升那段有没有办法避免掉?
{
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;
}
数组没问题的,就是一个含有噪声的直流,没有那个上升沿。这个是因为FIR滤波前面都会有N/2的无效数据,但是我不知道为什么我的无效数据有N个。whisper luther 说:采样刚开始 的时候,你的数组没写入值的时候,滤波出来当然是0。
那个, 假设b [ ] = {1,1,1,1,.....};
两个for循环中,i是慢慢 增大的,相当于当 i< j 时,一直在对 h[ ] 做累加,所以sum 是慢慢增大的。
i > j 时, h [ ] 的累加就达成定值了,变成直线。
从i = 21(j 的最大值开始)到300,应该就不会出现这种现象了吧。
这是个固有问题,需要进行端点延拓才能解决,但是我不知道为什么我这样的无效数据有N个,有些人说只有N/2个whisper luther 说:那个, 假设b [ ] = {1,1,1,1,.....};
两个for循环中,i是慢慢 增大的,相当于当 i< j 时,一直在对 h[ ] 做累加,所以sum 是慢慢增大的。
i > j 时, h [ ] 的累加就达成定值了,变成直线��
从i = 21(j 的最大值开始)到300,应该就不会出现这种现象了吧。