javascript - 振动数据的 Javascript 中的 FFT 计算
问题描述
问题:- 我必须计算时间序列数据的 FFT。
时间序列数据是什么? 我有一个振动传感器,它给我 x 和 y 坐标的位移数据。
有什么问题?虽然我找到了一些,但我找不到合适的库来工作,但我不知道它是否工作正常。te 据我所知,我们需要采样率和FFTsize(元素数)来计算 FFT
我使用了库https://www.npmjs.com/package/fft-js ,在其中我传递了一个一维数组,它返回一个二维数组,其中包含一些正值和一些负值。
我有问题
- 据我所知需要采样率,它如何在没有采样率的情况下计算 FFT
- 为了计算 FFT,数据频率是否需要保持不变,因为理想情况下我每秒有 170 个数据,但有时如果下降为 165 和 160
- 有什么方法可以验证我的 fft
Ps:-我正在尝试实时绘制fft
非常感谢帮助或资源,因为我在 javascript 中找不到任何 fft 资源
解决方案
检查fft-js 实现,我发现它使用的是基本的 DIT(时间抽取)基数 2 算法。此外,查看他们对复数运算的实现,我发现它使用长度为 2 的数组来表示复数。
FFT 与采样率无关,但结果的解释取决于采样率。位置处的 FFT bink
具有频率min(k * N, N - k*N) * Fs / N
,其中 Fs 是采样频率。
FFT 假设块内的频率恒定,如果采样率变化但所有样本的采样周期相同,则可以,您只需更改Fs
公式中的 。如果采样率随机变化,那么您将在估计中添加一些噪音。如果变化是因为您无法处理所需数量的样本,则最好降低样本频率以确保样本以恒定速率出现。
假设您选择使用大小为 的 fft 2**7 = 128
,那么您的频率将是freq(k) = min(k / Fs, (128 - k) / 128
频率 k 的能量将由 给出X[k][0]**2 + X[k][1]**2 + X[N-k][0]**2 + X[N-k][1]**2
,您可能希望以k=1:63
对数刻度绘制该能量。
如果要分离轴x
和y
的振动,请分别对每个方向的振动分量进行两次 FFT。
如果您在浏览器中,则可以使用分析器节点,用于音频分析,但可以满足您的需要。在我们的例子中,您需要将数据放在音频缓冲区源节点中,然后连接到分析仪。
一些在线演示(带音频,但分析与您的振动相同)
https://p5js.org/examples/sound-frequency-spectrum.html
我最喜欢的一个 https://musiclab.chromeexperiments.com/Spectrogram/你可以在页面底部看到一些预先录制的样本,你可以使用麦克风,也可以使用鼠标绘制将要播放的东西。
推荐阅读
- angular - 以静默方式将身份验证从 SharePoint Online 传递到 Web 应用程序
- c++ - 如何并行化具有依赖关系的任务节点图
- c# - 尝试将按钮添加到 WrapPanel 时出现 Wpf 错误
- angular - 如何在Angular 6中将一个组件的FormArray附加到另一个组件的值
- django - Django:在模板中显示用户以前对 ModelForm 的选择
- dataframe - 使用文本中的名称创建数据框
- python - python2.7名称'__path__'未定义
- java - 返回在 for 循环中创建的字符串
- cron - CRON 触发的速度有多快?
- ag-grid - Ag-grid 父子通信