[英]How to use createPeriodicWave instead of createScriptProcessor and getChannelData
[英]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(虽然不确定)。 我怎样才能得到这个波形的real
和imag
数组?
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.