繁体   English   中英

如何为分段周期函数获取 createPeriodicWave 的实数和图像数组?

[英]How to get the real and imag arrays for createPeriodicWave for a piecewise periodic function?

波形图如下:

0.0 - 0.5 => low,
0.5 - 1.0 => high,
1.0 - 2.0 => low,
2.0 - 2.5 => high,
2.5 - 4.0 => low,
4.0 - 4.5 => high,
4.5 - 6.5 => low,
6.5 - 7.0 => high,

在此处输入图像描述

脉冲相等,但不同脉冲之间的时间增加如下:0.5、1.0、1.5、2.0。 这种模式会自我重复,因此如果我们继续进行,下一次迭代将如下所示:

7.0 - 7.5 => low,
7.5 - 8.0 => high,
8.0 - 9.0 => low,
9.0 - 9.5 => high,
9.5 - 11.0 => low,
11.0 - 11.5 => high,
11.5 - 13.5 => low,
13.5 - 14.0 => high,

在此处输入图像描述

我相信低点应该是 -1 而不是 0(虽然不确定)。 我怎样才能得到这个波形的realimag数组?

https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/createPeriodicWave

createPeriodicWave() 需要频域中的信号,这意味着您需要使用(离散)傅里叶变换(有时简称为 DFT)将信号从时域转换到频域,以获得 createPeriodicWave( )。 更多信息可以在这里找到。

createPeriodicWave() 将执行逆傅立叶变换回到时域(您在开始时已经拥有),因此使用 createPeriodicWave() 没有任何意义。 相反,您可以直接将样本数据输入AudioBuffer

在这个问题中没有首选语言的指示,但在 Node 中有一个快速傅立叶变换 (FFT) 的版本,您可以使用它输入测试数据(1 到 0 或 1 到 -1 或任何 dc 元素将是删除)。

有关详细信息,请参阅https://www.npmjs.com/package/fft-js

一旦你安装了它( npm i fft-js )你可以做这样的事情

var fft = require('fft-js').fft,
    fftUtil = require('fft-js').util,
    signal = [1,0,1,0];

var phasors= fft(signal);

var frequencies = fftUtil.fftFreq(phasors, 8000), // Sample rate and coef is just used for length, and frequency step
    magnitudes = fftUtil.fftMag(phasors); 

var both = frequencies.map(function (f, ix) {
    return {frequency: f, magnitude: magnitudes[ix]};
});

console.log(both);

我还将样本分成更小的东西,所以说 1 个单位是开启脉冲的时间(0.5 秒?)所以会像 0,1,0,0,1,0,0,0,1,0, 0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,1,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM