2012-10-06 76 views
4

我的波形發生器出現問題。我試圖用給定頻率的聲音創建一個.wav文件。我的代碼使用方法:如何用自定義頻率音/波創建.wav文件?

$freqOfTone = 21000; 
$sampleRate = 44100; 
$samplesCount = 80000; 

$amplitude = 0.25 * 32768; 
$w = 2 * pi() * $freqOfTone/$sampleRate; 

for ($n = 0; $n < $samplesCount; $n++) 
{ 
    $data->samples[1][] = 32768 + (int)($amplitude * sin($n * $w)); 
} 

不幸的是,輸出波形是不正確的,我會獲得一些頻率,而不是一個:http://i49.tinypic.com/ab1nx0.png

它應該是這樣的: http://i50.tinypic.com/33zbslk.png

我在哪裏做的事情錯誤? :(

+1

您的代碼看起來不錯。你是否認爲這個問題可能與寫入數據或數據格式有關?有符號與無符號,位深度等 – Brad

+0

由於'samplesCount'不是波週期的倍數,它可能是一個別名問題 - 嘗試調整該參數。 – moonwave99

+0

@ moonwave99我將$ samplesCount更改爲88200.它不能解決問題。輸出文件看起來是一樣的......我認爲樣本的數量不應該對頻率的波動有任何影響。 – Sirtarius

回答

1

鑑於採樣率,所需的頻率過於接近Nyquist frequency被正確採樣。我建議你使用96kHz的採樣率用於此。

+0

嗯...我想留在我的44,1kHz。有沒有什麼辦法可以計算最近的可用頻率? – Sirtarius

+2

要開始有任何合適的分辨率,您應該每個週期至少有4個採樣,使您在11.025kHz。這似乎很低,但請記住,44.1kHz的帶寬是爲了錄製音樂而選擇的,而不是用於高頻實驗。 –

0

我已經finaly取得了一些成績,但我的解決辦法這與我的意思有點不同......無論如何,我拿了樣品,並通過高通頻率濾波器。信號有點失真,但仍然足夠我的目的:)

相關問題