音頻重採樣

對於採樣率爲Fs,長度爲M個採樣點的音頻信號x[n],,通過採樣因子P/Q進行重採樣後,這個信號的樣本數可以增大或者減小。該過程可以分爲如下三個步驟[17]:

(1)上採樣:在原信號相鄰兩點內插入P-1個零點,即創建一個有P (M-1)+1個採樣點的信號xu[n],當n=1,2,…,M時,xu[P(n-1)+1] = x[n];否則,xu[n]=0。

(2)插值:xu[n]和一個低通插值濾波器h[n]作卷積:xi[n]= xu[n]h[n]。

(3)下采樣:每隔Q-1個點抽取一個點,即創建有Q個點的信號xd[n],當n=1,2,…,+1時,xd[n]=xi[1+Q (n-1)],則重採樣信號y[n]=xd[n]。(符號表示向下取整數)

不同類型的重採樣算法都可以分爲上述三個過程,它們的唯一的區別就在於步驟2中所採用的插值濾波器的不同。其中,線性插值是最簡單的插值算法,如式(4-1)。另外,常見的插值還包括樣條插值、三次方插值等。

注意事項:

1.上採樣時,會造成鏡像信息,因此需要使用低通濾波器濾除(線性插值本身就是低通濾波器,因此不需要額外處理)。

2.下采樣時,可能會造成頻譜混淆,因此在下采樣之前用低通去混淆濾波器濾除。

3.重採樣算法非常消耗時間,使用多相濾波器與一些條件限制,可以大大提高運算速度。

開源代碼:

1.http://code.google.com/p/falab/

      該段代碼是針對單聲道音頻的重採樣,不能直接分包(分段)處理。

對於多聲道音頻的重採樣,需要自己改寫,可以支持多聲道、分段重採樣。

2.ffmpeg內部集成了一套重採樣代碼。

     可以處理多聲道音頻的重採樣,可以分段處理。但是存在一些bug。有些聲道轉起來會出問題、不支持,例如雙聲道轉單聲道。

3.speex也集成了重採樣接口

 

下采樣時,對離散信號再次進行P抽樣(類似連續信號抽樣);然後進行抽取。

抽樣,會引起頻譜週期性偏移擴展, 2pi/P。

抽取,相當於時域壓縮,傅里葉變換對應於頻域拉伸P倍。

-pi~pi;   原始離散信號截止頻率, -w0~w0,  擴展後  -w0*p~w0*p;   w0*p <=pi;

濾波器截止頻率:w0<= pi/P;  對原始信號進行提前濾波操作。

 抽取,相對於原始離散信號,頻譜發生拉伸,容易造成混疊。

 

同理,對於內插過程:

內插的插零操作,相當於時域拉伸,對應於頻譜壓縮,造成鏡像;

第二步,通過低通濾除鏡像。

原始信號-pi~pi,重複出現。

壓縮N倍,則 原始信號  -pi*N~pi*N,  壓縮到    -pi*pi; 

有效帶寬 -w~w;則壓縮後變成了,  -w/N~-w/N,  -pi~pi壓縮成 -pi/N~pi/N;其它鏡像通過低通濾波器濾除掉。

截止頻率爲  pi/N

內插值的過程,相當於低通濾波。

 

轉自:https://www.cnblogs.com/welen/p/3284642.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章