【问题标题】:How to come from equations to code with javascript [closed]如何从方程式到使用 javascript 编写代码 [关闭]
【发布时间】:2017-04-09 05:04:22
【问题描述】:

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

第一个是 FFT 窗口 Blackman。

其次是FFT算法:

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

第四是分贝:

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

谁能帮助并解释我是如何从方程式到工作代码的? 我不知道我应该从哪里开始。

感谢您的每一个回答

【问题讨论】:

    标签: javascript math go signal-processing


    【解决方案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;
    }
    

    【讨论】:

    • 嗨,非常感谢,我会测试。
    • 我有一个问题,你能给我解释一下fft中的K吗?
    • 询问 DSP stachexchange
    • 好的,再次感谢您
    猜你喜欢
    • 2013-07-07
    • 2012-12-23
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2023-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多