我从安装在电动机上的传感器中获得了一些振动分析的样本数据。每天进行一次或最多3次采样。值可以用g
,gE
或mm/s
表示。
我正在用JavaScript开发一种个人算法,以处理一些样本并执行DFT。这是一个简单的代码,使用蛮力来处理我的结果。我比较了JavaScript和MATLAB结果的结果(实部和虚部),它们完全匹配。
但是,我的采样率非常慢。因此,我有很多问题无法在搜索中找到答案:
JavaScriptCode:
//Signal is a pure one-dimensional of real data (vibration values)
const fft = (signal) => {
const pi2 = 6.2832 //pi const
let inputLength = signal.length;
let Xre = new Array(inputLength); //DFT real part
let Xim = new Array(inputLength); //DFT imaginary part
let P = new Array(inputLength); //Power of spectrum
let M = new Array(inputLength); //Magnitude of spectrum
let angle = 2 * Math.PI / inputLength;
//Hann Window
signal = signal.map((x, index) => {
return x * 0.5 * (1 - Math.cos((2 * Math.PI * index) / (inputLength - 1)));
});
for (let k = 0; k < inputLength; ++k) { // For each output element
Xre[k] = 0; Xim[k] = 0;
for (let n = 0; n < inputLength; ++n) { // For each input element
Xre[k] += signal[n] * Math.cos(angle * k * n);
Xim[k] -= signal[n] * Math.sin(angle * k * n);
}
P[k] = Math.pow(Xre[k], 2) + Math.pow(Xim[k], 2);
M[k] = Math.sqrt(Math.pow(Xre[k], 2) + Math.pow(Xim[k], 2));
}
return { Xre: Xre, Xim: Xim, P: P, M: M.slice(0, Math.round((inputLength / 2) + 1)) };
}
第一张图显示了图表结果(左侧的时域和右侧的频域)。
第二个图显示了我的一些数据样本:
不好意思:很抱歉。我仍然是英语初学者。
答案 0 :(得分:1)