好的,所以我有一個小程序,用戶可以控制音頻信號的輸出頻率並播放歌曲(理論上:))。輸出音頻(Windows Audio API) - 低頻安靜
我自己在代碼中生成正弦波,通過計算它在44100Hz採樣時在一個波形的單個週期內需要多少個點。像這樣:
for (int k = 0; k < points_sine_wave; k++)
{
// Generate sine wave
sineWave[k] = pow(2.0,10) * (sin(2*3.14159*f*td*k + old_angle) + 1);
}
td是delta t(常數),f是頻率,k只是一個指數。爲了確保頻率改變時正弦波的連續性,我使用old_angle來保存以記憶從哪個角度恢復。我檢查了這裏產生的波形,它工作(正弦波保持連續,但會改變頻率)。 +1是爲了使一切正面。
現在,根據我放入該pow(2.0,x)的內容,我可能無法聽到低頻。看起來在2^7,我可以聽到一切都很好(100Hz是感興趣的東西),但如果我去2^6或2^5,我再也聽不到低頻了。
我通過Audacity觀察了我的輸出,並注意到高頻分量總是佔據整個垂直範圍(-1至1),而低頻分量則介於-0.4至0.4之間。
這是爲什麼?我寫入緩衝區的信號都是相同的最大幅度(在Matlab中檢查 - 如果您願意,可以發佈此信息)。
格式設置爲PCM,位數爲32,有效位數也爲32(雖然32似乎是一切)。
我敢打賭最後一個問題。 Audacity沒有顯示直流偏移的事實意味着它必須通過一些濾波器,可能是D/A - A/D轉換。放下'+ 1'。 「32位似乎是一切」是另一個同樣問題的指標。 32位PCM具有31位幅度,因爲符號需要一位。忽略這一點,你有一個討厭的溢出,可能包裝到負值。如果你要跟正弦曲線變爲1.9十億到2.0到2.1到-2.1,回到2.1,你有一個非常討厭的響亮的點擊。 – MSalters
謝謝,我認爲你是正確的對DC偏移,我給它。我刪除了「+1」,現在它可以工作! – Mewa