【发布时间】:2013-09-30 11:40:14
【问题描述】:
我有一个用 C 语言实现 FIR 滤波器的作业,我想知道您是否认为我正确理解了这个任务。我写的我认为解决问题的程序是:
#include <stdio.h>
float FIRfloats[5];
void floatFIR(float newsample)
{
int i;
float sum=0;
FIRfloats[0]=newsample*0.0299;
FIRfloats[1]=FIRfloats[2]*0.4701;
FIRfloats[2]=FIRfloats[3]*0.4701;
FIRfloats[3]=FIRfloats[4]*0.0299;
/* sum */
for(i=0;i<5;i++)
{
sum=sum+FIRfloats[i];
}
printf("Sum: %f\n", sum);
}
int main ()
{
float n=0.0f;
while (scanf("%f", &n) > 0)
{
floatFIR(n);
}
return 0;
}
规范是
在新样本 xk 到达之前,旧样本被转移到 右,然后每个样本在 结果yk,所有缩放样本的总和,被计算出来
系数应为 c0=0.0299、c1=0.4701、c2=0.4701、c3=0.0299。
你认为我正确地完成了作业吗?我认为这似乎太容易了,因此我想知道。
【问题讨论】:
-
看不到任何移动。您似乎正在缩放单个值。当然你应该输入几个值,然后当你有足够的值时缩放?
-
什么是 FIRfloats[2]、FIRfloats[3] 和 FIRfloats[4] 在初始条件下,是否为零?对吗?
-
延迟应该仅用于输入,不与系数相乘。应该在求和循环中使用系数。见图表:en.wikipedia.org/wiki/Finite_impulse_response
-
@SHREYASJOSHI 如果没有给出特定的值初始化器,那些 always 不是初始化为
0.0f吗?见:stackoverflow.com/questions/3803153/…