簡體   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