亚洲中文字幕无码日韩精品,亚洲一区制服无码中字,亚洲精品第一国产综合精品99 ,一本大道中文日本香蕉

微立頂科技

新聞資訊

創(chuàng)新 服務(wù) 價值

  python去噪函數(shù)_Python | 簡單的擴音,音頻去噪,靜音剪切

發(fā)布日期:2022/10/19 11:52:13      瀏覽量:

原標題:Python | 簡單的擴音,音頻去噪,靜音剪切

之前一段時間一直在搞數(shù)字語音識別,在訓練算法上耗費了很多時間,但結(jié)果不盡人意。后來才發(fā)現(xiàn)自己一直忽視了音頻預(yù)處理的一步,于是轉(zhuǎn)而囫圇吞棗般學習一些簡單的信號處理算法。這里簡單介紹一下以下內(nèi)容:

擴音

音頻去噪

靜音剪切

文末將會給出源代碼和demo代碼的git庫地址,有需要的同學請自取。

基本概念

數(shù)字信號

數(shù)字信號是通過對連續(xù)的模擬信號采樣得到的離散的函數(shù)。它可以簡單看作一個以時間為下標的數(shù)組。比如,x[n],n為整數(shù)。比如下圖是一個正弦信號(n=0,1, ..., 9):

a691430e50fa49ed8b31380aba775311_th.png

對于任何的音頻文件,實際上都是用這種存儲方式,比如,下面是對應(yīng)英文單詞“skip”的一段信號(只不過由于點太多,筆者把點用直線連接了起來):

5036c638fc674c8aa03e0d029999dd46_th.png

衡量數(shù)字信號的能量(強度),只要簡單的求振幅平方和即可:

E = sum(x[n]*x[n])

頻率

我們知道,聲音可以看作是不同頻率的正弦信號疊加。那么給定一個聲音信號(如上圖),怎么能夠知道這個信號在不同頻率區(qū)段上的強度呢?答案是使用離散傅里葉變換。對信號x[n], n=0, ..., N-1,通常記它的離散傅里葉變換為X[n],它是一個復值函數(shù)。

比如,對上述英文單詞“skip”對應(yīng)的信號做離散傅里葉變換,得到它在頻域中的圖像是:

e9cd085539054f7599c927db3abb40d7_th.png

可以看到能量主要集中在中低音部分(約16000Hz以下)。

在頻域上,也可以計算信號的強度,因為根據(jù)Plancherel定理,有:

E = sum(x[n]*x[n]) = 1/N*sum(|X[n]|*|X[n]|)

分幀

對于一般的語音信號,長度都至少在1秒以上,有時候我們需要把其中比如25毫秒的一小部分單獨拿出來研究。將一個信號依次取小段的操作,就稱作分幀。技術(shù)上,音頻分幀是通過給信號加一系列的窗函數(shù)實現(xiàn)的。

我們把一種特殊的函數(shù)w[n],稱作窗函數(shù),如果對所有的n,有0<=w[n]<=1,且只有有限個n使得w[n]>0。比如去噪要用到的漢寧窗,三角窗。

a621fdfa53214c6c96d40ca714256ddf_th.png

漢寧窗

549db1d1e1954163a188154ecb1a089b_th.png

三角窗

我們將平移的窗函數(shù)與原始信號相乘,便得到信號的“一幀”:

w[n+d]*x[n]

比如用長22.6毫秒的漢寧窗加到“skip”信號大約中間部位上,得到一幀的信號:

e4c09208a66646109051f92bf6a2fbb0_th.png

可見除一有限區(qū)間之外,加窗后的信號其他部分都是0。

對一幀信號可以施加離散傅里葉變換(也叫短時離散傅里葉變換),來獲取信號在這一幀內(nèi)(通常是很短時間內(nèi)),有關(guān)頻率-能量的分布信息。

如果我們把信號按照上述方法分成一幀一幀,又將每一幀用離散傅里葉變換轉(zhuǎn)換到頻域中去,最后將各幀在頻域的圖像拼接起來,用橫坐標代表時間,縱坐標代表頻率,顏色代表能量強度(比如紅色代表高能,藍色代表低能),那么我們就構(gòu)造出所謂頻譜圖。比如上述“skip”發(fā)音對應(yīng)的信號的頻譜圖是:

b40ed09a48304b289e04a197277be342.png

(使用5.8毫秒的漢寧窗)

從若干幀信號中,我們又可以恢復出原始信號。只要我們適當選取窗口大小,以及窗口之間的平移距離L,得到 ..., w[n+2L], w[n+L], w[n], w[n-L], w[n-2L], ...,使得對k求和有:

sum(w[n+kL]) = 1

從而簡單的疊加各幀信號便可以恢復出原始信號:

sum(x[n]*w[n+kL]) = x[n]

最后,注意窗函數(shù)也可以在頻域作用到信號上,從而可以起到取出信號的某一頻段的作用。

下面簡單介紹一下3種音效。

1. 擴音

要擴大信號的強度,只要簡單的增大信號的“振幅”。比如給定一個信號x[n],用a>1去乘,便得到聲音更大的增強信號:

a*x[n]

同理,用系數(shù)0

2. 去噪(降噪)

對于白噪音,我們可以簡單的用“移動平均濾波器”來去除,雖然這也會一定程度降低聲音的強度,但效果的確不錯。但是,對于成分較為復雜,特別是頻段能量分布不均勻的噪聲,則需要使用下面的噪聲門技術(shù),它可以看作是一種“多帶通濾波器”。

這個特效的基本思路是:對一段噪聲樣本建模,然后降低待降噪信號中噪聲的分貝。

更加細節(jié)的說,是在信號的若干頻段f[1], ..., f[M]上,分別設(shè)置噪聲門g[1], ..., g[M],每個門都有一個對應(yīng)的閾值,分別是t[1], ..., t[M]。這些閾值時根據(jù)噪聲樣本確定的。比如當通過門g[m]的信號強度超過閾值t[m]時,門就會關(guān)閉,反之,則會重新打開。最后通過的信號便會只保留下來比噪聲強度更大的聲音,通常也就是我們想要的聲音。

為了避免噪聲門的開合造成信號的劇烈變動,筆者使用了sigmoid函數(shù)做平滑處理,即噪聲門在開-關(guān)2個狀態(tài)之間是連續(xù)變化的,信號通過的比率也是在1.0-0.0之間均勻變化的。

實現(xiàn)中,我們用漢寧窗對信號進行分幀。然后對每一幀,又用三角窗將信號分成若干頻段。對噪聲樣本做這樣的處理后,可以求出信號每一頻段對應(yīng)的閾值。然后,又對原始信號做這樣的處理(分幀+分頻),根據(jù)每一幀每一頻段的信號強度和對應(yīng)閾值的差(diff = energy-threshold),來計算對應(yīng)噪聲門的開合程度,即通過信號的強度。最后,簡單的將各頻段,各幀的通過信號疊加起來,便得到了降噪信號。

比如原先的“skip”語音信號頻譜圖如下:

e803780912e04d91b76678a062bf2353.png

可以看到有較多雜音(在高頻,低頻段,藍色部分)。采集0.25秒之前的聲音作為噪聲樣本,對信號作降噪處理,得到降噪后信號的頻譜圖如下:

d5d79b2337ab403a985ee24b0fdb0e7c.png

可以明顯的看到大部分噪音都被清除了,而語音部分仍完好無損,強度也沒有減弱,這是“移動平均濾波器”所做不到的。

3. 靜音剪切

在對音頻進行上述降噪處理后,我們還可以進一步把多余的靜音去除掉。

剪切的原理十分簡單。首先用漢寧窗對信號做分幀。如果該幀信號強度過小,則舍去該幀。最后將保留的幀疊加起來,便得到了剪切掉靜音部分的信號。

比如,對降噪處理后的“skip”語音信號做靜音剪切,得到的新信號的頻譜圖為:

23fec390b3cd407fb25769c4269b445a.png

參考

維基百科詞條-噪聲門

開源音頻處理軟件 Audacity (頻譜圖都是直接用它畫的,擴音,降噪,靜音剪切這些效果它都有源代碼)

我的GitHub



  業(yè)務(wù)實施流程

需求調(diào)研 →

團隊組建和動員 →

數(shù)據(jù)初始化 →

調(diào)試完善 →

解決方案和選型 →

硬件網(wǎng)絡(luò)部署 →

系統(tǒng)部署試運行 →

系統(tǒng)正式上線 →

合作協(xié)議

系統(tǒng)開發(fā)/整合

制作文檔和員工培訓

售后服務(wù)

馬上咨詢: 如果您有業(yè)務(wù)方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術(shù),還有行業(yè)經(jīng)驗積累。
QQ: 39764417/308460098     Phone: 13 9800 1 9844 / 135 6887 9550     聯(lián)系人:石先生/雷先生