2017-06-12 80 views
-4

我想在C中實現晶格fir過濾器。我的問題是如何使延遲時間(z-1)。我試着計算每次迭代的前一個樣本,但是第一個樣本的第一個樣本有負值。C編程中的晶格濾波器?

您可以找到算法here

+1

https://ericlippert.com/2014/03/05/how-to -debug-small-programs/ – slim

+1

在鏈接算法中,'gm []'由'gm_minus_1'和'gm_minus_2'中的值填充。因此,該算法的直接翻譯需要四個數組:'f []','g []','f_previous []','g_previous []'。它可能會從兩個陣列中擠出相同的效果,但是您需要非常小心地向自己證明這是安全的。 – slim

+0

PS「有什麼問題」不夠好,也是你接近選票的原因之一。 – slim

回答

2

p是一個指向floatishort int。你在循環條件分配給pi

void LatticeFIR(…, float *p) 
{ 
    short i; 
    … 
    for (i=1;i=p;i++) 

的是Notihing實際上是有意義的。如果你這樣做,你的編譯器會發出大量的警告。

編輯:只給你的想​​法,這是clang -Wall有什麼看法:

x.c:4:14: warning: incompatible pointer to integer 
conversion assigning to 'short' from 'float *' [-Wint-conversion] 
    for(i=1;i=p;i++) 
      ^~ 
x.c:4:14: warning: using the result of an assignment 
as a condition without parentheses [-Wparentheses] 
    for(i=1;i=p;i++) 
      ~^~ 
x.c:4:14: note: place parentheses around the assignment 
to silence this warning 
    for(i=1;i=p;i++) 
      ^
      () 
x.c:4:14: note: use '==' to turn this assignment into 
an equality comparison 
    for(i=1;i=p;i++) 
      ^
      == 
2 warnings generated. 
+0

謝謝你的回答 我不會在原型級別上尋找錯誤,而是想法如何實現該程序,換句話說如何延遲g [] – Midou

+0

@Midou當你剛接觸這個社區,你希望學到一些重要的東西:小心你的措辭和提出的代碼(在問題和答案中)。有很多成員對此非常關鍵。 (我想,C/C++開發人員非常關鍵並且挑剔是不錯的行爲,否則,你永遠不會有任何東西在運行......) – Scheff