Pre echo 預回聲 ,瞬態訊號檢測與TNS

2022-01-15 11:10:19 字數 1638 閱讀 2288

昨天晚上在除錯乙個斯坦福的audio coder**時,發現裡面使用了adt——自適應變換。並且最近在看一些正弦模型編碼的時候也會在裡面提到瞬態模型,瞬態檢測的意義等等。

晚上因為家事睡不著覺,就一直思考這些問題,終於有所領悟,今天分享出來。

1.先說什麼是pre-echo:

這是hydrogenaudio給的定義

我找不到我之前的總結了,我先留個坑。

我先貼乙個瞬態訊號的圖

這種訊號在經過變換編碼由於變換編碼的ringing artifacts[1],會產生下面的雜訊。

本質上是因為階躍訊號變換後量化的導致的。

2.那麼aac是怎麼處理的呢?

aac是通過tns在頻域濾波達到平滑時域譜的目的,這裡有個問題,

在頻域處理怎麼能使平滑時域譜呢。tns的原則是利用之前訊號處理的知識。

頻域和時域是對偶關係。**和變換是對偶關係。

變換後再**等同於時域處理。

簡而言之,tns就是在小範圍上對訊號進行平滑以達到減小在變換編碼中由於量化導致的ringing效應。

那麼我們看看aac tns的引數有什麼,怎麼計算。

部分意義

n-filt是tns濾波在每個幀內的個數,對短幀,是1個,對長幀是2個。

length表示tns濾波過濾的頻域係數的個數。

order是tns濾波器階數

coef_compress是判斷tns濾波係數是否要壓縮。

coef就是tns濾波係數了。

這裡我著重講一下方向:

direction的意思,因為瞬態訊號(類階躍訊號)是雙向的,所以tns濾波也有個方向問題。這個要清楚。

3. aac的tns的應用模組原理

編碼端:tns有3個模組

需求檢測,係數計算,執行濾波

需求檢測:tns使用了levinsondurbin的方法計算**增益,通過**增益和**誤差的比和閾值比較。決定是否啟用tns。

係數計算:tns還是使用levinsondurbin計算**係數。

解碼器端:

解碼引數,係數計算,執行逆濾波

這裡補充乙個基本問題吧

levinsondurbin的方法計算**增益的方法和意義是什麼?

4. 結論,可以說,aac tns的方法是乙個一般方法,我認為他占用了部分碼流,而pre-echo的處理完全可通過不佔碼流的方式解決,當然這也涉及aac本身固定幀長的問題。

並且aac tns的是沒有瞬態檢測的,只是增益計算,它是通過判斷tns啟動後對碼流節省是否合算判斷是否啟動tns(有待進一步研究)。tns的**係數計算也是相對簡單的。

Pre echo 預回聲 ,瞬態訊號檢測與ADT

上乙個部落格總結了pre echo和tns。其實避免pre echo的方法不止有tns,還有自適應變換 adt 也叫做adaptive block size 麻省理工1991年的kyle k.iwai pre echo detection and reduction 有提到adaptive bloc...

Google Meet更新 改進回聲檢測與提醒功能

google workspace 團程式設計客棧隊在周一的一篇文章中稱 當在 google meet 通話期間出現回聲時,新版軟體將能夠讓使用者更好地識別和避免這樣的困擾。儘管大多數時候,google meet 都可智慧型調節以去除回聲,但仍無法 100 排除。更重要的是,我們該如何讓特定使用者知曉...

《訊號檢測與估計》課程學習大綱

訊號檢測與估計 學習參考資料 訊號檢測與估計 課程教學大綱 課程 課程負責人 楊文 課程中文名稱 訊號檢測與估計 課程英文名稱 signal detection and estimation 課程類別 必修 課程學分數 3 課程學時數 54 授課物件 資訊與通訊類 電子類等專業研究生和高年級本科生 ...