基于sinc的音频重采样(一):原理
我在前面的文章《音頻開源代碼中重采樣算法的評(píng)估與選擇 》中說過sinc方法是較好的音頻重采樣方法,缺點(diǎn)是運(yùn)算量大。https://ccrma.stanford.edu/~jos/resample/ 給出了sinc方法的原理文檔和軟件實(shí)現(xiàn)。以前是使用這個(gè)算法,沒太關(guān)注原理和實(shí)現(xiàn)細(xì)節(jié)。去年(2020年)由于項(xiàng)目的需要和組內(nèi)同學(xué)把這個(gè)算法的原理和軟件實(shí)現(xiàn)細(xì)節(jié)搞清楚了。本文先講講sinc方法的原理,后面文章會(huì)講講軟件實(shí)現(xiàn)的細(xì)節(jié)。
1,sinc函數(shù)和信號(hào)的采樣與重建
在數(shù)字信號(hào)處理中,sinc函數(shù)定義為:
當(dāng)x = 0時(shí),sinc函數(shù)值為1,當(dāng)x為整數(shù)時(shí)sinc函數(shù)值為0(這些整數(shù)點(diǎn)x稱為過零點(diǎn))。可以畫出sinc函數(shù)的波形圖如下:
可以看出sinc函數(shù)是連續(xù)無限且關(guān)于Y軸對(duì)稱的(即sinc函數(shù)是偶函數(shù))。
采樣定理說如果模擬信號(hào)x(t)包含的最大頻率是Fmax且以Fs> 2Fmax的頻率被采樣,那么x(t)可以用插值函數(shù):
從它的樣本重建。這里的插值函數(shù)就是sinc函數(shù)。重建后的x(t)可表達(dá)為:
這里x(n/Fs) = x(nTs) = x(n)是x(t)的采樣點(diǎn)值。Fs是采樣頻率,Ts是采樣間隔,F(xiàn)s = 1/Ts。
2,重采樣
把數(shù)字信號(hào)的采樣率從一個(gè)頻率轉(zhuǎn)換為一個(gè)另不同頻率的過程稱為重采樣(sampling rate conversion,SRC)。上面采樣定理說過如果信號(hào)的帶寬小于采樣率的一半,就可以用插值從樣本重建信號(hào)。用新的采樣率采樣這個(gè)重建的信號(hào),就可以實(shí)現(xiàn)重采樣。
假設(shè)以Fx=1/Tx采樣一個(gè)連續(xù)信號(hào)x(t),生成離散信號(hào)x(nTx)。使用插值公式:
可以從樣本x(nTx)生成連續(xù)信號(hào)y(t)。如果x(t)的帶寬小于Fx/2且
那么y(t) = x(t)。為了實(shí)現(xiàn)重采樣,只需要以時(shí)間間隔t=mTy對(duì)y(t)進(jìn)行求值即可,F(xiàn)y=1/Ty是新的采樣率。
重新組織g(t)的參數(shù):
mTy/Tx可以分解成整數(shù)部分km和分?jǐn)?shù)部分
所以
令k=km-n,所以 n =km – k, 從而
考慮到有上下采樣,文檔(https://ccrma.stanford.edu/~jos/resample/)給出插值函數(shù)為:
其中Fx為原采樣率,F(xiàn)y為新采樣率。
令 A= min(1, Fy / Fx), B = min(Fx, Fy), ρ = Fy / Fx = Tx / Ty, 則g(t)可表示為
所以
在上式中,x和y信號(hào)離散化后,在x信號(hào)和y信號(hào)中的Tx,Ty可以去掉了。式子就變成了如下:
上式中BTx在Fx,Fy已知的情況下是個(gè)常數(shù)。
令D=BTx,上式就變成了:
當(dāng)上采樣時(shí)B=Fx,則D=FxTx=1,A=1,所以式子重寫為:
當(dāng)下采樣時(shí)B=Fy, 則D= FyTx =ρ A=ρ,所以式子重寫為:
從上面的式子可以看出,新的采樣率下的值是原采樣率下的值和相對(duì)應(yīng)的sinc函數(shù)的值的乘累加。由于sinc函數(shù)是連續(xù)且無限的,真正實(shí)現(xiàn)時(shí)是無法做到的,所以這兒通過截?cái)鄐inc函數(shù)并離散化,來獲得近似信號(hào)。在文檔(https://ccrma.stanford.edu/~jos/resample/)中,使用Kaiser window加窗截?cái)?,通過線性插值采樣后的樣本來模擬脈沖響應(yīng)的連續(xù)性,獲得很好的效果。
至此基于sinc方法的重采樣原理就講完了,即新的采樣率下的值是原采樣率下的值和相對(duì)應(yīng)的sinc函數(shù)的乘累加。如果此時(shí)去看相關(guān)的代碼實(shí)現(xiàn),很大可能是一頭霧水,下篇將講怎么基于原理去做軟件實(shí)現(xiàn)以及實(shí)現(xiàn)中的一些細(xì)節(jié)。
總結(jié)
以上是生活随笔為你收集整理的基于sinc的音频重采样(一):原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。