低速数据采样中的DFT分析

时间:2018-07-26 18:16:27

标签: javascript signal-processing dft

我从安装在电动机上的传感器中获得了一些振动分析的样本数据。每天进行一次或最多3次采样。值可以用ggEmm/s表示。

我正在用JavaScript开发一种个人算法,以处理一些样本并执行DFT。这是一个简单的代码,使用蛮力来处理我的结果。我比较了JavaScript和MATLAB结果的结果(实部和虚部),它们完全匹配。

但是,我的采样率非常慢。因此,我有很多问题无法在搜索中找到答案:

  1. 是否可以像这样对缓慢的采样数据进行DFT分析?
  2. 如何确定X轴的正确频率标度?这对我来说很复杂,因为我没有明确的Fs(采样率)值。
  3. 在我的情况下,应用像Hanning Window这样的窗口功能(适合振动分析)会很有趣吗?

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)) };
}

第一张图显示了图表结果(左侧的时域和右侧的频域)。

DFT result

第二个图显示了我的一些数据样本:

enter image description here

不好意思:很抱歉。我仍然是英语初学者。

1 个答案:

答案 0 :(得分:1)

  1. 频率无关紧要。低至1 / day的频率与任何其他频率一样好。但是考虑一下奈奎斯特-香农定理。
  2. 这是有问题的。您需要DFT的固定采样频率。您可以将插值作为预处理。但是最好在固定时间进行采样。