音頻重采樣


對於采樣率為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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM