2013-05-05 70 views
2

原始音頻I具有原始音頻數據中的C++從上採樣到22050 48000赫茲

vector<short> m_shorts; 

形式的音頻數據是22050千赫單聲道。

有沒有人有任何想法我可以(沒有任何第三方庫)快速轉換爲48000赫茲單聲道的短矢量?

我知道它不會改善聲音。這僅用於將音頻數據傳遞給一個效果(在採樣率更高的情況下聽起來會更好)。

謝謝你的幫助。

+0

你想要'44100Hz'('22050Hz'的雙倍頻)還是'48000Hz'?而'kHz'很可能是一個錯字,應該是'Hz' – 2013-05-05 07:25:45

+0

@Basile Starynkevitch對不起,你說得對。我想我寧願48000赫茲。但是如果48000不容易,44100也可以。 – tmighty 2013-05-05 07:28:42

+0

然後請相應地編輯您的問題。 – 2013-05-05 07:31:55

回答

2

如果你想從22050Hz採樣頻率翻一番,44100Hz(這是22050雙),你可能會做一些linear interpolation

vector<short> m_shorts; 
vector<short> outputs; 
unsigned inplen = m_shorts.length(); 
output.resize(2*inplen+1); 
for (unsigned ix = 0; ix < inplen-1; ix++) { 
    output[2*ix] = m_shorts[ix]; 
    output[2*ix+1] = (m_shorts[ix] + m_shorts[ix+1])/2; 
} 

但我不是一個音頻或信號處理專家。可能有更聰明的方法......(也許是一個Fourier transform然後是一個逆傅立葉)。

我不確定「聽起來會好些」。

+0

非常感謝! – tmighty 2013-05-05 07:36:02

+0

線性插值工作正常,但不能給出非常好的結果。理想情況下,應使用適當的重採樣濾波器。 – 2013-05-05 09:24:10

+1

這種過採樣操作會導致11.025kHz至22.05kHz範圍內的原始信號(稱爲混疊或圖像)中不存在的不需要的信號內容。在所有實際的上採樣設計中,這由LPF去除。這裏使用的兩點插值是一個非常粗糙的LPF,它最有可能在錯誤的地方有一個截止頻率和一個非常寬的阻帶。結果是大量的混疊正在發生。 你需要一個重採樣濾波器,它的拐點頻率在11.025kHz(或稍小一點)和急劇滾降。 – marko 2013-05-05 10:39:54