1 引言
改變聲音信號的音調是許多商用設備的一種功能,最典型的應屬卡拉OK機了。由于發(fā)音音調高低因人而異,人們希望伴奏音樂的音調適合自己的嗓音,因此卡拉OK機中設計了專門的硬件來實現這一功能。例如雅馬哈公司的用于數字變調的大規(guī)摸集成電路 YSS222D和YSS216B,內部集成了A/D,D/A和數字信號處理器,利用采樣和重放數據時速度的不同來實現變調。功能,重放比采樣速度快則升調,反之則降調。另外,為了使播放時間不變,還需對數據段進行復制或刪除。由于商業(yè)保密的需要,具體算法未公開,據可詢資料實現的系統(tǒng),不能有效解決因復制或刪除數據帶來的相位不連續(xù)問題。
當前,聲卡已成為計算機的基本配置,但無變調功能,為彌補這一缺憾,可以采用件的方法對聲音文件重新編碼,使聲卡回放時音調改變。另外,數字音頻工作站也需要軟件實現變調功能。因此討論了3種軟件實現算法,圍繞著如何變調而不變時間,以及如何解決相位不連接問題,從變調原理著手,討論了時域實現的理論依據,最后找到了一種有效的變調方法-- 頻域處理法,實驗證實效果良好。
2 變調的樂理基礎
聲音是由物體振動產生的,聲音的基本要素有:音調、音強和音色。樂音體系根據振動頻率即音調的不同,將樂音分成音級,基本音級廣泛采用CDEFGAB這8個字母命名,某音級與往上數8個音級之間的距離稱為“純八度”,世界上普遍采用的12平均律將一個純八度分成12個均等的半音,相鄰兩個半音間的物理振動頻率相差21/12倍,也就是說各半音間的振動頻率成等比關系,一個純八度頻率相差2倍。
如果將信號中的所有頻率成分升高或降低21/12倍,就能使音調升高或降低一個半音。假設原信號頻率為f,變調后頻率為f,二者的關系應該滿足
f=fx2d/12, d=±1 ,±2,±3 (1)
當d》0時,升調,反之,降調;d每變化1,音調升高或降低一個半音。
3 時域實現的依據及存在的問題
一種實現變調的作法,是采用硬件實現相似的辦法,即改變WAV文件頭中有關采樣率的信息。如果采樣率提高,則聲卡回放速度加快,產生升調的效果,同時回放時間變短;反之,產生降調的效果,回放時間變長。為保持時間不變,以幀為單位,利用信號的短時周期性,升調時將幀內后部數據段復制,降調時將幀內后部數據段刪除,圖1畫出了一幀的數據處理情況。可以看到,若是升調,幀間數據是連續(xù)的,但由于數據段的復制,幀內數據段間相位不連續(xù);若是降調,幀內數據連續(xù),但幀間數據相位不連續(xù),因此聲音質量必然受到影響,產生喀嚓聲。
另一種方法是,采用時域抽選和內插[4]。下面分析抽選和內插的頻譜,看如何實現變調。抽選表示成下式
Xd[n]=[nM] (2)
表示每M個采樣值選1個,其余M-1個舍棄,則信號長度縮短為1/M。抽選后信號頻譜和原信號頻譜間的關系為
1 M-1
Xd(ejω)=-Σ X[ej(ω/M-2πi/M (3)
M i=0
圖2所示粗線為M=2的抽選信號頻譜,粗實線為M=2的抽選信號頻譜,可以看出,抽選后信號的頻率成分均為原來的2倍,所以能實現升調。為防止抽選后頻譜混疊,抽選前必須作抗混疊數字低通濾波,截止頻率為π/M。
再看看內插的頻譜變化。內插時域表示成
Xi[n]={x[n/L,n=O,±L,+2L,+3L, 。.. (4)
0, 其它
表示每兩個采樣值中插入L-1個零,整個信號長度增加為L倍。內插后信號頻譜和原信號頻譜間的關系為
Xi(ejω)=X(ejLω) (5)
圖2虛線所示為L=2的內插信號頻譜,可以看出,所有頻率成分均為原信號的1/2,所以能實現降調。為不產生鏡像頻率成分,內插后必須作反鏡像數字低通濾波,截止頻率π/L,也可用線性內插取代插零,而無須反鏡像濾波。
抽選和內插后的數據量同樣會變短或變長,下面來推導保持數據量不變的具體實現方法。根據上述抽選和內插的頻譜變化情況,反推時域變化過程:若將信號作快速離散傅里葉變換(FFT),將譜線沿頻率軸擴張或收縮,再作反變換(IFFT),得到的信號應該是被升調或降調,并且數據量保持不變。
非整數倍的變調可由抽選和內插結合實現,同樣可以采用數據段的復制或刪除的辦法保持數據量即回放時間不變,其系統(tǒng)結構如圖3所示。但對于復制或刪除數據后段間相位的不連續(xù)性問題,有些資料[3]提出找出信號的基音周期,以基音周期為復制或刪除單位,并幀間重疊處理,也不能從根本上解決相位問題。
4 頻域實現的算法研究
現在考慮采用頻域實現來解決相位問題。
首先采用頻譜伸展的辦法得到升調的信號,如圖4所示,(a)為原始信號波形及FFT的幅度和相位圖,(b)為將原始信號的FFT譜線向高頻伸展一倍,中間內插零,再IFFT得到信號波形及FFT幅度和相位圖,情況和時域抽選一樣。然后考慮將頻譜伸展過程中的譜線內插零改成線性內插,如(c)所示,可見信號波形段間能很好地吻合,但波形失真較大。最終發(fā)現結合插零和線性內插,低頻插零,高頻線性內插,既能保證波形失真較小又能在兩段相連處較好地過濾,如(d)所示。
對于降調,圖5(a)是2幀原始信號波形及后一幀的FFT幅度圖,圖5(b)采用FFT譜線向低頻收縮,再IFFI,得到的波形和時域內插法一樣,改進措施見圖5(c),被處理的連續(xù)兩幀信號間有一部分重疊,得到的兩幀信號波形便能很好地過渡。
因此,要實現式(1)任意倍頻率的變調,令α=2d/A2,采用以下公式。為簡單起見,低頻高頻均線性內插:
X[K]=FFT[x(n)], k=0,1,。..N-1 (6)
y[n]=IFFT[Y(K)],n=0,1,。..N-1 (8)
其中N是幀長,int()表示取整,min()表示取較小值。注意,僅僅對于降調a
另外幀長,即被處理的數據長度也必須適當,如果太短,會造成數據的復制和刪除太過頻繁;過長,又不符合短時周期性,明顯地感到聲音的多次重復或被打斷。經過實驗表明,幀長取4000點左右比較合適,對于采樣率44.1 kHz的音頻信號是0.1 s的數據量,4 000點的FFT使頻譜取樣間隔為10Hz左右。
5 結束語
實現變調的基本原理是改變信號的頻率成分,可以通過時域抽選或內插實現,但為保持時間不變,每幀要復制或刪除部分數據段,由此帶來相位不連續(xù)從而影響聲音質量。文中提出的頻域法,根據變調的原理,將FFT譜線向高頻或低頻搬移,再作IFFT得到時域信號,若升調譜線搬移過程中采用線性內插,降調采用時域幀間重疊,能消除數據段的不連續(xù)問題,改善變調后的聲音質量。頻域實現無須低通抗混疊濾波或低通反鏡像濾波,且FFT是快速算法,假設采用如ADSP2181或TMS320C54X,乘法運算占用單指令周期的DSP芯片,運算量小于1 MIps,實時運算不成問題。可見,頻域法是一種有效可行的辦法。
責任編輯:gt
-
處理器
+關注
關注
68文章
18927瀏覽量
227254 -
集成電路
+關注
關注
5367文章
11162瀏覽量
358408 -
計算機
+關注
關注
19文章
7174瀏覽量
87161
發(fā)布評論請先 登錄
相關推薦
評論