2010-03-18 162 views
4

此刻我試圖在波形文件上實現FIR低通濾波器。使用MATLAB使用40階獲得的FIR係數。現在我需要在C#中實現FIR算法,並且我發現很難實現它。在C#中實現FIR濾波器

任何幫助?

謝謝

+2

隨着特別是你有困難嗎? – ladenedge 2010-03-18 17:43:43

+0

我難以實現這個系列: y [n] = b0x [n] + b1x [n-1] + .... bmx [nM] 其中y [n]是輸出答案,x [n ]是輸入 我不知道如何實現它在C#中 感謝 – 2010-03-18 17:57:43

回答

2

試試這個。它有幫助嗎?

static void Main() 
{ 
    var bb = new List<double> { 1, 2, 3, 4 }; 
    var xx = new List<double> { 3, 3, 4, 5 }; 

    var yy = func_FIR(bb, xx); 

    for (int i = 0; i < yy.Count; i++) 
    { 
     Console.WriteLine("y[{0}] = {1}",i,yy[i]); 
    } 

} 

public static List<double> func_FIR(List<double> b, List<double> x) 
{ 
    //y[n]=b0x[n]+b1x[n-1]+....bmx[n-M] 

    var y = new List<double>(); 

    int M = b.Count; 
    int n = x.Count; 

    double t = 0.0; 

    for (int j = 0; j < n; j++) 
    { 
     for (int i = 0; i < M; i++) 
     { 
      t += b[i] * x[n - i-1]; 
     } 
     y.Add(t);  
    } 

    return y; 
} 
+0

這讓很多因爲生病嘗試一下,看看它是否工作謝謝 – 2010-03-18 18:25:02

+0

我試圖代碼出來,它沒有工作,或IM做錯事... 我的參數是:220500個樣本,40個指令(FIR濾波器)。 有沒有機會將上述編碼調整到我的解決方案? – 2010-03-18 19:19:01

6

如何:

private static double[] FIR(double[] b, double[] x) 
{ 
    int M = b.Length; 
    int n = x.Length; 
    //y[n]=b0x[n]+b1x[n-1]+....bmx[n-M] 
    var y = new double[n]; 
    for (int yi = 0; yi < n; yi++) 
    { 
     double t = 0.0; 
     for (int bi = M-1; bi >=0; bi--) 
     { 
      if (yi - bi < 0) continue; 

      t += b[bi] * x[yi - bi]; 
     } 
     y[yi] = t;  
    } 
    return y; 
} 
+0

當然幫助我! – Tim 2011-11-04 15:41:47