2016-04-19 26 views
-1

我正在研究項目,我需要對光譜分析進行可視化以設置一些精確的參數。現在我正在將分箱轉換爲屏幕空間,因爲在線性空間中,較低頻率的大小被壓縮在一起。這是我在C++代碼:對數屏幕空間的頻率 - 線性組合

float windowSize = 640; 
float windowHeight = 480; 
for (size_t i = 0; i < bins; i++) 
{ 
    float m = audioIn.getSpectrum.at(i)*windowHeight; 
    float pos = i; 
    drawLine(vec2(pos, 0), vec2(pos, m)); 
} 

我試着用不同的方法來計算pos,但悲慘地失敗了。我錯過了關於對數的重要知識。

免責聲明:這是個人藝術項目,而不是家庭作業。

+1

_「免責聲明:這是個人藝術項目,沒有家庭作業」 _這不是失去[MCVE]的藉口。 –

回答

1

典型的攝譜儀以10爲底的對數刻度顯示。

假設你的情況bins0 Hznyquist Hz,你可以嘗試這樣的事情(爲44.1kHz的聲音):

float nyquist = 22050.0; 
float logMax = log10(nyquist); 
float log = log10((float)i * nyquist/(float)bins); 
float pos = log/logMax * windowSize;