如何使用javascript进行编码方程

时间:2017-04-09 05:04:22

标签: javascript math go signal-processing

我将首先在javascript中实现四个方程式,然后在go中实现。我的问题是我不是数学家,我不知道如何阅读方程式。

首先是FFT窗口Blackman。

enter image description here

其次是FFT算法:

enter image description here

第三是随着时间的推移平滑:

enter image description here

第四是分贝:

enter image description here

我不能使用fft库来完成这项工作,需要实现这四个方程式。完成工作后,我将在同一信号上按此顺序运行这四个方程式。

任何人都可以帮助解释我是如何从等式到工作代码的吗? 我不知道应该从哪里开始。

感谢您的回答

1 个答案:

答案 0 :(得分: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;
}