2
我有一個家庭作業在C中實現FIR濾波器,我不知道你是否認爲我正確理解了這個任務。我寫的,我認爲該方案解決了這個問題是: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。
您是否認爲我正確解決了作業?我認爲這似乎太容易了,因此我想知道。
看不到任何移位。你似乎在縮放單個值。當你有足夠的價值時,你應該輸入幾個值然後縮放嗎? – Neil
什麼是FIRfloats [2],FIRfloats [3]和FIRfloats [4]在初始條件下,它是零嗎?這是對的嗎? –
延遲應僅用於輸入,不能與係數相乘。係數應該用在你的sum循環中。 參見圖表:http://en.wikipedia.org/wiki/Finite_impulse_response – bavaza