2017-04-09 44 views
-1

我會先在javascript中執行四個方程式,然後再執行。我的問題是我不是數學家,我不知道如何讀取方程式。如何從方程式到javascript代碼

第一個是FFT窗口Blackman。

enter image description here

二是FFT算法:

enter image description here

三是平滑隨着時間的推移:

enter image description here

四是分貝:

enter image description here

我不能在這個工作中使用fft庫,它需要實現這四個方程。當工作完成後,我將在同一信號上按這個順序運行這四個方程。

任何人都可以幫助和解釋我如何從方程式到工作代碼? 我不知道我應該從哪裏開始。

謝謝你的回答

回答

1

這是javascript。對Go進行適當的更改。我沒有測試過所有東西,只是將數學方程式轉換成代碼。如果有錯誤,請更正答案。

var pi = 3.14; 

var blackmann = function(N){ 
    var a = 0.16; 
    var a0 = (1-a)/2, a1 = 1/2, a2 = a/2; 
    var w = []; 
    for (var i=0; i<N, i++){ 
     w[i] = a0 - a1*Math.cos(2*pi*i/N) - a2*Math.cos(4*pi*i/N); 
    } 
    return w; 
} 

var fft = function(x, K){ 
    var X1 = [], X2 = []; 
    var N = x.length; 
    // X1 for the real spectrum, X2 for the imaginary part. 
    // For magnitude spectrum take |X1^2 + X2^2| 
    // For a K point fft 
    for (var k=0; k<K; k++){ 
     for (var n=0; n<N; n++){ 
      X1[k] = Math.cos(2*pi*n/N); 
      X2[k] = Math.sin(-2*pi*n/N); 
     } 
    } 
    return {"real":X1, "img":X2} 
} 

var smooting = function(x){ 
    var s = [], t = 0.16 
    s[0] = x[0]; 
    for (var i=1; i<x.length; i++){ 
     s = t*s[i-1] + (1-t)*x[i] 
    } 
    return s 
} 

var decibel = function(X){ 
    var Y = []; 
    for (var i =0;i<X.length(); i++){ 
     Y[i] = Math.log10(Math.abs(X[i])); 
    } 
    return Y; 
} 
+0

嗨非常感謝你,我會測試。 – Aron

+0

我有一個問題,你可以在fft中稍微解釋一下K? – Aron

+0

詢問DSP stachexchange – TheChetan

相關問題