[英]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.