【问题标题】: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;
}