<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      音頻數(shù)字信號詳解(2022年04月09日更新)

      音頻數(shù)字信號詳解

      整理者:赤勇玄心行天道

      QQ號:280604597

      微信號:qq280604597

      QQ群:511046632

      博客:http://www.rzrgm.cn/gaoyaguo  http://blog.csdn.net/cyz7758520?type=blog

      大家有什么不明白的地方,或者想要詳細了解的地方可以聯(lián)系我,我會認真回復的!

      你可以隨意轉(zhuǎn)載,無需注明出處!

      寫文檔實屬不易,我希望大家能支持我、捐助我,金額隨意,1塊也是支持,我會繼續(xù)幫助大家解決問題!

       

      1. 信號、Signal

        1. 信號、Signal

      信號就是信息的物理表現(xiàn)形式,或者定義為攜載信息的自變量函數(shù),信息是信號的具體內(nèi)容。

      根據(jù)載體的不同,信號可以分為電的、聲音的、光的、磁的、熱的、機械的、生物醫(yī)學的等各類信號。根據(jù)一個或多個產(chǎn)生源,信號可分為單通道信號和多通道信號,例如單聲道音頻、雙聲道立體聲音頻、五通道環(huán)繞聲音頻。信號表現(xiàn)上可分為任意時刻都能精確確定信號取值的確定信號,及任意時刻信號取值不能精確確定的隨機信號。信號的自變量可以是時間、頻率、控件或者其他物理量,按自變量數(shù)劃分,可以有一維的(多數(shù)是以時間或頻率為自變量表示,例如音頻、心跳等)、二維的(例如黑白圖像信號的x,y坐標)、多維的(例如黑白視頻信號的x,y坐標及時間t,彩色視頻信號的紅、綠、藍三原色的三個三維信號組成的三通道信號)。還有其他劃分方法,例如周期信號與非周期信號,功率信號與能量信號等。

      在自變量的指定值上信號的取值稱為信號的振幅值,也叫幅值函數(shù)值信號值,作為自變量的函數(shù)的振幅值變化稱為波形

      1. 聲音信號、Sound Signal

      聲音就是先由物體振動產(chǎn)生的聲波,聲波再通過介質(zhì)(空氣或固體、液體)傳播并能被人或動物聽覺器官所感知的波動現(xiàn)象。最初發(fā)出振動的物體叫聲源。振動引起的氣壓變化的大小稱為聲壓,聲壓是決定聲強即響度的主要因素。氣壓具有一定的頻率,即聲波每秒變化的次數(shù),以Hz(赫茲)表示,它決定了聲音的高低。聲壓的測量單位是帕(斯卡)。

      通常,人耳只能感受到20Hz至20000Hz的聲波,低于20Hz的叫次聲波,高于20000Hz的叫超聲波,20Hz至250Hz的叫低頻,250Hz至2000Hz的叫中低頻,2000Hz至6000Hz的叫中高頻,6000Hz至20000Hz的叫高頻,人說話聲音的語音頻率(也叫語頻)一般在200Hz至3200Hz,人耳對1000Hz至3000Hz的聲波感受力最強,足夠強的次聲波會對人體產(chǎn)生傷害。國際制定的數(shù)字電話機的通信標準是300Hz至3400Hz。

      聲音的頻率越高,傳播的距離越近;聲音的頻率越低,傳播的距離越遠。因為高頻的聲音在傳播中衰減比較快。

      人耳對于其中每一種頻率,都有一個剛好能引起聽覺的最小可聽強度(minimal audible intensity),這個最小可聽強度稱為聽閾(hearing threshold)。當振動強度在聽閾以上繼續(xù)增加時,聽覺的感受也相應增強,但當振動強度增加到某一限度時,它引起的將不單是聽覺,同時還會引起鼓膜的疼痛感覺,這個限度稱為痛閾,或者最大可聽強度(maximal audible intensity)。在這兩者之間即為人的聽覺響應范圍,又稱聽域

      音速是指介質(zhì)中微弱壓強擾動的傳播速度,其大小因介質(zhì)的性質(zhì)和狀態(tài)而異。空氣中的音速在1個標準大氣壓和15℃的條件下約為340m/秒。在航空上,通常用M(馬赫)來表示音速,1馬赫就是1倍音速,2馬赫就是2倍音速,超過1倍音速的叫超音速,超過5倍音速的叫高超音速

      1. 音頻信號、Audio Signal

      音頻信號是指聲波的頻率、幅度變化的信息載體。載體可以為電信號、磁帶、磁盤、等。

      下圖就是一段音頻信號的時域波形圖:

      1. 圖像信號、Image Signal

      圖像信號是指像素的頻率、幅度變化的信息載體。載體可以為電信號、磁帶、磁盤、等。

      下圖就是一張圖像信號的黑白像素圖:

      1. 視頻信號、Video Signal

      視頻信號是指圖像的頻率、幅度變化的信息載體。載體可以為電信號、磁帶、磁盤、等。

      下圖就是一段視頻信號的黑白像素圖:

      1. 信號分類

      連續(xù)時間連續(xù)幅值信號是指在以時間為自變量的一維信號中,除個別不連續(xù)點外,信號在所討論的時間段內(nèi)的任意時間點都有確定的振幅值,且振幅值在取值范圍內(nèi)也有任意種取值。該信號也叫模擬信號

      連續(xù)時間離散幅值信號是指在以時間為自變量的一維信號中,除個別不連續(xù)點外,信號在所討論的時間段內(nèi)的任意時間點都有確定的振幅值,但振幅值在取值范圍內(nèi)只有特定種取值。該信號也叫量化信號

      連續(xù)時間連續(xù)幅值信號和連續(xù)時間離散幅值信號都稱為連續(xù)時間信號

      例如:信號的時間和幅值都是連續(xù)的,即為模擬信號。

       

      離散時間連續(xù)幅值信號是指在以時間為自變量的一維信號中,只在離散時間瞬間才有幅值,在其它時間沒有,但振幅值在取值范圍內(nèi)有任意種取值。該信號也叫采樣信號、抽樣信號、取樣信號、脈沖信號

      離散時間離散幅值信號是指在以時間為自變量的一維信號中,只在離散時間瞬間才有幅值,在其它時間沒有,且振幅值在取值范圍內(nèi)也只有特定種取值。該信號也叫數(shù)字信號

      離散時間連續(xù)幅值信號和離散時間離散幅值信號都稱為離散時間信號,也常稱為序列

       

      確定信號(Deterministic Signal)是指能用確定的數(shù)學函數(shù)表示的信號,任意時刻都有確定的幅值,預先可以知道該信號的變化規(guī)律。

      隨機信號(Random Signal)是指不能數(shù)學函數(shù)表示的信號,不能預先可以知道該信號的變化規(guī)律。

       

      周期信號是指按照一定的時間間隔周而復始,并且無始無終的信號。

      他們的表達式可以寫作:

      其中稱為的周期,而滿足關系式的最小值則稱為是信號的基本周期。

      非周期信號是指該信號在時間上不具有周而復始的特性,即周期信號的周期趨于無限大。

       

      空域信號是指以距離為自變量的信號。

      時域信號是指以時間為自變量的信號。

      頻域信號是指以頻率為自變量的信號。

       

      實信號是指現(xiàn)實中真實的、可以測量到的信號。

      虛信號是指不存在、虛擬出來的信號,但為了計算方便而引入的概念。

       

      實數(shù)信號是指由實數(shù)組成的信號。

      虛數(shù)信號是指由虛數(shù)組成的信號。

      復數(shù)信號是指有復數(shù)組成的信號。

       

      共軛對稱是指當一個函數(shù)的實部為偶函數(shù),虛部為奇函數(shù)時,此函數(shù)就為共軛對稱函數(shù),即的共軛等于。

       

      連續(xù)時間信號和離散時間信號與周期信號和非周期信號彼此包含,即連續(xù)時間信號和離散時間信號中有周期信號和非周期信號,同理,周期信號和非周期信號中也包含連續(xù)時間信號和離散時間信號。

       

      模擬信號是指用連續(xù)變化的物理量所表達的信息,其信號的幅度,或頻率,或相位隨時間作連續(xù)變化,如溫度、濕度、壓力、長度、電流、電壓等等,我們通常又把模擬信號稱為連續(xù)信號,它在一定的時間范圍內(nèi)可以有無限多個不同的取值。而數(shù)字信號是指在取值上是離散的、不連續(xù)的信號。

      數(shù)字信號處理利用計算機的信號處理設備,采用數(shù)值計算的方法對信號進行處理的一門學科,包括濾波、變換、壓縮、擴展、增強、復原、估計、識別、分析、綜合等加工處理,已達到提取有用信息、便于應用的目的。

      在數(shù)字信號處理領域,量化是指將信號的連續(xù)取值(或者大量可能的離散取值)近似為有限多個(或較少的)離散值的過程。量化主要應用于從連續(xù)信號到數(shù)字信號的轉(zhuǎn)換中。連續(xù)信號經(jīng)過采樣成為離散信號,離散信號經(jīng)過量化即成為數(shù)字信號。注意離散信號通常情況下并不需要經(jīng)過量化的過程,但可能在值域上并不離散,還是需要經(jīng)過量化的過程。信號的采樣和量化通常都是由模數(shù)轉(zhuǎn)換器實現(xiàn)的。

       

      1. 數(shù)字信號處理系統(tǒng)、Digital Signal Processing System

       

      防混疊模擬低通濾波器:把會造成混疊失真的高頻分量濾除掉。

      1. 模數(shù)轉(zhuǎn)換器、調(diào)制器、Analog to Digital Converter、ADC

      模擬信號轉(zhuǎn)換成數(shù)字信號的過程叫做模數(shù)轉(zhuǎn)換,簡寫成A/D,完成這種功能的電路叫做模數(shù)轉(zhuǎn)換器,也叫調(diào)制器,簡稱ADC。模數(shù)轉(zhuǎn)換器的框圖如圖所示:

      輸入端輸入的模擬信號,經(jīng)采樣、保持、量化和編碼四個過程的處理,轉(zhuǎn)換成對應的二進制數(shù)碼輸出。采樣就是利用模擬開關將連續(xù)變化的模擬量變成離散的數(shù)字量,如上圖中波形③所示。由于經(jīng)采樣后形成的數(shù)字量寬度較窄,經(jīng)過保持電路可將窄脈沖展寬,形成梯形波,如波形④所示。量化就是將階梯形模擬信號中各個值轉(zhuǎn)化為某個最小單位的整數(shù)倍,便于用數(shù)字量來表示。編碼就是將量化的結果(即整數(shù)倍值)用二進制數(shù)碼來表示。這個過程就實現(xiàn)了模數(shù)轉(zhuǎn)換。目前集成模數(shù)轉(zhuǎn)換器種類較多,有8位、10位模數(shù)轉(zhuǎn)換器。

      實例:

      1. 數(shù)模轉(zhuǎn)換器、解調(diào)器、Digital to Analog Converter、DAC

      數(shù)字信號轉(zhuǎn)換成模擬信號的過程叫做數(shù)模轉(zhuǎn)換,簡寫成D/A,完成這種功能的電路叫做數(shù)模轉(zhuǎn)換器,也叫解調(diào)器,簡稱DAC。

      原始信號

      采樣并轉(zhuǎn)化后的數(shù)字信號

      理想濾波器濾波(1.5.9式的實現(xiàn)過程)

      最終還原后的信號

      M:理論上,滿足采樣定理采樣得到的數(shù)字信號,忽略量化誤差,經(jīng)過理想低通濾波器的濾波,能過無誤差的恢復(完全恢復)原始信號。但實際上,有量化誤差,而且理想低通濾波器是不存在的(非因果系統(tǒng)),所以需要找到能夠逼近理性低通濾波器的可行方案。

      實際恢復

      零階保持器的單位沖擊響應(DAC的單位沖擊響應)

      零階保持器的頻率特性(理想低通濾波器的一種逼近方式)

      零階保持器對一個數(shù)字信號的恢復過程

      1. 音頻數(shù)字信號

        1. 音頻對講方式

          1. 非實時單工音頻對講、Non-real-time Simplex Audio Talkback

      一方只發(fā)送提前錄制的音頻信號,其他方只接收音頻信號。例如:語音留言機、等等。

      1. 實時單工音頻對講、Real-time Simplex Audio Talkback

      一方只發(fā)送實時的音頻信號,其他方只接收音頻信號。例如:語音廣播、收聽收音機、音頻直播、等等。

      1. 非實時雙工音頻對講、Non-real-time Duplex Audio Talkback

      各方都可以發(fā)送提前錄制的音頻信號,并接收其他方發(fā)送的音頻信號。例如:語音消息、等等。

      1. 實時半雙工音頻對講、Real-time Half-duplex Audio Talkback

      各方都可以發(fā)送實時的音頻信號,并接收其他方發(fā)送的音頻信號,但接收和發(fā)送不能同時進行。例如:PTT一鍵即按即通對講、等等。

      1. 實時全雙工音頻對講、Real-time Full-duplex Audio Talkback

      各方都可以發(fā)送實時的音頻信號,并接收其他方發(fā)送的音頻信號,接收和發(fā)送同時進行。例如:固定電話、移動電話、網(wǎng)絡電話、等等。

       

      網(wǎng)絡電話,也稱互聯(lián)網(wǎng)電話、IP電話、Voice over Internet Protocol、VoIP,是指通話雙方將音頻信號以數(shù)據(jù)包的形式在互聯(lián)網(wǎng)上進行傳輸,從而實現(xiàn)打電話的功能。網(wǎng)絡電話的優(yōu)點就是資費很低,甚至是免費的,缺點就是網(wǎng)絡信號穩(wěn)定性比電話網(wǎng)要差。

      網(wǎng)絡電話通常是雙向同時進行的,也就是全雙工的。一方說話,另一方則聽到聲音,看似簡單,但是其背后的流程卻十分復雜,其各個主要環(huán)節(jié)簡化后如下圖所示:

      1. 音頻數(shù)字信號采樣、錄音、Audio Record、數(shù)字錄音、Digital Record

        1. 原理

      音頻數(shù)字信號采樣是指,從振動單元采集音頻模擬信號,然后轉(zhuǎn)換成音頻數(shù)字信號,最后存儲到存儲器中。

       

      音頻數(shù)字信號采樣的主要流程:

       

      振動單元

      當聲波到達振動單元時,聲波帶會帶動振動單元一起共振。

      不同振動材料在共振時,幅度一定會有些許區(qū)別,從而導致會有不同程度的失真。

      下圖就是一個話筒的振膜:

       

      音頻模擬信號

      振動單元在振動時,會產(chǎn)生一個功率隨振動幅度變化的交流電信號,這個交流電信號就是音頻模擬信號。

      把這個幅度值用二維坐標圖畫出來就是:

       

      信號功率放大

      由于從振動單元出來的音頻模擬信號的功率非常小,不足以驅(qū)動做后續(xù)的電路,所以要將其功率放大到一定的倍數(shù)。

      不同的放大電路在放大后,幅度一定會有些許區(qū)別,從而導致會有不同程度的失真。

       

      抖動

      添加一定的隨機噪音,為了防止一些諧波失真等問題。

       

      防混疊模擬低通濾波器

      防止頻率混疊造成的失真問題。

      不同的防混疊模擬低通濾波器在濾波后,殘留的混疊頻率可能會有些許區(qū)別,從而導致會有不同程度的失真。

       

      模數(shù)轉(zhuǎn)換器

      用于將模擬信號轉(zhuǎn)換為數(shù)字信號,由于計算機不能處理模擬信號,只能處理一個一個的數(shù)據(jù),所以我們要做這個轉(zhuǎn)換。

      不同的模數(shù)轉(zhuǎn)換器在轉(zhuǎn)換后,數(shù)字信號可能會有些許區(qū)別,從而導致會有不同程度的失真。

      轉(zhuǎn)換原理大致就是每隔一小段時間就采樣一次這個時刻的幅度并量化,如下圖:

       

      音頻數(shù)字信號

      經(jīng)過模數(shù)轉(zhuǎn)換后,音頻模擬信號就可以量化成一個4位有符號整型序列:{-1,1,2,4,5,6,6,7,7,7,6,5,4,2,1,-1,-3,-4,-6,-7,-7,-8,-8,-8,-7,-7,-6,-5,-4,-2,-1},也可以量化成一個4位無符號整型序列:{7,9,10,12,13,14,14,15,15,15,14,13,12,10,9,7,5,4,2,1,1,0,0,0,1,1,2,3,4,6,7},這個序列就是音頻數(shù)字信號了。

      轉(zhuǎn)換后的數(shù)字信號和轉(zhuǎn)換前的模擬信號是有一定的量化誤差的,量化誤差越大,失真就越大,量化誤差越小,失真就越小。

       

      傳輸

      將轉(zhuǎn)換出來的音頻數(shù)字信號傳輸?shù)浇邮赵O備里。

      不同的傳輸線材和周圍環(huán)境在傳輸后,音頻數(shù)字信號可能會有些許錯誤,從而導致會有不同程度的失真。

       

      糾錯

      由于傳輸過程中可能有干擾導致音頻數(shù)字信號出現(xiàn)錯誤,所以接收設備在接收到后需使用糾錯算法檢查出錯誤的數(shù)據(jù)并修正。

      不同的糾錯算法在糾錯后,音頻數(shù)字信號可能會有些許的殘留錯誤,從而導致會有不同程度的失真。

       

      存儲

      接收設備最后將音頻數(shù)字信號存儲到對應的存儲器,比如內(nèi)存、硬盤、磁帶、光盤、等等。

      不同的存儲器在存儲后,音頻數(shù)字信號可能會有些許錯誤,從而導致會有不同程度的失真。

      1. 音頻通道、Audio Channel、聲道、Channel

      我們可以簡單的理解為通過一個振動單元采樣到的音頻就是一個聲道,兩個振動單元就是兩個聲道,以此類推。

      一個麥克風里面有的有一個振動單元,有的有兩個振動單元。一個振動單元的麥克風進行的是Mono單聲道錄音,兩個振動單元的麥克風進行的是Stereo雙聲道立體聲錄音。五聲道環(huán)繞立體聲錄音就是麥克風1錄取東北方向的聲音,麥克風2錄取西北方向的聲音,麥克風3錄取西南方向的聲音,麥克風4錄取東南方向的聲音,麥克風5錄取正前方的聲音。另外還有四聲道環(huán)繞立體聲錄音和七聲道環(huán)繞立體聲錄音。

      單聲道麥克風:,雙聲道立體聲麥克風:

      1. 采樣頻率、Sampling Frequency、Frequency of Sampling、采樣率、抽樣率、Sampling Rate

      采樣頻率就是每秒對音頻模擬信號的采樣次數(shù),單位赫茲。采樣頻率越高,音頻數(shù)字信號就越接近之前的音頻模擬信號,音質(zhì)也就越好,硬件成本也就越高,存儲空間占用也就越大。

       

      常見音頻采樣頻率有:

      8000 Hz:電話所用采樣頻率,對于人的說話已經(jīng)足夠。

      11025 Hz:

      12000 Hz:

      16000 Hz:電話所用采樣頻率,比8000 Hz電話聽起來更有細節(jié)感。

      22050 Hz:無線電廣播所用采樣頻率。

      24000 Hz:

      32000 Hz:電話所用采樣頻率,比16000 Hz電話聽起來更細膩。miniDV 數(shù)碼視頻 camcorder、DAT(LP mode)所用采樣頻率。

      44100 Hz:音頻CD,也常用于MPEG-1音頻(VCD,SVCD,MP3)所用采樣頻率。

      47250 Hz:Nippon Columbia(Denon)開發(fā)的世界上第一個商用PCM錄音機所用采樣頻率。

      48000 Hz:電話所用采樣頻率,比32000 Hz電話聽起來更真實。miniDV、數(shù)字電視、DVD、DAT、電影和專業(yè)音頻所用的數(shù)字聲音所用采樣頻率。

      50000 Hz:二十世紀七十年代后期出現(xiàn)的3M和Soundstream開發(fā)的第一款商用數(shù)字錄音機所用采樣頻率。

      50400 Hz:三菱 X-80 數(shù)字錄音機所用所用采樣頻率。

      96000 Hz、192000 Hz:DVD-Audio、一些LPCM DVD音軌、Blu-ray Disc(藍光盤)音軌、和HD-DVD (高清晰度 DVD)音軌所用所用采樣頻率。

      2822400 Hz:SACD、索尼和飛利浦聯(lián)合開發(fā)的稱為 Direct Stream Digital 的 1 位 sigma-delta modulation 過程所用采樣頻率。

      1. 采樣周期、Sampling Period、Sampling Cycle、采樣間隔、Sampling Interval

      采樣周期就是兩次采樣之間的時間間隔,單位秒。

      計算公式:1÷采樣頻率。

      例如:如果采樣頻率為8000Hz,則采樣周期為1/8000秒;如果采樣頻率為16000Hz,則采樣周期為1/16000秒。

      1. 采樣位數(shù)、Sampling Bit、Sampling Digit、位深、Bit Depth

      采樣位數(shù)可以理解數(shù)字音頻設備處理聲音的解析度,即對聲音的辨析度。采樣位數(shù)一般有8位、16位、24位、32位等,就像表示顏色的表示位數(shù)一樣(8位能表示256種顏色,16位能表示65536種顏色)。

      采樣位數(shù)越高,采樣數(shù)據(jù)的級別越密集,幅值量化就越精準,音質(zhì)也就越好,但硬件成本也就越高,存儲空間占用也就越高。16位采樣已經(jīng)接近了人聽覺極限和痛苦極限,是音樂的理想范圍,一般采樣位數(shù)都是這么高了。

      1. 采樣數(shù)據(jù)、Sampling Data

      采樣數(shù)據(jù)就是指每一次采樣所得到的那個振幅值。具體取值范圍如下:

      采樣位數(shù)

      數(shù)據(jù)類型

      取值區(qū)間

      8位

      無符號整型

       

      8位

      有符號整型

       

      16位

      無符號整型

       

      16位

      有符號整型

       

      24位

      無符號整型

       

      24位

      有符號整型

       

      32位

      無符號整型

       

      32位

      有符號整型

       

      看情況

      有符號浮點型

       

       

      1. 采樣單元、Sampling Unit

      采樣單元就是指一次采樣所得到的全部聲道的采樣數(shù)據(jù)。

      例如:單聲道音頻的每個采樣單元只包含一個采樣數(shù)據(jù),雙聲道音頻的每個采樣單元包含兩個采樣數(shù)據(jù),以此類推。

      1. 幀、Frame、幀的長度、幀長、Frame Length

      幀就是將多個連續(xù)的采樣數(shù)據(jù)分為一組,一般是以時間為單位進行分幀,主要是為了便于處理采樣數(shù)據(jù)。例如:音頻編解碼一般是以幀為單位進行的,每次編解碼一幀。

       

      幀的長度是指一幀包含多少個采樣單元、或多少個采樣數(shù)據(jù)、或多少個字節(jié)。

       

      幀的長度計算公式(單位采樣單元):采樣頻率×時間。

      例如:采樣頻率為16000Hz,每幀的時間為20ms即0.02s,那么每幀的長度為:16000×0.02=320個采樣單元。

       

      幀的長度計算公式(單位采樣數(shù)據(jù)):聲道數(shù)×采樣頻率×時間。

      例如:聲道數(shù)為1,采樣頻率為16000Hz,每幀的時間為20ms即0.02s,那么每幀的長度為:1×16000×0.02=320個采樣數(shù)據(jù)。

       

      幀的長度計算公式(單位字節(jié)):聲道數(shù)×采樣頻率×(采樣位數(shù)÷8)×時間。

      例如:聲道數(shù)為1,采樣頻率為16000Hz,采樣位數(shù)為16位,每幀的時間為20ms即0.02s,

      那么每幀的長度為:16000×1×0.02=320個采樣數(shù)據(jù),1×16000×(16÷8)×0.02=640個字節(jié)。

      1. 幀率、Frame Rate

      幀率就是每秒的幀數(shù),單位為f/s、frames per second、fps。

      例如:采樣頻率為16000Hz,幀的長度為320個采樣單元,那么每幀的時間為20ms,則每秒有1000÷20=50幀,幀率為50幀/秒。

      1. 字節(jié)率、Byte Rate

      字節(jié)率就是每秒的字節(jié)數(shù),單位為B/s、byte per second、Bps。

      1. 比特率、Bit Rate

      比特率就是每秒的二進制位數(shù),單位為bit/s、bit per second、bps。

      1. 脈沖編碼調(diào)制、脈碼調(diào)制、Pulse Code Modulation、PCM

      我們采樣到的最原始的音頻數(shù)字信號的那一串數(shù)列就是脈沖編碼調(diào)制格式的,也叫PCM格式。具體格式如下:

      聲道數(shù)

      采樣位數(shù)

      字節(jié)1

      字節(jié)2

      字節(jié)3

      字節(jié)4

      字節(jié)5

      字節(jié)6

      字節(jié)7

      字節(jié)8

      ……

      單聲道

      8位

      采樣單元1

      采樣單元2

      采樣單元3

      采樣單元4

      采樣單元5

      采樣單元6

      采樣單元7

      采樣單元8

      ……

      FRONT

      前聲道

      FRONT

      前聲道

      FRONT

      前聲道

      FRONT

      前聲道

      FRONT

      前聲道

      FRONT

      前聲道

      FRONT

      前聲道

      FRONT

      前聲道

      單聲道

      16位

      采樣單元1

      采樣單元2

      采樣單元3

      采樣單元4

      ……

      FRONT

      前聲道

      FRONT

      前聲道

      FRONT

      前聲道

      FRONT

      前聲道

      雙聲道

      8位

      采樣單元1

      采樣單元2

      采樣單元3

      采樣單元4

      ……

      LEFT

      左聲道

      RIGHT

      右聲道

      LEFT

      左聲道

      RIGHT

      右聲道

      LEFT

      左聲道

      RIGHT

      右聲道

      LEFT

      左聲道

      RIGHT

      右聲道

      雙聲道

      16位

      采樣單元1

      采樣單元2

      ……

      LEFT

      左聲道

      RIGHT

      右聲道

      LEFT

      左聲道

      RIGHT

      右聲道

      注意:16位的采樣數(shù)據(jù)保存到文件中會有大端小端的區(qū)別,請根據(jù)實際情況選擇,一般為小端。

       

      通常情況下多聲道音頻數(shù)據(jù)格式如下:

      1: F (Mono)

      2: FL FR (Stereo)

      2.1: FL FR LFE (2.1 surround)

      4: FL FR BL BR (quad surround)

      5: FL FR FC BL BR (quad + center)

      5.1: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR)

      6.1: FL FR FC LFE BC SL SR (6.1 surround)

      7.1: FL FR FC LFE BL BR SL SR (7.1 surround)

      1. 響度、Loudness、音量、Volume、聲壓級、Sound Presure Level、SPL、分貝、Decibel

      聲音的強弱叫做響度,也叫音量,單位為分貝。

      分貝中,分指十分之一(deci),貝指貝爾(電話之父——亞歷山大·格拉漢姆·貝爾,bel),合起來就是decibel(音標[?des?bel]),簡稱dB。

      分貝的定義:兩個同類功率量或可與功率類比的量之比值的常用對數(shù)乘以10等于1時的級差。在中華人民共和國法定單位的補充說明中對"可與功率類比的量"加以了說明:"通常是指電流平方、電壓平方、質(zhì)點速度平方、聲壓平方、位移平方、速度平方、加速平方、力平方、振幅平方、場強和聲能密度等"。

      分貝的計算公式:,表示當前功率量,表示參考功率量,表示分貝。

      響度的計算公式:,表示當前音頻電壓,表示參考音頻電壓,表示分貝。

       

      為什么分貝的計算公式要用對數(shù)?因為人耳對聲音強弱程度的感知是對數(shù)關系,而不是線性關系,比如從靜音開始線性提高電壓,剛開始覺得聲音變強比較明顯,當達到了一定強度后,再提高電壓就會感覺聲音變強不怎么明顯了。

      為什么分貝的計算公式要乘以10?因為對數(shù)算出來的數(shù)值比較小,乘以10是為了提高10倍,方便化成整數(shù)使用。

      為什么計算出來的分貝值不符合國家標準?因為一般的音頻輸入設備采樣到的音頻數(shù)據(jù)與國家標準定義的聲壓級不匹配。

       

      SPL(Sound Presure Level)聲壓級,單位為Pa。比如1米外步槍射擊的聲音大概是7000Pa,10米外開過的汽車大概為0.2Pa。使用聲壓作為作為測量量的分貝單位為dBSPL。

      聲壓級的計算公式:,表示當前聲壓,單位為Pa,表示參考聲壓,單位為Pa,表示分貝。

      這里參考聲壓選擇0.00002Pa,即20uPa,差不多是人耳在1000Hz時能聽到的最小聲音。

      例如:1Pa聲壓的聲壓級。

       

      以下是有符號16位采樣數(shù)據(jù)對應到響度的曲線:

       

      以下是響度對應到有符號16位采樣數(shù)據(jù)的曲線:

       

      采樣數(shù)據(jù)

      參考振幅值

      最小值

      最大值

      動態(tài)范圍

      有符號8位

             
           

      無符號8位

             
           

      有符號16位

             
           

      無符號16位

             
           

      有符號24位

             
           

      無符號24位

             
           

      有符號32位

             
           

      無符號32位

             
           

       

      1. 響度調(diào)節(jié)、音量調(diào)節(jié)、分貝調(diào)節(jié)

      令,。

       

       

       

       

       

       

       

       

       

       

      為調(diào)節(jié)前的響度量,為要調(diào)節(jié)的響度增量,為調(diào)節(jié)前的音頻電壓,為調(diào)節(jié)后的音頻電壓。

      1. 音頻輸入設備性能參數(shù)、靈敏度、頻率響應曲線、本底噪音、信噪比、總諧波失真、最大聲壓級、指向性

      音頻輸入設備又稱為話筒、麥克風、傳聲器、咪頭、咪芯、拾音器、監(jiān)聽器、監(jiān)聽頭、等等。

       

      音頻輸入設備的基本性能參數(shù)如下:

      靈敏度、Sensitivity

      表示音頻輸入設備對1000Hz正弦波94dB聲壓級或1Pa聲壓的聲音的響應程度。

      高靈敏度的音頻輸入設備可以與較弱的聲音共振,從而記錄距離較遠或音量較低的聲音。

      低靈敏度的音頻輸入設備只能與較強的聲音共振,只能記錄距離較近或音量較高的聲音。

      計算方法:

      對于輸出為音頻模擬信號的音頻輸入設備,參考電壓為1V,如果輸出的交流電信號的電壓為0.01V,則靈敏度為

       

      對于輸出為音頻數(shù)字信號的音頻輸入設備,參考振幅值為32767,如果輸出的數(shù)字信號為327,則靈敏度為

       

       

      頻率響應曲線、Frequency Response Curve、頻響曲線

      表示音頻輸入設備對20Hz至20000Hz正弦波94dB聲壓級或1Pa聲壓的聲音的響應程度所連成的曲線。

      頻響曲線其實就是在不同頻率下的靈敏度。

      頻響曲線越平直,失真就越小,但有些場合可能需要有形狀的頻響曲線。

      平直的頻響曲線

      有形狀的頻響曲線

       

      本底噪音、Noise floor

      表示音頻輸入設備在沒有任何聲音輸入時的響應程度。

      本底噪音越小,失真就越小。

      計算方法:

      對于輸出為音頻模擬信號的音頻輸入設備,參考電壓為1V,如果輸出的交流電信號的電壓為0.00003V,則本底噪音為

       

      對于輸出為音頻數(shù)字信號的音頻輸入設備,參考振幅值為32767,如果輸出的數(shù)字信號為1,則本底噪音為

       

       

      信噪比、Signal to Noise Ratio、SNR

      表示音頻輸入設備對1000Hz正弦波94dB聲壓級或1Pa聲壓的聲音的響應程度與音頻輸入設備在沒有任何聲音輸入時的響應程度之比。

      信噪比越大,失真就越小。

      計算方法:

      對于輸出為音頻模擬信號的音頻輸入設備,參考電壓為1V,如果輸出的交流電信號的電壓分別為0.01V和0.00003V,則信噪比為

       

       

      對于輸出為音頻數(shù)字信號的音頻輸入設備,參考振幅值為32767,如果輸出的數(shù)字信號為327和1,則信噪比為

       

       

       

      總諧波失真、Total Harmonic Distortion、THD

      表示音頻輸入設備對1000Hz正弦波94dB聲壓級或1Pa聲壓的聲音所產(chǎn)生的所有諧波的功率與基波的功率之比。

      振動單元在與聲音共振時,會產(chǎn)生一定的諧波,原始聲音稱為基波,諧波的頻率為基波的正整數(shù)倍,一倍頻率的諧波稱為一次諧波,二倍頻率的諧波稱為二次諧波,以此類推,一次諧波也就是基波。

      總諧波失真越小,失真就越小,通常小于1%人耳就分辨不出來了。

      計算方法:

       

       

      最大聲壓級、Acoustic Overload Point、AOP、聲過載點

      表示音頻輸入設備對1000Hz正弦波的聲音總諧波失真小于10%的最大聲壓級。

      常見音頻輸入設備的最大聲壓級為120dB聲壓級,某些低靈敏度的可以達到130dB聲壓級。

      最大聲壓級越高,在強音環(huán)境下失真越小。

       

      指向性、Directivity

      表示音頻輸入設備對聲音的采集方向,全向型的音頻輸入設備可以采集整個現(xiàn)場的聲音,定向型的音頻輸入設備只能采集某個或某幾個方向的聲音。

      全向型

      心型

      超心型

      槍型

      雙向型、8字型

       

      基本性能參數(shù)只是簡單的反應了性能情況,并不能完整的判斷出實際的性能表現(xiàn),所以還是要實際測試才能知道。

      1. 音頻數(shù)字信號還原、回放、Audio Playback、播放、Audio Play、數(shù)字回放、Digital Playback

        1. 原理

      音頻數(shù)字信號還原是指,從存儲器中讀取音頻數(shù)字信號,然后轉(zhuǎn)換成音頻模擬信號,最后驅(qū)動振動單元。

       

      音頻數(shù)字信號還原的主要流程:

       

      存儲

      發(fā)送設備從存儲器中讀取音頻數(shù)字信號。

      不同的存儲器在讀取后,音頻數(shù)字信號可能會有些許錯誤,從而導致會有不同程度的失真。

       

      音頻數(shù)字信號

      就是之前的整型序列。

       

      傳輸

      將讀取出來的音頻數(shù)字信號傳輸?shù)揭纛l設備里。

      不同的傳輸線材和周圍環(huán)境在傳輸后,音頻數(shù)字信號可能會有些許錯誤,從而導致會有不同程度的失真。

       

      糾錯

      由于傳輸過程中可能有干擾導致音頻數(shù)字信號出現(xiàn)錯誤,所以音頻設備在接收到后需使用糾錯算法檢查出錯誤的數(shù)據(jù)并修正。

      不同的糾錯算法在糾錯后,音頻數(shù)字信號可能會有些許的殘留錯誤,從而導致會有不同程度的失真。

       

      數(shù)模轉(zhuǎn)換器

      用于將模擬信號轉(zhuǎn)換為數(shù)字信號,由于音頻設備不能播放數(shù)字信號,只能播放模擬信號,所以我們要做這個轉(zhuǎn)換。

      不同的數(shù)模轉(zhuǎn)換器在轉(zhuǎn)換后,模擬信號可能會有些許區(qū)別,從而導致會有不同程度的失真。

       

      信號功率放大

      由于從數(shù)模轉(zhuǎn)換器出來的音頻模擬信號的功率非常小,不足以驅(qū)動做后續(xù)的電路,所以要將其功率放大到一定的倍數(shù)。

      不同的放大電路在放大后,幅度一定會有些許區(qū)別,從而導致會有不同程度的失真。

       

      振動單元

      振動單元在大功率的音頻模擬信號驅(qū)動下產(chǎn)生振動,從而產(chǎn)生聲波。

      不同振動材料在振動時,幅度一定會有些許區(qū)別,從而導致會有不同程度的失真。

      下圖就是一個揚聲器的振膜:

      1. 音頻輸出設備性能參數(shù)、靈敏度、頻率響應曲線、本底噪音、信噪比、總諧波失真、最大聲壓級

      音頻輸出設備又稱為揚聲器、耳機、聽筒、音箱、音響、等等。

       

      音頻輸出設備的基本性能參數(shù)如下:

      靈敏度、Sensitivity

      表示音頻輸出設備在輸入端加上1000Hz正弦波1V或1mV或1W或1mW的電信號、距離音頻輸出設備正前方1米或0米處所產(chǎn)生聲音的聲壓級。

      靈敏度越高,音頻輸出設備在同等功率下發(fā)出的聲音越強。

       

      頻率響應曲線、Frequency Response Curve、頻響曲線

      表示音頻輸出設備在輸入端加上20Hz至20000Hz正弦波1V或1mV或1W或1mW的電信號、距離音頻輸出設備正前方1米或0米處所產(chǎn)生聲音的聲壓級。

      頻響曲線其實就是在不同頻率下的靈敏度。

      頻響曲線越平直,失真就越小,但有些場合可能需要有形狀的頻響曲線。

       

      阻抗、Impedance

      表示音頻輸出設備在輸入端加上1000Hz正弦波的電信號的總阻值,包括電阻、電容、電感。

      通常阻抗越高,靈敏度越低,低音表現(xiàn)越好。

       

      阻抗曲線、Impedance Curve

      表示音頻輸出設備在輸入端加上20Hz至20000Hz正弦波的電信號的總阻值所連成的曲線,包括電阻、電容、電感。

       

      本底噪音、Noise floor

       

      信噪比、Signal to Noise Ratio、SNR

       

      總諧波失真、Total Harmonic Distortion、THD

      表示音頻輸出設備在輸入端加上1000Hz正弦波1W或1mW聲壓的電信號所產(chǎn)生聲音的所有諧波的功率與基波的功率之比。

      振動單元在與聲音共振時,會產(chǎn)生一定的諧波,原始聲音稱為基波,諧波的頻率為基波的正整數(shù)倍,一倍頻率的諧波稱為一次諧波,二倍頻率的諧波稱為二次諧波,以此類推,一次諧波也就是基波。

       

      最大聲壓級、Acoustic Overload Point、AOP、聲過載點

      表示音頻輸出設備在輸入端加上1000Hz正弦波的電信號所產(chǎn)生聲音的總諧波失真小于10%的最大聲壓級。

      最大聲壓級越高,在強音信號下失真越小。

       

      基本性能參數(shù)只是簡單的反應了性能情況,并不能完整的判斷出實際的性能表現(xiàn),所以還是要實際測試才能知道。

      1. 網(wǎng)絡傳輸、Network Transport

      發(fā)送方依次將各個音頻幀通過網(wǎng)絡發(fā)送給通話的對方。由于音頻對講對實時性要求比較高,所以低延遲和平穩(wěn)連續(xù)是非常重要的,這樣音頻對講才能順暢。

      網(wǎng)絡傳輸必須要注意的問題就是,一個是亂序到達,一個是重復到達,一個是丟包。

      一般常用的網(wǎng)絡傳輸協(xié)議是實時傳輸協(xié)議(Real-time Transport Protocol、RTP),也有用TCP或UDP協(xié)議的。

      1. 音頻數(shù)字信號處理、Audio Digital Signal Processing、Audio DSP

        1. 簡介

      如果只是實現(xiàn)網(wǎng)絡電話,那就只需要進行采樣、傳輸、播放就好了,但是實際使用中我們會發(fā)現(xiàn)各種問題嚴重影響我們的電話體驗,所以效果良好的網(wǎng)絡電話應該達到以下幾點:

      1. 聲音延遲低,實時感很強。
      2. 聲音流暢,沒有卡頓的感覺。
      3. 聲音清晰,沒有失真的感覺。
      4. 音量適中,沒有忽大忽小的感覺。
      5. 沒有聲學回音和線路回音。
      6. 噪音很小。
      7. 網(wǎng)絡流量要小。
      1. 編碼、Encode、解碼、Decode

        1. 簡介

      如果我們將采樣到的PCM格式音頻數(shù)據(jù)直接發(fā)送或者存儲,那么每秒需要占用的帶寬就是16000Hz×16bit=31.25KB/S,這就要占用很大的帶寬了。那么我們就需要對PCM格式進行壓縮了,將壓縮后的音頻數(shù)據(jù)再進行發(fā)送或者存儲,當需要播放的時候,再解壓縮成PCM格式進行播放。我們把音頻數(shù)據(jù)壓縮的過程稱之為編碼,把音頻數(shù)據(jù)解壓縮的過程稱之為解碼。

      通常情況下沒有解碼的音頻數(shù)據(jù)是不能播放的,除非直接傳輸PCM格式,但也有些操作系統(tǒng)可以直接播放某些常用編碼格式的音頻數(shù)據(jù),其實就是操作系統(tǒng)幫我們做了解碼。

       

      音頻編碼算法按音質(zhì)可分為:無損壓縮,有損壓縮。

      音頻編碼算法按編碼方式可分為:波形編碼、參數(shù)編碼、波形參數(shù)混合編碼。

      音頻編碼算法按比特率可分為:固定比特率、可變比特率、平均比特率。

      1. 無損壓縮、Lossless Compression

      無損壓縮是指編碼前的PCM格式音頻數(shù)據(jù)和解碼后的PCM格式音頻數(shù)據(jù)是完全一樣的,所以經(jīng)過編解碼的音頻信號沒有任何的損失,音質(zhì)是最好的,但帶寬占用會較高。

      1. 有損壓縮、Lossy Compression

      有損壓縮是指解碼后的PCM格式音頻數(shù)據(jù)只是近似于編碼前的PCM格式音頻數(shù)據(jù),并不完全一樣,所以經(jīng)過編解碼的音頻信號的音質(zhì)是有損失的,但帶寬占用會較低。

      1. 波形編碼、Waveform Encode

      波形編碼是指不利用音頻信號的任何特性參數(shù),直接將時間域音頻數(shù)字信號波形變換為數(shù)字代碼,使重構的音頻數(shù)字信號波形盡可能地與原始的形狀保持一致。

      波形編碼方法簡單、易于實現(xiàn)、適應能力強并且語音質(zhì)量好。不過因為壓縮方法簡單也帶來了一些問題:壓縮比相對較低,需要較高的編碼速率。一般來說,波形編碼的復雜程度比較低,編碼速率較高、通常在16 kbit/s以上,質(zhì)量相當高。但編碼速率低于16 kbit/s時,音質(zhì)會急劇下降。

      最簡單的波形編碼方法是PCM(Pulse Code Modulation,脈沖編碼調(diào)制),它只對語音信號進行采樣和量化處理。優(yōu)點是編碼方法簡單,延遲時間短,音質(zhì)高,重構的語音信號與原始語音信號幾乎沒有差別。不足之處是編碼速率比較高(64 kbit/s),對傳輸通道的錯誤比較敏感。

      1. 參數(shù)編碼、Parameter Encode

      參數(shù)編碼是指從音頻數(shù)字信號中提取音頻特性參數(shù),使用這些參數(shù)通過音頻生成模型重構出音頻數(shù)字信號,使重構的音頻數(shù)字信號盡可能地保持原始的語意。也就是說,參數(shù)編碼是把音頻數(shù)字信號產(chǎn)生的數(shù)字模型作為基礎,然后求出數(shù)字模型的模型參數(shù),再按照這些參數(shù)還原數(shù)字模型,進而合成音頻。

      參數(shù)編碼的編碼速率最低可以達到2.4 kbit/s,產(chǎn)生的語音信號是通過建立的數(shù)字模型還原出來的,因此重構的語音信號波形與原始語音信號的波形可能會存在較大的區(qū)別、失真會比較大。而且因為受到語音生成模型的限制,增加數(shù)據(jù)速率可能也無法提高合成音頻的質(zhì)量。

      1. 波形參數(shù)混合編碼、Waveform Parameter Mixed Encode

      波形參數(shù)混合編碼是指同時使用波形編碼和參數(shù)編碼進行編碼,這種方法克服了波形編碼和參數(shù)編碼的弱點,并結合了波形編碼高質(zhì)量和參數(shù)編碼的低編碼速率,編碼速率和音質(zhì)介于它們之間,能夠取得比較好的效果。

      1. 固定比特率、靜態(tài)比特率、固定碼率、Constant Bit Rate、CBR

      對于視頻編碼來說,CBR編碼指的是編碼器每秒鐘的輸出碼數(shù)據(jù)量(或者解碼器的輸入碼率)應該是固定制(常數(shù))。編碼器檢測每一幀圖像的復雜程度,然后計算出碼率。如果碼率過小,就填充無用數(shù)據(jù),使之與指定碼率保持一致;如果碼率過大,就適當降低碼率,也使之與指定碼率保持一致。因此,固定碼率模式的編碼效率比較低。在快速運動畫面部分,畫面細節(jié)較多,一般需要更多的比特來描述,但由于強行降低碼率,因此會丟失部分畫面的細節(jié)信息,而出現(xiàn)畫面模糊、不清晰現(xiàn)象。對于音頻壓縮來說,比如MP3,比特率是最重要的因素,它用來表示每秒鐘的音頻數(shù)據(jù)占用了多少個比特,這個值越高,音質(zhì)就越好。CBR使用固定比特率編碼音頻,一首MP3從頭至尾為某固定值,如128 kbps進行編碼。

      1. 可變比特率、動態(tài)比特率、可變碼率、Variable Bit Rate、VBR

      可變比特率可以隨著圖像的復雜程度的不同而變化,因此其編碼效率比較高,快速運動畫面的馬賽克就很少。編碼軟件在壓縮時,根據(jù)視頻數(shù)據(jù),即時確定使用什么比特率,這樣既保證了質(zhì)量,又兼顧了文件大小。使用這種方式時,編碼程序可以選擇從最差音視頻質(zhì)量(一般此時壓縮比最高)到最好音視頻質(zhì)量(一般此時壓縮比最低)之間的各種視頻質(zhì)量。在視頻文件編碼的時候,編碼程序會嘗試保持所選定的整個文件的品質(zhì),對視頻文件的不同部分選擇不同的比特率來編碼。例如,使用MP3格式的音頻編解碼器,音頻文件可以以8~320kbps的可變碼率進行壓縮,得到相對小的文件來節(jié)約存儲空間。

      當形容編解碼器的時候,VBR編碼指的是編碼器的輸出碼率(或者解碼器的輸入碼率)可以根據(jù)編碼器的輸入源信號的復雜度自適應的調(diào)整,目的是達到保持輸出質(zhì)量保持不變而不是保持輸出碼率保持不變。VBR適用于存儲(不太適用于流式傳輸),可以更好的利用有限的存儲空間:用比較多的碼字對復雜度高的段進行編碼,用比較少的碼字對復雜度低的段進行編碼。

      像Vorbis這樣的編解碼器和幾乎所有的視頻編解碼器內(nèi)在的都是VBR的。*.mp3文件也可以以VBR的方式進行編碼。

      例如:有一段采樣頻率8000Hz的PCM格式音頻數(shù)據(jù),一共10幀,每幀20ms,可能其中5幀聲音變化較大,其他5幀聲音變化較小,那么用VBR來編碼時,就會把聲音變化較大的那5幀用較高的采樣頻率編碼,編碼后體積也較大,另外那聲音變化較小的那5幀就用較低的采樣頻率編碼,編碼后體積也較小。

      1. 平均比特率、平衡比特率、平均碼率、Average Bitrate Rate、ABR

      平均比特率是VBR的一種插值參數(shù)。它針對CBR不佳的文件體積比和VBR生成文件大小不定的特點獨創(chuàng)了這種編碼模式。ABR在指定的文件大小內(nèi),例如以每50幀(30幀約1秒)為一段,低頻和不敏感頻率使用相對低的流量,高頻和大動態(tài)表現(xiàn)時使用高流量,可以做為VBR和CBR的一種折衷選擇。

      1. 聲學回音消除、Acoustic Echo Cancellation、AEC

        1. 簡介

      當我們在音頻通話時,經(jīng)常會用到電腦的揚聲器外放功能,或者手機的免提功能。這是一個很方便的功能,但此時揚聲器播放的聲音會被麥克風再次采集,然后在傳給對方時,對方就會聽到自己的聲音,俗稱聲學回音。這個聲學回音在被循環(huán)很多次之后,還有可能會變成嘯叫。所以,我們需要將這個聲學回音消除掉。注意,如果用耳機或聽筒通話或半雙工通話時,通常不需要做聲學回音消除,因為此時通常不會產(chǎn)生聲學回音。

      我們這種情況產(chǎn)生的聲學回音其實是一種自噪聲,還有一種聲學回音是由其他聲源發(fā)出的聲音并超過100毫秒時延的混響音,人類能夠明顯區(qū)分出,似乎一個聲音同時出現(xiàn)了兩次或多次,比如天壇著名的回音壁。

      聲學回音消除算法的原理就是,根據(jù)音頻輸出信號,在音頻輸入信號中做一些類似抵消的運算,從而將聲學回音從音頻輸入信號中過濾掉。這個算法過程是相當復雜的,因為根據(jù)你聊天時所處的房間的大小、以及你在房間中的位置,回音的聲波反射音量、時長和次數(shù)將會不一樣,所以聲學回音消除算法需要自動調(diào)整內(nèi)部參數(shù)來適應當前的設備和環(huán)境。

       

      做聲學回音消除必須注意的問題:

      1. 首先應該盡量避免產(chǎn)生聲學回音。比如:讓麥克風與揚聲器的距離盡量遠;麥克風與揚聲器之間盡量隔音;麥克風與揚聲器的朝向盡量相反;降低麥克風的靈敏度;降低揚聲器的功率;等等。這么做可以減少聲學回音消除算法的難度,還可以提升遠近端同時說話時近端聲音的保留量,這是聲學回音消除最有效的辦法。
      2. 再次必須保證軟硬件環(huán)境沒有問題,否則聲學回音消除算法可能無法正確識別聲學回音,從而導致聲學回音無法消除。比如:音頻輸入設備采樣到的音頻數(shù)字信號沒有非環(huán)境音的雜音、沒有干擾音、沒有失真、沒有掉幀;音頻輸出設備播放出來的音頻模擬信號沒有非原始信號的雜音、沒有干擾音、沒有失真、沒有掉幀。造成這些問題的可能原因有:從音頻輸入輸出設備到聲卡芯片再到CPU的電路中有被干擾,需要盡量遠離其他電路;音頻輸入輸出設備使用同一個聲卡芯片導致相互干擾,需要盡量分開兩個芯片或降低音頻輸出設備功率;音頻輸入輸出設備剛通電一瞬間可能會有脈沖電流通過,需要盡量避免或減少;音頻輸入輸出設備質(zhì)量問題導致聲音有失真,需要更換質(zhì)量更好的;操作系統(tǒng)的聲卡驅(qū)動有問題,需要盡量更換穩(wěn)定的聲卡驅(qū)動;等等。
      3. 做聲學回音消除前,要盡量保證音頻輸入幀和音頻輸出幀是同步的,時間差越小,聲學回音消除效果就越好,時間差越大,聲學回音消除效果也就越差,因為聲學回音消除算法是需要同時傳入音頻輸入幀和音頻輸出幀的。
      4. 聲學回音消除一般都是在一個音頻輸入幀剛采樣完畢和一個音頻輸出幀剛播放完畢后,就立刻做,不要在做了其他處理之后再做,這樣會降低效果。
      5. 聲學回音必須在遠端音頻出現(xiàn)之后出現(xiàn),因為必須是先播放出來,然后麥克風才能采樣到,否則聲學回音消除算法會認為這是近端聲音,而不是聲學回音。
      6. 聲學回音與遠端音頻會有一段時間間隔,有些聲學回音消除算法可以自動適應這個時間間隔,但有些聲學回音消除算法無法自動適應這個時間間隔,需要手動設置,這個時間間隔設置是否精準,將直接導致聲學回音消除效果的好壞,設置不好可能會導致聲學回音無法消除,或者近端聲音被誤消除掉。
      7. 聲學回音一般都比遠端音頻的音量要小,但也有些揚聲器的音量較大,會將遠端音頻的音量放大很多,導致聲學回音的音量要比遠端音頻的音量大很多,這種情況下有些聲學回音消除算法可能無法正確識別聲學回音,這就需要更換更好的聲學回音消除算法。
      8. 如果說話雙方同時說話,那么聲學回音與近端聲音就會重疊,這種情況下有些聲學回音消除算法可能無法正確識別聲學回音,從而導致聲學回音與近端聲音都被消除了,這就需要更換更好的聲學回音消除算法。
      9. 測試聲學回音消除算法的時候,如果對講的兩個設備在同一個房間,那么兩個設備會相互采樣到對方揚聲器播放出來的聲音,會導致產(chǎn)生嘯叫,所以測試時盡量要在不同的房間,兩個設備之間不能相互聽見。

       

      聲學回音消除算法一般有這幾種:時域算法,頻域算法,子帶算法。

      聲學回音消除算法分為兩大類:基于DSP等實時平臺的回音消除,基于Windows等非實時平臺的回音消除。兩者的技術難度和重點是不一樣的。

       

      各個操作系統(tǒng)是否自帶聲學回音消除功能:

      Windows、UNIX、Linux操作系統(tǒng)沒有自帶聲學回音消除功能,需要調(diào)用第三方庫實現(xiàn)。

      Android操作系統(tǒng)雖然自帶有聲學回音消除功能,但是需要設備廠商自己實現(xiàn),由于很多廠商都實現(xiàn)不了該功能,所以很多手機都不自帶該功能,仍然需要調(diào)用第三方庫實現(xiàn)。

      IOS操作系統(tǒng)自帶有聲學回音消除功能,而且效果非常好,可以放心調(diào)用,當然也可以調(diào)用第三方庫實現(xiàn)。

       

      聲學回音消除效果演示:

      音頻輸入信號:

      音頻輸出信號:

      音頻結果信號:

      1. 音頻輸入輸出幀同步的方法

      所謂音頻輸入輸出幀同步就是指,音頻輸入幀和音頻輸出幀的開始時間及結束時間都是相同的時刻。

      由于聲學回音消除算法要求音頻輸入輸出幀同步得非常好,所以在做聲學回音消除前,必須先研究如何做同步。但是,其實聲學回音消除算法要求并不一定完全同步,主要是要求音頻輸入幀必須比音頻輸出幀要先開始,只要能保證音頻輸入信號中的聲學回音出現(xiàn)在音頻輸出信號中的遠端聲音之后,聲學回音就可以被消除掉,但又不能先開始太久,越靠近越好,一般先開始0ms~300ms都是可以正常消除的。

      比如:一幀20ms,音頻輸入幀的開始時間為13點05分15秒220毫秒、結束時間為13點05分15秒240毫秒,那么音頻輸出幀的開始時間也應該為13點05分15秒220毫秒、結束時間也應該為13點05分15秒240毫秒。如果做不到完全同步,音頻輸出幀的開始時間也可以為13點05分15秒340毫秒、結束時間也可以為13點05分15秒360毫秒,慢120ms左右回音消除一般是不會有問題的。

       

       

      同步的方法:

      Windows、UNIX、Linux操作系統(tǒng)

      第一種:直接用PortAudio庫可以完美同步。

      第二種:本人認為PortAudio庫用起來不是很順手,所以決定直接調(diào)用Windows系統(tǒng)的API來做同步。

       

      UNIX、Linux操作系統(tǒng):

      還沒有做過。

       

      Android操作系統(tǒng)

      第一種:調(diào)用第三方修改的jni層的Android版的PortAudio的OpenSLES庫實現(xiàn)同步,本方法可以完美同步,但是有些手機對OpenSLES庫支持并不好,導致播放或錄音有很高的延遲,所以本方法兼容性較差。下載地址:https://github.com/Gundersanne/portaudio_opensles

      第二種:在單線程中,先初始化AudioRecord類和AudioTrack類,并先調(diào)用AudioRecord.startRecording()函數(shù)再調(diào)用AudioTrack.play()函數(shù),然后進入循環(huán)體,先調(diào)用AudioTrack.write()函數(shù)阻塞播放音頻輸出幀,然后再調(diào)用AudioRecord.read()函數(shù)獲取音頻輸入幀,循環(huán)體完畢。理論上這樣做出來的音頻輸入輸出幀就是同步的,但是由于Android操作系統(tǒng)Java代碼的函數(shù)調(diào)用是有延遲的,不同的手機延遲會不一樣,最終就會導致大部分的手機不能同步,所以本方法兼容性和穩(wěn)定性都很差。

      第三種:先在主線程中,初始化AudioRecord類和AudioTrack類,并先調(diào)用AudioRecord.startRecording()函數(shù)再調(diào)用AudioTrack.play()函數(shù),然后再啟動兩個線程,一個音頻輸入線程負責調(diào)用AudioRecord.read()函數(shù)獲取音頻輸入幀,并依次存放到已錄音的音頻輸入幀鏈表,一個音頻輸出線程負責調(diào)用AudioTrack.write()函數(shù)播放音頻輸出幀,并依次存放到已播放的音頻輸出幀鏈表。先啟動音頻輸入線程,再啟動音頻輸出線程,這樣已錄音的音頻輸入幀鏈表和已播放的音頻輸出幀鏈表里的幀就是一一對應同步的,本方法在大部分情況下可以差不多完美同步,但是極少數(shù)情況下如果系統(tǒng)出現(xiàn)突然卡頓,就可能會不同步了,所以本方法兼容性和穩(wěn)定性都很好。

      第四種:本人后來發(fā)現(xiàn),有些手機在調(diào)用AudioRecord.startRecording()函數(shù)后,居然并沒有真正開始錄音,而是要在調(diào)用AudioRecord.read()函數(shù)過程中時才會真正開始,那么這樣就有可能會導致播放線程走在前面了,所以在第三種方法中,改為在音頻輸入線程調(diào)用一次AudioRecord.read()函數(shù)并丟棄掉后,再在音頻輸入線程中啟動音頻輸出線程。這樣本方法在絕大部分情況下可以差不多完美同步。

      第五種:本人后來又發(fā)現(xiàn),有些手機在調(diào)用AudioRecord.read()函數(shù)后,居然并沒有真正開始錄音,而是要在調(diào)用好幾次AudioRecord.read()函數(shù)后才會真正開始,那么這樣就有可能會導致播放線程走在前面了,所以在第四種方法中,改為在音頻輸入線程調(diào)用多次AudioRecord.read()函數(shù),直到讀取到的音頻數(shù)據(jù)不是全0了并全部丟棄掉后,再在音頻輸入線程中啟動音頻輸出線程。這樣本方法在所有手機上可以差不多完美同步。

      第六種:本人后來又發(fā)現(xiàn),在調(diào)用AudioRecord.read()函數(shù)后,讀取到的音頻幀有可能就是全0的,并不一定是沒有真正開始錄音,所以就可能會丟失正常音頻,并且對聲學回音的延遲估計也不準。現(xiàn)在改為初始化AudioRecord類和AudioTrack類,然后啟動音頻輸入線程,音頻輸入線程先調(diào)用AudioTrack.write()函數(shù)播放空的音頻輸出幀,直到如果播放耗時較長,就表示AudioTrack類的緩沖區(qū)已經(jīng)寫滿,寫入的空的音頻幀的時長就是音頻輸出的延遲,然后再在調(diào)用AudioRecord.startRecording()函數(shù)后,開始計時,然后在調(diào)用一次AudioRecord.read()函數(shù)后,結束計時,這段時間就是音頻輸入的延遲,最后把音頻輸入的延遲和音頻輸出的延遲加起來就約等于聲學回音的延遲。經(jīng)過這么一計算,再啟動音頻輸出線程,這樣也保證了音頻輸入線程能走在音頻輸出線程的前面。這是我目前認為最好的同步辦法。

       

      IOS操作系統(tǒng)

      應該和Android操作系統(tǒng)的第六種方法同理,本人沒有測試過。

      如果是調(diào)用系統(tǒng)自帶的聲學回音消除功能是不需要做同步的。

      1. 多聲道音頻聲學回音消除的方法

      一般的語音通話都是單聲道的錄音和播放,做聲學回音消除比較簡單,但是如果是多聲道的錄音和播放,就需要對每個聲道依次做聲學回音消除了。

      具體方法就是,先分別將錄音和播放的一個多聲道音頻幀拆分成多個單聲道音頻幀,然后將錄音的每個單聲道音頻幀依次與播放的每個單聲道音頻幀做聲學回音消除,最后把錄音的多個單聲道音頻幀合并成一個多聲道音頻幀。

      例如,錄音和播放都是雙聲道,先分別將錄音和播放的一個雙聲道音頻幀拆分成一個左聲道音頻幀和一個右聲道音頻幀,然后將錄音的左聲道音頻幀與播放的左聲道音頻幀做聲學回音消除,再用剛剛做了聲學回音消除的左聲道音頻幀與播放的右聲道音頻幀做聲學回音消除,現(xiàn)在這個錄音的左聲道音頻幀才是做完聲學回音消除了,同理再對錄音的右聲道音頻幀做聲學回音消除,最后把做完聲學回音消除的錄音的左聲道音頻幀和右聲道音頻幀合并成一個雙聲道音頻幀,最終這個錄音的雙聲道音頻幀就是做完聲學回音消除的了。

      1. 同一房間聲學回音消除的方法

      同一房間的聲學回音就是因為近端和遠端挨得比較近,那么近端發(fā)送給遠端的音頻,在遠端播放以后,又被近端的麥克風錄音了,然后近端又發(fā)送給了遠端,這樣就產(chǎn)生了聲學回音。

      消除的方法就是將近端的音頻延時一段時間作為聲學回音消除的參考音頻,然后又和近端未延時的音頻做聲學回音消除,再將做了聲學回音消除后的近端未延時的音頻發(fā)送給遠端就可以了。

      1. 解密回聲消除技術(轉(zhuǎn)載)

      http://blog.51cto.com/silversand/166095

      http://blog.51cto.com/silversand/166101

       

      一、前言

      因為工作的關系,筆者從2004年開始接觸回聲消除(Echo Cancellation)技術,而后一直在某大型通訊企業(yè)從事與回聲消除技術相關的工作,對回聲消除這個看似神秘、高端和難以理解的技術領域可謂知之甚詳。

      要了解回聲消除技術的來龍去脈,不得不提及作為現(xiàn)代通訊技術的理論基礎——數(shù)字信號處理理論。首先,數(shù)字信號處理理論里面有一門重要的分支,叫做自適應信號處理。而在經(jīng)典的教材里面,回聲消除問題從來都是作為一個經(jīng)典的自適應信號處理案例來討論的。既然回聲消除在教科書上都作為一種經(jīng)典的具體的應用,也就是說在理論角度是沒有什么神秘和新鮮的,那么回聲消除的難度在哪里?為什么提供回聲消除技術(不管是芯片還是算法)的公司都是來自國外?回聲消除技術的神秘性在哪里?

       

      二、回聲消除原理

      從通訊回音產(chǎn)生的原因看,可以分為聲學回音(Acoustic Echo)和線路回音(Line Echo),相應的回聲消除技術就叫聲學回聲消除(Acoustic Echo Cancellation,AEC)和線路回聲消除(Line Echo Cancellation, LEC)。聲學回音是由于在免提或者會議應用中,揚聲器的聲音多次反饋到麥克風引起的(比較好理解);線路回音是由于物理電子線路的二四線匹配耦合引起的(比較難理解)。

      回音的產(chǎn)生主要有兩種原因:

      1、由于空間聲學反射產(chǎn)生的聲學回音(見下圖):

      圖中的男子說話,語音信號(speech1)傳到女士所在的房間,由于空間的反射,形成回音speech1(Echo)重新從麥克風輸入,同時疊加了女士的語音信號(speech2)。此時男子將會聽到女士的聲音疊加了自己的聲音,影響了正常的通話質(zhì)量。此時在女士所在房間應用回音抵消模塊,可以抵消掉男子的回音,讓男子只聽到女士的聲音。

      2、由于2-4線轉(zhuǎn)換引入的線路回音(見下圖):

      在ADSL Modem和交換機上都存在2-4線轉(zhuǎn)換的電路,由于電路存在不匹配的問題,會有一部分的信號被反饋回來,形成了回音。如果在交換機側(cè)不加回音抵消功能,打電話的人就會自己聽到自己的聲音。

      不管產(chǎn)生的原因如何,對語音通訊終端或者語音中繼交換機需要做的事情都一樣:在發(fā)送時,把不需要的回音從語音流中間去掉。

      試想一下,對一個至少混合了兩個聲音的語音流,要把它們分開,然后去掉其中一個,難度何其之大。就像一瓶藍墨水和一瓶紅墨水倒在一起,然后需要把紅墨水提取出來,這恐怕不可能了。所以回聲消除被認為是神秘和難以理解的技術也就不奇怪了。誠然,如果僅僅單獨拿來一段混合了回音的語音信號,要去掉回音也是不可能的(就算是最先進的盲信號分離技術也做不到)。但是,實際上,除了這個混合信號,我們是可以得到產(chǎn)生回音的原始信號的,雖然不同于回音信號。

      我們看下面的AEC聲學回聲消除框圖(本圖片轉(zhuǎn)載)。

      Figure  Acoustic Echo Cancellation in a voice communication terminal

      其中,我們可以得到兩個信號:一個是藍色和紅色混合的信號1,也就是實際需要發(fā)送的speech和實際不需要的echo混合而成的語音流;另一個就是虛線的信號2,也就是原始的引起回音的語音。那大家會說,哦,原來回聲消除這么簡單,直接從混合信號1里面把把這個虛線的2減掉不就行了?請注意,拿到的這個虛線信號2和回音echo是有差異的,直接相減會使語音面目全非。我們把混合信號1叫做近端信號ne,虛線信號2叫做遠端參考信號fe,如果沒有fe這個信號,回聲消除就是不可能完成的任務,就像"巧婦難為無米之炊"。

      雖然參考信號fe和echo不完全一樣,存在差異,但是二者是高度相關的,這也是echo稱之為回音的原因。至少,回音的語義和參考信號是一樣的,也還聽得懂,但是如果你說一句,馬上又聽到自己的話回來一句,那是比較難受的。既然fe和echo高度相關,echo又是fe引起的,我們可以把echo表示為fe的數(shù)學函數(shù):echo=F(fe)。函數(shù)F被稱之為回音路徑。在聲學回聲消除里面,函數(shù)F表示聲音在墻壁,天花板等表面多次反射的物理過程;在線路回聲消除里面,函數(shù)F表示電子線路的二四線匹配耦合過程。很顯然,我們下面要做的工作就是求解函數(shù)F。得到函數(shù)F就可以從fe計算得到echo,然后從混合信號1里面減掉echo就實現(xiàn)了回聲消除。

       

      盡管回聲消除是非常復雜的技術,但我們可以簡單的描述這種處理方法:

      1、房間A的音頻會議系統(tǒng)接收到房間B中的聲音

      2、聲音被采樣,這一采樣被稱為回聲消除參考

      3、隨后聲音被送到房間A的音箱和聲學回聲消除器中

      4、房間B的聲音和房間A的聲音一起被房間A的話筒拾取

      5、聲音被送到聲學回聲消除器中,與原始的采樣進行比較,移除房間B的聲音

       

      求解回音路徑函數(shù)F的過程恐怕就是比較難以表達的數(shù)學公式了。鑒于通俗表達數(shù)學公式的難度比發(fā)現(xiàn)數(shù)學公式還難,筆者就不費力解釋了。下面這段表達了利用自適應濾波器原理求解函數(shù)F的過程。(以下可以跳過

       

      自適應濾波器

      自適應濾波器是以輸入和輸出信號的統(tǒng)計特性的估計為依據(jù),采取特定算法自動地調(diào)整濾波器系數(shù),使其達到最佳濾波特性的一種算法或裝置。自適應濾波器可以是連續(xù)域的或是離散域的。離散域自適應濾波器由一組抽頭延遲線、可變加權系數(shù)和自動調(diào)整系數(shù)的機構組成。附圖表示一個離散域自適應濾波器用于模擬未知離散系統(tǒng)的信號流圖。自適應濾波器對輸入信號序列x(n)的每一個樣值,按特定的算法,更新、調(diào)整加權系數(shù),使輸出信號序列y(n)與期望輸出信號序列d(n)相比較的均方誤差為最小,即輸出信號序列y(n)逼近期望信號序列d(n)。

      以最小均方誤差為準則設計的自適應濾波器的系數(shù)可以由維納-霍甫夫方程解得。

      B.維德羅提出的一種方法,能實時求解自適應濾波器系數(shù),其結果接近維納-霍甫夫方程近似解。這種算法稱為最小均方算法或簡稱LMS法。這一算法利用最陡下降法,由均方誤差的梯度估計從現(xiàn)時刻濾波器系數(shù)向量迭代計算下一個時刻的系數(shù)向量

      式中ks為一負數(shù),它的取值決定算法的收斂性, Vε2(n)】為均方誤差梯度估計,

      自適應濾波器應用于通信領域的自動均衡、回聲消除、天線陣波束形成,以及其他有關領域信號處理的參數(shù)識別、噪聲消除、譜估計等方面。對于不同的應用,只是所加輸入信號和期望信號不同,基本原理則是相同的。(以上部分可以跳過

       

      上面這段話表明,需要求解的回音路徑函數(shù)F就是一個自適應濾波器W(n)收斂的過程。所加輸入信號x(n)是fe,期望信號是echo,自適應濾波器收斂后的W(n)就是回音路徑函數(shù)F。 收斂之后,當實際回音發(fā)生,我們把fe通過函數(shù)W(n),就可以得到一個很準確的echo,把混合信號直接減去echo,得到實際需要發(fā)送的語音speech,完成回聲消除任務。

      值得注意的兩點:

      1、自適應濾波器收斂階段,期望信號是完全的echo,不能混雜有speech。因為speech和fe是沒有關系的,會擾亂W(n)的收斂過程。也就是說要求回聲消除算法開始運轉(zhuǎn)后收斂要非常快,最好對方還來不及說話,你一說就收斂好了;收斂好之后,如果對方開始說話,也就是有speech混合過來,這個W(n)系數(shù)就不要變化了,需要穩(wěn)定下來。

      2、回音路徑可能是變化的,一旦出現(xiàn)變化,回聲消除算法要能判斷出來,因為自適應濾波器學習要重新開始,也就是W(n)需要一個新的收斂過程,以逼近新的回音路徑函數(shù)F。

      基本上來說,上面這兩點是兩難的,一個需要自適應濾波器收斂后保持系數(shù)穩(wěn)定,以保證不受speech說話干擾,另一個需要自適應濾波器隨時保持更新狀態(tài),以保證能夠追蹤變化的回音路徑。這樣一來,僅從數(shù)學算法層面,回聲消除已經(jīng)是難上加難!簡單地說,回聲消除自適應濾波器的設計具有兩個互相矛盾的特性,也就是快速收斂和高度的穩(wěn)定性,如何同時實現(xiàn)這兩項特性,正是設計上的主要挑戰(zhàn)。

      經(jīng)過上面的分析,相信大家對回聲消除的原理和技術有了深刻的理解,這是一門即容易理解又難以實現(xiàn)的技術。

      從應用平臺來看,根據(jù)筆者多年的經(jīng)驗,可以把回聲消除分為兩大類:基于DSP等實時平臺的回聲消除技術和基于Windows等非實時平臺的回聲消除技術。兩者的技術難度和重點是不一樣的。

       

      三、基于DSP平臺的回聲消除技術

      回聲消除技術傳統(tǒng)的應用領域是各種嵌入式設備,包括各種電信網(wǎng)絡設備和終端設備。網(wǎng)絡設備比如交換機,網(wǎng)關等等,終端則包括移動電話終端,視頻會議終端等。現(xiàn)代通訊產(chǎn)品里面大量應用了回聲消除技術,包括在我們看得到的終端產(chǎn)品(比如手機)和看不到的局端產(chǎn)品(比如交換機)。這種嵌入式設備的共同點就是采用各種型號的DSP芯片作為回聲消除的載體。一個有效的回聲消除算法需要持續(xù)的在一顆DSP芯片上面運行,會遇到以下方面的難點:

      實時性與高效性,因為DSP芯片資源有限。雖然自從二十世紀七十年代DSP應用以來,日新月異的硬件芯片技術使許多沉睡在教科書上的信號處理理論算法大規(guī)模應用,但是回聲消除算法需要的資源還是大得驚人。以視頻會議系統(tǒng),大規(guī)模的會議室可以產(chǎn)生超過512ms的回音,要消除這么長延時的回音,即使按照8k赫茲采樣率計算,自適應濾波器W(n)的長度都會達到4096個點,這樣一方面需要非常大的存儲空間來存儲W(n),另一方面,W(n)的更新需要的計算量也是成倍增長,同時,W(n)的收斂難度也在加大,傳統(tǒng)自適應濾波器的效率很難保證。對于電信設備中的應用,雖然回聲消除不需要這么長的延時,但是在交換機等設備中,成本和效率就是生命,所有的處理算法都是按路或按線計算的,對算法的優(yōu)化效率提出了無止境的要求。相對而言,只有像車載免提這種應用對效率要求不那么高,因為車內(nèi)空間小,回音延時有限,又不要求多路應用。

      傳統(tǒng)的回聲消除技術是從國外二十世紀七十年代的早期算法發(fā)展而來,這類技術的采用一直相當昂貴,提供電信級回聲消除硬件應用(包括芯片或者設備)的廠家都是國外的。對于移動網(wǎng)絡用戶來說,語音品質(zhì)一直是他們最關切的議題,對電信業(yè)者來說,語音也仍是他們最能獲利的服務項目,因此語音的品質(zhì)是不容妥協(xié)的。為了滿足今日與未來的網(wǎng)路需求,回聲消除技術的挑戰(zhàn)正在于如何有效地降低成本并持續(xù)改善語音品質(zhì)。

      算法級的DSP軟件解決方案,也是解決嵌入式設備回音問題的一種途徑,對用戶也有一定的靈活性,用戶只需要把回聲消除模塊集成到自己的DSP軟件中,再簡單調(diào)整幾個相關參數(shù),就能達到較好的回聲消除效果。

      目前基于DSP的回聲消除算法已經(jīng)比較成熟,市場上也有一批專門的算法/芯片公司的能夠?qū)ν馓峁┮呀?jīng)優(yōu)化好的基于DSP的軟件回聲消除模塊:如俄羅斯Spririt DSP、加拿大Octastic Semiconductor、瑞典GIPS、國內(nèi)科萊特斯科技Conatus Technologies以及美國Adaptive Digital、和GAO Research、英國CSR等等,另外還有美國Fortemedia、Acoustic Technologies和日本OKI等可以提供專用的回聲消除DSP芯片。其中性能較好的有Octastic、Conatus、和Spririt這三家,Octastic可以提供完整的從專用芯片、板卡到DSP算法的完整方案,而Conatus和Spririt的回聲消除效果更好,值得一提的是Conatus公司是目前市面上唯一提供針對專業(yè)視訊會議應用寬帶回聲消除模塊的公司,其音頻采樣率可以達到48k赫茲。

       

      四、基于Windows平臺的回聲消除技術

      回聲消除技術最新的應用領域是基于Windows平臺的各種VoIP應用,比如軟件視頻會議,VoIP軟件電話等。當回聲消除算法應用到Windows平臺,相對于傳統(tǒng)的DSP平臺,既帶來優(yōu)勢,也帶來了新的難點。高效性在Windows平臺已經(jīng)不是問題,現(xiàn)在的pc機,擁有豐富的cpu資源和海量的內(nèi)存資源,再復雜的回聲消除算法都可以運行自如。但是,新增加的麻煩比帶來的好處要多。

      首先,Windows平臺是一個非實時的平臺,音頻的采集和播放對回聲消除算法而言,也是非實時的。和DSP平臺不一樣,DSP平臺可以直接控制AD/DA芯片的采集播放,獲得實時的音頻流(不存在同步問題),但是Windows平臺下,應用程序很難在底層直接控制聲卡的采集播放,獲得的是非實時的音頻流,從而帶來了采集和播放音頻流的同步問題。

      實際應用時,傳給回聲消除算法的兩個聲音信號(采集的回音信號ne和播放的參考信號fe),必須同步得非常的好。就是說,本地接收到遠端說的話以后,要把這些話音數(shù)據(jù)傳給回聲消除算法做參考,這是一個算法需要的輸入信號;然后再傳給聲卡,聲卡放出來后經(jīng)過回音路徑,這時,本地再采集,然后傳給回聲消除算法,這是算法需要的另一個輸入信號。這里的同步是指:兩個信號雖然存在延時,但這個延時必須固定,在時序上要保持連貫,不能一個信號多來幾個幀,另外一個信號少來幾個幀。如果傳給回聲消除算法的兩個信號同步得不好,即兩個信號發(fā)生幀錯位,就沒有辦法進行消除了。因為這時系統(tǒng)會變成了非因果系統(tǒng),比如期望信號收到了,參考信號還沒來,時間上都沒有因果關系,肯定是沒有辦法消除的。

      實際情況是,在一般的VoIP軟件中,接收對方的聲音并傳到聲卡中播放是在一個線程中進行的,而采集本地的聲音并傳送到對方又是在另一個線程中進行的,而聲學回聲消除算法在對采集到的聲音進行回聲消除的同時,還需要播放線程中的數(shù)據(jù)作為參考,而要同步這兩個線程中的數(shù)據(jù)是非常重要的,因為稍稍有些不同步,聲學回聲消除算法中的自適應濾波器就會發(fā)散,不但消除不了回音,還會破壞原始采集到的聲音,使聲音難以分辨。

      另外,pc機器的聲卡種類繁多,各種各樣的聲卡特性進一步加劇了同步問題的復雜性。所以,同步和聲卡等問題對回聲消除算法的內(nèi)部特性提出了更多苛刻的要求。

      從上面分析來看,由于Windows平臺的非實時性,基于Windows平臺的回聲消除技術比DSP平臺要難得多。

      在PC平臺語音通訊領域,目前公認音質(zhì)做得比較好的國外軟件是Skype,記得幾年前Skype一直是在用瑞典一家叫GIPS(Global IP Sound)公司的語音引擎技術。GIPS是最早介入PC平臺語音通訊領域的廠商之一,在改領域具有一定的權威性,其主要優(yōu)勢表現(xiàn)在對IP網(wǎng)絡的延時、抖動和丟包等處理較好,基于Windows平臺的回音消除也做得不錯,不過最近的新版本Skype上已經(jīng)看不到GIPS的標志了,據(jù)說是因為Skype自己研發(fā)了一套新的更好的語音引擎的緣故。 目前大家接觸最多的采用了GIPS語音引擎技術的通訊軟件就是騰訊QQ了,其超級語音的效果普遍評價都還不錯。另外微軟經(jīng)過多年的研發(fā),其最新版本的MSN語音特別是回音消除效果終于有了質(zhì)的提升,目前網(wǎng)上評價也還不錯。另外還有一些專業(yè)廠商也對外提供包含回音消除功能的語音引擎,如俄羅斯的Spirit DSP、美國的GH Innovation和國內(nèi)的科萊特斯科技(Conatus Technologies)以及賽聲科技(Soft  Acoustic)等等。除此之外,網(wǎng)絡上還可以下載到一個很好的開源的語音軟件Speex也提供了回音消除功能。為了進一步了解目前PC Windows平臺回音消除技術的業(yè)界水平,筆者對各家的回音消除技術做一個詳細的橫向?qū)Ρ葴y試(所有測試都是免提狀態(tài))

      為了對比,各家語音引擎的版本信息列舉如下:

       

      國外廠商:

      Skype V3.8.4.182

      Spirit DSP(廠家DEMO)

      GIPS(QQ 2009beta)

      Micorsoft (Windows Live Messenger 2009  V14.0.8064.2006)

      GH Innovation(廠家DEMO)

       

      國內(nèi)廠商:

      Conatus Technologies(廠家DEMO)

      Soft Acoustic(廠家DEMO)

      開源算法:

      Speex(V1.2RC1 自己寫了測試軟件)

       

      測試結果:

      測試項目

      Skype

      MSN

      QQ

      Conatus

      Spirit

      Speex

      SoftAcoustic

      GH I

      筆記本免提模式,外接麥克風和音箱應用模式的適應性

      兩種模式都無回音

      筆記本免提模式有時一直有較小回音

      筆記本免提模式偶爾有較小回音

      兩種模式都無回音

      筆記本免提模式有時一直有較小回音

      兩種模式都有一直較小回音

      兩種模式有時都會出現(xiàn)較大回音

      筆記本免提模式一直有很小回音

      單方講話效果

      無回音,效果很好

      基本無回音,效果好

      基本無回音,效果好

      無回音,效果很好

      基本無回音,效果好

      一直有較小回音,效果差

      有時有很大回音,效果差

      基本無回音,效果好

      雙方同時講話效果

      雙方交流流暢無回音,對方聲音偶爾有輕微斷續(xù)

      雙方交流流暢,但對方聲音中會夾雜著輕微回音

      雙方交流流暢,但對方聲音中會夾雜著一些回音

      雙方交流流暢無回音,對方聲音偶爾有輕微斷續(xù)

      雙方交流流暢,但對方聲音中間會夾雜著一些回音

      雙方交流比較流暢,但一直聽到一個較小的回音

      雙方交流不流暢,對方聲音經(jīng)常會斷續(xù)

      雙方交流無回音,但對方聲音很小很難聽清楚

      麥克風和揚聲器相對的位置改變等

      收斂比較快,基本沒有回音出現(xiàn)。

      收斂比較快,基本沒有回音出現(xiàn)。

      收斂比較快,基本沒有回音出現(xiàn)。

      收斂比較快,基本沒有回音出現(xiàn)。

      收斂比較快,基本沒有回音出現(xiàn)。

      收斂速度慢,有好幾句回音

      收斂速度慢,有好幾句回音

      收斂比較快,基本沒有回音出現(xiàn)。

      CPU重載(CPU負載達到100%)時效果

      XP和Vista下聲音都流暢,基本不會出現(xiàn)回音和聲音斷續(xù)現(xiàn)象

      XP和Vista下聲音都流暢,基本不會出現(xiàn)回音和聲音斷續(xù)現(xiàn)象

      XP下聲音流暢,基本不會出現(xiàn)回音;Vista下聲音斷續(xù),偶爾會出現(xiàn)回音

      XP和Vista下聲音都流暢,基本不會出現(xiàn)回音和聲音斷續(xù)現(xiàn)象

      XP下聲音流暢,基本不會出現(xiàn)回音;Vista下聲音斷續(xù),偶爾會出現(xiàn)回音

      此項未測

      XP下聲音流暢,基本不會出現(xiàn)回音;Vista下聲音斷續(xù),偶爾會出現(xiàn)回音

      XP下聲音流暢,基本不會出現(xiàn)回音;Vista下不加負載聲音都是斷續(xù)的

      PC和聲卡適應性

      穩(wěn)定,基本都能消除回音

      穩(wěn)定,基本都能消除回音

      比較穩(wěn)定,偶爾有些筆記本免提時有回音

      穩(wěn)定,基本都能消除回音

      穩(wěn)定,基本都能消除回音

      不穩(wěn)定,有時無法消除回音

      不穩(wěn)定,經(jīng)常無法消除回音

      穩(wěn)定,基本都能消除回音

      噪聲抑制

      噪聲抑制效果弱

      噪聲抑制效果一般

      噪聲抑制效果弱

      噪聲抑制效果強

      噪聲抑制效果一般

      噪聲抑制效果強

      噪聲抑制效果強

      噪聲抑制效果強

      自動硬件增益控制和免提時能達到的最大播放音量

      支持,音量較大

      支持,音量較小

      支持,音量適中

      支持,音量適中

      支持,音量較小

      不支持

      支持,音量較小

      支持,音量非常小

      整體效果評價(0-10分評分)

      很好,基本沒有回音,雙方交流很順暢,9分

      較好,有的筆記本免提時偶爾有回音且音量較小,雙方交流比較順暢,7.5分

      較好,有的筆記本免提時偶爾有回音,雙方交流順暢,8分

      很好,基本沒有回音,音量比skype略小,雙方交流很順暢,8.5分

      較好,有的筆記本免提效果稍差且音量比較小,vista效果稍差,7分

      不好,一直有個較小的殘余回音,雙方交流困難,3分

      不好,經(jīng)常有完整的回音,感覺不穩(wěn)定,雙方交流比較困難,5分

      一般,沒有回音,但是音量太小,雙方交流困難,且VISTA下聲音斷續(xù),5.5分

      測試項目

      Skype

      MSN

      QQ

      Conatus

      Spirit

      Speex

      SoftAcoustic

      GH I

       

      可以看出,Skype、Conatus和QQ(GIPS)的效果最好,MSN和Spirit的效果還不錯,而GH Innovation、Soft Acoustic效果一般,Speex的效果較差。

      1. 微軟聲學回聲消除demo AECMicArray的使用(轉(zhuǎn)載)

      原文地址:https://blog.csdn.net/yjjat1989/article/details/20372589

      代碼下載:https://github.com/pauldotknopf/WindowsSDK7-Samples/tree/master/multimedia/audio/aecmicarray

       

      AECMicArray基于Core Audio APIs,用MMDevice、WASAPI、DeviceTopology和EndpointVolume APIs來捕獲高質(zhì)量聲音流。這個例子支持聲學回聲消除(AEC)和麥克風陣列處理。關于麥克風陣列處理,主要是波束形成和聲源定位,具體的在以后總結。

      1、說明

      AECMicArray有如下特征:用MMDevice來枚舉和選擇多媒體設備;用WASAPI來管理音頻流操作如開始和結束音頻流;用DeviceTopology來枚舉音頻適配器;用EndpointVolume來控制聲音級別。

      2、要求

      AECMicArray要求Windows SDK(Windows Vista及以后版本)和Visual Studio(2005版本以后)。

      3、源碼下載

      AECMicArray代碼位于\Program Files\Microsoft SDKs\Windows\v7.0\Samples\multimedia\audio\aecmicrray目錄下,源代碼包括4個文件,分別是mediabuf.h、AecKsBinder.h、AecKsBinder.cpp、AecSDKDemo.cpp。

      4、構建項目

      msdn上說明可以分以下四步:

      1)打開SDK命令行窗口,即開始——>所有程序——>Microsoft Windows SDK 7.0——>CMD Shell,如下圖:

       

      提示中說VC++編譯器當前使用的是Windows SDK v6.0A,所以輸入WindowsSdkVer.exe -version:v7.0來使用Windows SDK v7.0,輸入后會有如下結果:

       

      2)輸入cd %MSSDK%\Setup,如下圖

       

      3)運行VCIntegrate.exe。以上3步設置了使用SDK的環(huán)境。我的電腦中就沒有VCIntegrate.exe,可能被破壞,需要修復,比較麻煩。

      4)構建示例,成功后會生成AecSDKDemo.exe。

      上面是msdn中說的步驟,也可以在VS2010中新建一個工程,然后將4個源文件加進去,然后編譯運行生成AecSDKDemo.exe,具體注意事項及代碼說明可參見aecmicarray目錄里AecSDKDemo.cpp中的說明及readme.rtf文件。

      5、執(zhí)行示例

      成功生成AecSDKDemo.exe文件后在命令行窗口中輸入一下指令:

      AecSDKDemo -out mic_out.pcm -mod system_mod [-option value]

      其中-out和-mod是必選項,-out指定存儲處理后的數(shù)據(jù)的pcm格式文件,-mod指定模式,目前demo支持4種模式,及僅AEC(0)、僅MicArray(2)、AEC+MicArray(4)和既沒有AEC也沒有MicArray(5)。-option是可選參數(shù),具體參見readme.rtf。

      6、測試結果

      因為僅測試AEC,所以選擇模式0,并開啟噪聲抑制和自動增益控制,同時設置運行時間為40s,即輸入AecSDKDemo -out micout.pcm -mod 0 -ns 1 -agc 1 -duration 40,如果僅有一個錄音設備和一個播放設備,程序會默認使用這些設備,否則會提示你進行選擇。因為只能產(chǎn)生回聲消除處理后的數(shù)據(jù),所以我們在運行程序的同時,開啟錄音機,得到麥克風采集到的混合音頻,與程序輸出對比,如下圖:

       

      NearEnd.wav

      out.pcm

      從上圖及主觀聽覺的結果來看,微軟的回聲消除效果很好,幾乎聽不見系統(tǒng)播放出來的聲音。

      1. 技術指標

      1.回聲抑制算法處理時延估計:

      實際時延(拍掌記錄掌聲信號和其回聲信號,求平均值)與算法補償時延(估計時延)之差小于80ms。

      2.回聲抑制比ERLE:

      近端信號能量除以誤差信號能量取對數(shù)乘以10。

      1. 聲學回音消除器效果對比

      名稱

      收斂時間

      回音延遲不穩(wěn)定

      殘余回音

      遠近端同時說話

      同一房間對講

      運算量

      Speex聲學回音消除器

      有語音活動1~3秒

      0~3秒自適應調(diào)節(jié)

      回音延遲穩(wěn)定時沒有

      回音延遲不穩(wěn)定時有很大

      近端語音被消除20%

      會產(chǎn)生一定回音

      一般

      WebRtc定點版聲學回音消除器

      0秒

      延遲400ms以內(nèi)0秒自適應調(diào)節(jié)

      延后超過400ms將無法消除

      回音延遲穩(wěn)定時沒有

      回音延遲不穩(wěn)定時偶爾有一絲絲,偶爾有很大

      近端語音被完全消除

      會產(chǎn)生較大回音

      一般

      WebRtc浮點版聲學回音消除器

      有語音活動1秒

      0秒自適應調(diào)節(jié)

      回音延遲穩(wěn)定時沒有

      回音延遲不穩(wěn)定時偶爾有一絲絲

      近端語音被消除50%

      會產(chǎn)生較小回音

      較大

      Speex聲學回音消除器

      +WebRtc定點版聲學回音消除器

      0秒

      0~3秒自適應調(diào)節(jié)

      回音延遲穩(wěn)定時沒有

      回音延遲不穩(wěn)定時有很大

      近端語音被消除20%

      會產(chǎn)生一定回音

      一般

      WebRtc定點版聲學回音消除器

      +WebRtc浮點版聲學回音消除器

      0秒

      0秒自適應調(diào)節(jié)

      回音延遲穩(wěn)定時沒有

      回音延遲不穩(wěn)定時偶爾有一絲絲

      近端語音被消除50%

      會產(chǎn)生較小回音

      較大

      Speex聲學回音消除器

      +WebRtc定點版聲學回音消除器

      +WebRtc浮點版聲學回音消除器

      0秒

      0秒自適應調(diào)節(jié)

      回音延遲穩(wěn)定時沒有

      回音延遲不穩(wěn)定時極低概率會有一絲絲

      近端語音被消除50%

      會產(chǎn)生很小回音

      很大

      特別注意:以上是在不使用系統(tǒng)自帶的聲學回音消除器的效果,且不同設備或不同環(huán)境或不同時間效果都會不同,所以需要自己親自測試。

      1. 殘余回音消除、Residual Echo Cancellation、REC

      有些聲學回音消除算法在做完聲學回音消除后,還會殘余一部分聲學回音沒有徹底消除干凈,這時候就需要再使用殘余回音消除算法過濾掉。

      1. 聲學回音消除挑戰(zhàn)賽

      https://github.com/microsoft/AEC-Challenge/tree/main/datasets

      1. 線路回音消除、電路回音消除、Line Echo Cancellation、LEC

      線路回音是由于物理電子線路的二四線匹配耦合引起的。

       

      由于2-4線轉(zhuǎn)換引入的線路回音:

       

      在ADSL Modem和交換機上都存在2-4線轉(zhuǎn)換的電路,由于電路存在不匹配的問題,會有一部分的信號被反饋回來,形成了回音。如果在交換機側(cè)不加回音抵消功能,打電話的人就會自己聽到自己的聲音。

       

      電路回聲通常產(chǎn)生于有線通話中,而造成電路回聲的根本原因是轉(zhuǎn)換混合器的二線-四線阻抗不能完全匹配。中心局至轉(zhuǎn)換混合器之間采用四線的連接方式傳輸信號,上面兩條線路用于發(fā)送給用戶端信號,下面兩條線路用于接收用戶端信號。通信公司為了降低遠距離信號傳輸成本,將混合器至用戶端的連接線減少為二線連接,分別用于用戶端信號的接受與發(fā)送。中間的轉(zhuǎn)換混合電路功能是將四線連接轉(zhuǎn)換為二線連接,由于在轉(zhuǎn)換過程中使用了不同型號的電線或者負載線圈沒有被使用的原因,不可避免地會產(chǎn)生阻抗不匹配現(xiàn)象,導致混合器接收線路上的語音信號流失到了發(fā)送線路,產(chǎn)生了回聲信號,使得另一端的用戶在接收信號的同時聽到了自己的聲音。

       

      電路回聲產(chǎn)生原理

      在現(xiàn)如今的數(shù)字通信網(wǎng)絡中,轉(zhuǎn)換混合器與數(shù)模轉(zhuǎn)換器融為一體,但無論是模擬電子線路還是數(shù)字電子線路,二-四線的轉(zhuǎn)換都會造成阻抗不匹配問題,從而導致其產(chǎn)生電路回聲,影響現(xiàn)代通信質(zhì)量。由于電路回聲的線性以及穩(wěn)定性,用一個簡單的線性疊加器就可以實現(xiàn)電路回聲消除。首先將產(chǎn)生的回聲信號在數(shù)值上取反,線性地疊加在回聲信號上,將產(chǎn)生的回聲信號抵消,實現(xiàn)電路回聲的初步消除。然而由于技術缺陷,線性疊加器不能完整地將回聲信號抹去,因此需要添加一個非線性處理器,其實質(zhì)是一個阻擋信號的開關,將殘余的回聲信號經(jīng)過非線性處理之后,就可以實現(xiàn)電路回聲的消除,或者得到噪聲很小的靜音信號。由于電路回聲信號是線性且穩(wěn)定的,所以比較容易將其消除,而本文主要研究的是如何消除非線性的聲學回聲。

       

      電路回聲消除的基本原理

      1. 自動噪音抑制、Automatic Noise Suppression、ANS、噪音抑制、Noise Suppression、NS、噪音降低、降噪、Noise Reduction、NR、噪音消除、去除噪音、Denoise

        1. 簡介

      噪音分為環(huán)境背景噪音和信道干擾噪音。

      噪聲抑制就是根據(jù)音頻數(shù)據(jù)的特點,將屬于環(huán)境背景噪音和信道干擾噪音的部分識別出來,并從音頻數(shù)據(jù)中過濾掉,盡可能的讓音頻數(shù)據(jù)中只保留語音。

      噪音抑制算法一般有兩種,一種叫單麥克風噪音抑制,簡稱單麥降噪,另一種叫雙麥克風噪音抑制,簡稱雙麥降噪。

      單麥克風噪音抑制算法的原理就是:將單個麥克風采樣到的信號進行分析,根據(jù)一些預定義的噪音特征,對信號的內(nèi)容進行匹配,然后將匹配成功的內(nèi)容過濾掉。

      雙麥克風噪音抑制算法的原理就是:一個麥克風為普通的用戶通話時使用的麥克風,用于采樣語音信號,而另一個配置在機身頂端的麥克風,用于采樣環(huán)境背景噪音信號,然后根據(jù)采樣到的環(huán)境背景噪音信號,將語音信號中采樣到的環(huán)境背景噪音過濾掉。這種算法一般只能在聽筒模式下使用,不能在免提模式下使用,因為免提模式下兩個麥克風采樣到的信號都包含語音。

      支持噪音抑制的開源庫有Speex、WebRTC、RNNoise。

      包含噪音的語料庫有NOIZEUS、NoiseX-92、TIMIT。

       

      噪音抑制效果演示:

      噪音抑制前:

      噪音抑制后:

      1. 基本譜減法和改進譜減法

      https://blog.csdn.net/Lebronze/article/details/53541123

      https://wenku.baidu.com/view/9663e5da5022aaea998f0fdc

      http://www.rzrgm.cn/riddick/p/6848673.html

      https://blog.csdn.net/leixiaohua1020/article/details/47276353

      http://www.woc88.com/mv-11812218.html

      《Suppression of acousic noise in speech using spectral subtraction》

      《Enhancement of speech corrupted by a acoustic noise》

      1. 最優(yōu)修正對數(shù)譜幅度估計算法、OM-LSA

       

      1. 拾音束形成、BF

       

      1. 按鍵音抑制、KS

      抑制鍵盤輸入時產(chǎn)生的敲擊噪音。

      1. 主動噪音控制、Active Noise Control、ANC、主動噪音降低、Active Noise Reduction、ANR、主動降噪

      主動噪音控制就是通過噪音控制系統(tǒng)產(chǎn)生與外界噪音相等的反向聲波,將噪音中和,從而實現(xiàn)降噪的效果。

      它的原理是:所有的聲音都由一定的頻譜組成,如果可以找到一種聲音,其頻譜與所要消除的噪聲完全一樣,只是相位剛好相反(相差180°),就可以將這噪聲完全抵消掉。關鍵就在于如何得到那抵消噪聲的聲音。實際采用的辦法是:從噪聲源本身著手,設法通過電子線路將原噪聲的相位倒過來。由此看來,有源消聲這一技術實際上是"以毒攻毒"。

      主動噪音控制主要針對有持續(xù)性噪音的環(huán)境,比如:飛機、火車、地鐵、公交、汽車、車間等。

      主動噪音控制原理示意圖:

      1. 被動噪音控制、Passive Noise Control、PNC、被動噪音降低、Passive Noise Reduction、PNR、被動降噪

      被動噪音控制是通過絕緣材料、吸聲磚或消音器等隔音材料來被動降低噪音。

      1. 混響音消除、交混回響音消除、去除混響音、Dereverberation、De-Reverberation、DR

      混響音,也叫交混回響音,其產(chǎn)生過程為:當語音信號在封閉的房間內(nèi)傳播時,由于房間墻壁、室內(nèi)物體的反射、吸收,語音信號會通過多種路徑傳達到麥克風,這些語音信號按時間先后順序可分為三部分:直達音、早期反射音(只經(jīng)過一兩次的反射,能量較大、時延較短的反射音)、混響音(經(jīng)過多次反射以后到達的數(shù)目眾多、能量較小、時延較長的反射音群)。

      早期反射音是指未達到穩(wěn)定狀態(tài)時的反射音,也就是在直達音之后混響音開始衰減之前的這段時間差內(nèi)的反射音。直達音以后50ms以內(nèi)到達的早期反射音有加強直達音和提高清晰度的作用,可以被接受作為直達音的一部分。

      混響音是指早期反射音之后到達的反射音群。它會引起語音幅值的變化、相位的延時、共振峰的偏移以及產(chǎn)生其它的譜峰、拖尾,還會造成語言音節(jié)的相互掩蔽,從而降低了語音清晰度和可懂度。

      一般在空曠封閉的房間內(nèi)使用免提打電話時,如果麥克風與聲源之間的距離較遠,混響音就會比較強,此時就需要做混響音消除,如果不在這種情況下打電話時就不需要做混響音消除了。

      1. 語音活動檢測、Voice Activity Detection、VAD

      在語音對話中,要是當一方?jīng)]有說話時,就不會產(chǎn)生流量就好了。語音活動檢測就是用于這個目的的。語音活動檢測通常也集成在編碼模塊中。語音活動檢測算法結合前面的噪音抑制算法,可以識別出當前是否有語音活動,如果沒有語音活動,就可以編碼輸出一個特殊的的編碼幀(比如長度為0)。

      特別是在多人視頻會議中,通常只有一個人在發(fā)言,這種情況下,利用語音活動檢測技術而節(jié)省帶寬還是非常可觀的。

      1. 不連續(xù)傳輸、Discontinuous transmission、DTX

      不連續(xù)傳輸是指,在網(wǎng)絡傳輸編碼后的音頻幀時,如果編碼器發(fā)現(xiàn)某一些音頻幀沒有任何信息,編碼器就會返回一個特殊值來告訴程序,程序就通過這個特殊值來判斷可以不發(fā)送哪些編碼后的音頻幀,然后接收方就會誤以為這些數(shù)據(jù)包都丟失了,那么接收方就會使用數(shù)據(jù)包丟失隱藏算法來猜測這些音頻幀,由于發(fā)送方確定這些音頻幀沒有任何信息,所以猜測出來的音頻幀也就會沒有任何信息,這樣就節(jié)省了網(wǎng)絡流量。

      1. 自動增益控制、Automatic Gain Control、AGC

      自動增益控制是指,當較弱信號輸入時,可以將其放大到指定幅度,當較強信號輸入時,可以將其降低到到指定幅度。

      由于不同設備的麥克風靈敏度不一樣,導致采樣到的信號幅度就會有偏大或者偏小的情況,最終播放時就會有些人聲音大、有些人聲音小,這種情況下通過使用自動增益控制算法,將所有人的音頻信號都控制在同一級別的幅度上,這樣播放時的聲音都是一樣大了。

      1. 自適應抖動緩沖區(qū)、Adaptive Jitter Buffer、AJB

      由于網(wǎng)絡環(huán)境可能不穩(wěn)定,造成網(wǎng)絡延遲一會大一會小,俗稱網(wǎng)絡抖動。在網(wǎng)絡抖動情況下,通過網(wǎng)絡傳輸音頻幀時,即使發(fā)送方是定時發(fā)送音頻幀的(比如每20ms發(fā)送一個包),接收方也無法定時收到,可能一段時間內(nèi)一個包都收不到,也可能一段時間內(nèi)收到好幾個包,最終導致接收方播放時聲音出現(xiàn)一卡一卡的。因此,就需要使用自適應抖動緩沖區(qū)先將接收到的音頻幀緩沖起來,當緩沖到一定數(shù)量后,才從最老的幀一個一個依次開始取出,這樣接收方聽到的聲音就是連續(xù)的了。

      自適應抖動緩沖區(qū)的緩沖深度不是一直不變的,它取決于網(wǎng)絡抖動的程度,當網(wǎng)絡抖動增大時,緩沖深度就會增大,音頻播放的延遲也就越大,當網(wǎng)絡抖動減小時,緩沖深度就會減小,音頻播放的延遲也就越小。所以,自適應抖動緩沖區(qū)就是利用了較高的延遲來換取聲音的流暢播放,因為相比聲音一卡一卡的來說,較高的延遲和流暢的聲音,其主觀感受要更好。

      自適應抖動緩沖區(qū)還可以將亂序到達的數(shù)據(jù)重新排序,然后在取出的時候就是正確的順序了。

      1. 數(shù)據(jù)包丟失隱藏、Packet Loss Concealment、PLC

      數(shù)據(jù)包丟失隱藏是指,在網(wǎng)絡傳輸編碼后的音頻幀時,如果某一個編碼后的音頻幀丟失了,那么接收方可以根據(jù)曾經(jīng)接收到所有音頻幀猜測出已丟失的解碼后的音頻幀。

      例如,某一個Speex格式音頻幀丟失了,那么接收方就可以直接用Speex解碼器猜測出這個已丟失的PCM格式音頻幀。

      1. 前向糾錯、Forward Error Correction、FEC

      前向糾錯是指,在網(wǎng)絡傳輸編碼后的音頻幀時,如果某一個編碼后的音頻幀丟失了,但其后一個編碼后的音頻幀接收到了,那么接收方可以根據(jù)后一個編碼后的音頻幀恢復出其前一個解碼后的音頻幀。

      例如,某一個Opus格式音頻幀丟失了,但其后一個Opus格式音頻幀接收到了,那么接收方就可以用Opus解碼器,根據(jù)后一個Opus格式音頻幀恢復出其前一個PCM格式音頻幀。

      1. 重采樣、Resample

        1. 重采樣簡介

      重采樣是指將已采樣的音頻數(shù)據(jù)進行重新采樣,從而改變它的采樣頻率。

      將采樣頻率低的音頻數(shù)據(jù)重采樣到采樣頻率高的音頻數(shù)據(jù),稱為上采樣升采樣(upsampling)。

      將采樣頻率高的音頻數(shù)據(jù)重采樣到采樣頻率低的音頻數(shù)據(jù),稱為下采樣降采樣(downsampling、subsampling)。

      例如,已有一段8000Hz采樣頻率的音頻數(shù)據(jù),但是聲卡最低支持播放16000Hz采樣頻率的音頻數(shù)據(jù),那么就要用重采樣算法將這段音頻數(shù)據(jù)重采樣成16000Hz。

      重采樣其實內(nèi)部使用的就是插值算法,采用不同的插值算法,新信號的運算速度和質(zhì)量將會不同。

      1. 插值算法簡介

      插值在數(shù)學發(fā)展史上是個古老問題。插值是和拉格朗日(Lagrange)、牛頓(Newton)、高斯(Gauss)等著名數(shù)學家的名字連在一起的。在科學研究和日常生活中,常常會遇到計算函數(shù)值等一類問題。插值法有很豐富的歷史淵源,它最初來源人們對天體研究——有若干觀測點(我們稱為節(jié)點)計算任意時刻星球的位置(插值點和插值)。現(xiàn)在,人們在諸如機械加工等工程技術和數(shù)據(jù)處理等科研都有很好的應用,最常見的應用就是氣象預報。插值理論和方法能解決在實際中當許多函數(shù)表達式未知或形式復雜,如何去構造近似表達式及求得在其他節(jié)點處的值的問題。

       

      插值問題描述:

      設已知某函數(shù)在區(qū)間上連續(xù),且已知在該區(qū)間的個互異離散點上的函數(shù)值為:

             

      … 

         
             

      … 

         

       

      根據(jù)這些已知點來構造函數(shù)的一種簡單近似函數(shù),使其滿足:

       

      從而我們可以使用函數(shù)來計算函數(shù)的其他未知節(jié)點上的函數(shù)值,或計算函數(shù)的一階、二階導數(shù)值。

      這里,函數(shù)的構造算法稱為插值算法(Interpolation Algorithm),稱為的一個插值函數(shù)(Interpolation Function),稱為被插值函數(shù)(Interpolated Function),已知的這些互異離散點稱為插值節(jié)點(Interpolation Node),區(qū)間稱為插值區(qū)間,在區(qū)間內(nèi)計算未知節(jié)點上的函數(shù)值稱為內(nèi)插值,在區(qū)間外計算未知節(jié)點上的函數(shù)值稱為外插值

      我們構造出來的插值函數(shù)是近似被插值函數(shù),所以除了在插值節(jié)點處沒有誤差外,在其他點上一般是有誤差的,若記,則就是用近似的截斷誤差,我們稱截斷誤差為的插值余項

      插值算法共分為逼近插值算法擬合插值算法兩種,逼近插值算法要求插值函數(shù)逼近所有的插值節(jié)點就行,不要求插值函數(shù)經(jīng)過所有的插值節(jié)點,而擬合插值算法就要求插值函數(shù)必須經(jīng)過所有的插值節(jié)點,所以逼近插值算法適合要求不高的情況,擬合插值算法適合要求較高的情況。

      從幾何上看,擬合插值算法就是求曲線, 使其通過給定的個互異離散點, 并使它近似曲線,如圖:

       

      若是次數(shù)不超過的代數(shù)多項式, 即:,則稱為插值多項式。若為分段的多項式, 就稱為插值分段多項式。若為三角多項式, 就稱為插值三角多項式。通過構造多項式來插值的算法統(tǒng)稱為多項式插值算法

       

      多項式插值的存在性和唯一性:

      定理:若插值節(jié)點是個互異離散點,則滿足插值條件的次插值多項式存在而且唯一。

      證明

      1. 各種插值算法的特點比較

      線性插值算法

      公式復雜度:十分簡單。

      插值節(jié)點順序:亂序。

      插值節(jié)點上下左右移動:未知節(jié)點也跟著一樣的移動。

      插值節(jié)點上下左右伸縮:

      增加插值節(jié)點:需要重新計算新增插值節(jié)點附近的插值函數(shù),再通過新的插值函數(shù)重新計算未知節(jié)點。

      刪除插值節(jié)點:需要重新計算被刪插值節(jié)點附近的插值函數(shù),再通過新的插值函數(shù)重新計算未知節(jié)點。

      未知節(jié)點光滑性:不光滑。

      未知節(jié)點穩(wěn)定性:穩(wěn)定。

       

      拋物線插值算法

      公式復雜度:十分簡單。

      插值節(jié)點順序:亂序。

      插值節(jié)點上下左右移動:未知節(jié)點也跟著一樣的移動。

      插值節(jié)點上下左右伸縮:

      增加插值節(jié)點:需要重新計算新增插值節(jié)點附近的插值函數(shù),再通過新的插值函數(shù)重新計算未知節(jié)點。

      刪除插值節(jié)點:需要重新計算被刪插值節(jié)點附近的插值函數(shù),再通過新的插值函數(shù)重新計算未知節(jié)點。

      未知節(jié)點光滑性:比線性插值算法略光滑,但總體還是不光滑。

      未知節(jié)點穩(wěn)定性:穩(wěn)定。

       

      拉格朗日插值算法

      公式復雜度:比較簡單、比較方便。

      插值節(jié)點順序:亂序。

      插值節(jié)點上下左右移動:未知節(jié)點也跟著一樣的移動。

      插值節(jié)點上下左右伸縮:

      增加插值節(jié)點:所有的基本插值多項式都要重新計算,所有的未知節(jié)點也都要重新計算。

      刪除插值節(jié)點:所有的基本插值多項式都要重新計算,所有的未知節(jié)點也都要重新計算。

      未知節(jié)點光滑性:總體都是光滑的。

      未知節(jié)點穩(wěn)定性:不穩(wěn)定,當插值節(jié)點較多時,拉格朗日插值多項式的次數(shù)可能會很高,因此插值結果的數(shù)值會不穩(wěn)定,也就是說盡管在插值節(jié)點處能得到給定的數(shù)值,但在未知節(jié)點處得到的函數(shù)值與期望值之間會有很大的偏差,這類現(xiàn)象被稱為龍格現(xiàn)象,這時可以考慮把插值節(jié)點分段用較低次數(shù)的拉格朗日插值多項式,或者使用切比雪夫插值節(jié)點。

       

      重心拉格朗日插值算法

      公式復雜度:比較簡單、比較方便。

      插值節(jié)點順序:亂序。

      插值節(jié)點上下左右移動:未知節(jié)點也跟著一樣的移動。

      插值節(jié)點上下左右伸縮:

      增加插值節(jié)點:需要重新計算重心權,插值函數(shù)不需要全部重新計算,但所有的未知節(jié)點都要重新計算。

      刪除插值節(jié)點:需要重新計算重心權,插值函數(shù)不需要全部重新計算,但所有的未知節(jié)點都要重新計算。

      未知節(jié)點光滑性:總體都是光滑的。

      未知節(jié)點穩(wěn)定性:不穩(wěn)定,插值結果和拉格朗日插值算法是一樣的,所以都會出現(xiàn)龍格現(xiàn)象,這時可以考慮把插值節(jié)點分段用較低次數(shù)的拉格朗日插值多項式,或者使用切比雪夫插值節(jié)點。

       

      牛頓插值算法

      公式復雜度:比較簡單、比較方便。

      插值節(jié)點順序:亂序。

      插值節(jié)點上下左右移動:未知節(jié)點也跟著一樣的移動。

      插值節(jié)點上下左右伸縮:

      增加插值節(jié)點:需要在之前的插值函數(shù)上增加一個子函數(shù),插值函數(shù)不需要全部重新計算,但所有的未知節(jié)點都要重新計算。

      刪除插值節(jié)點:插值函數(shù)需要全部重新計算,所有的未知節(jié)點都要重新計算。

      未知節(jié)點光滑性:總體都是光滑的。

      未知節(jié)點穩(wěn)定性:不穩(wěn)定,插值結果和拉格朗日插值算法是一樣的,所以都會出現(xiàn)龍格現(xiàn)象,可以考慮把插值節(jié)點分段用較低次數(shù)的牛頓插值多項式。

       

      牛頓等距插值算法

      公式復雜度:比較簡單、比較方便。

      插值節(jié)點順序:亂序。

      插值節(jié)點上下左右移動:未知節(jié)點也跟著一樣的移動。

      插值節(jié)點上下左右伸縮:

      增加插值節(jié)點:需要在之前的插值函數(shù)上增加一個子函數(shù),插值函數(shù)不需要全部重新計算,但所有的未知節(jié)點都要重新計算。

      刪除插值節(jié)點:需要把之前的插值函數(shù)全部重新計算,所有的未知節(jié)點都要重新計算。

      未知節(jié)點光滑性:總體都是光滑的。

      未知節(jié)點穩(wěn)定性:不穩(wěn)定,牛頓等距插值算法就是在插值節(jié)點都是等距離的情況下對牛頓插值算法進行了簡化計算,插值結果和牛頓插值算法是一樣的。

       

      連分式插值算法

      公式復雜度:比較簡單、比較方便。

      插值節(jié)點順序:亂序。

      插值節(jié)點上下左右移動:未知節(jié)點也跟著一樣的移動。

      插值節(jié)點上下左右伸縮:

      增加插值節(jié)點:需要在之前的插值函數(shù)上增加一個子函數(shù),插值函數(shù)不需要全部重新計算,但所有的未知節(jié)點都要重新計算。

      刪除插值節(jié)點:需要把之前的插值函數(shù)全部重新計算,所有的未知節(jié)點都要重新計算。

      未知節(jié)點光滑性:在某些情況下是總體都是光滑的,在某些情況下某些點會不連續(xù)。

      未知節(jié)點穩(wěn)定性:在某些情況下是總體都是穩(wěn)定,在某些情況下某些點會趨于正無窮大或負無窮大。

      其他:在某些情況下,如果出現(xiàn)除數(shù)為0,則這些情況下不能使用連分式插值算法。

      1. 最鄰近插值算法、Nearest Neighbor interpolation、零階插值算法

      最鄰近插值算法也叫做零階插值算法,主要原理是未知節(jié)點等于鄰域內(nèi)離它距離最近的插值節(jié)點。

      例如下圖,未知節(jié)點P1距離插值節(jié)點0的距離小于插值節(jié)點100的距離,因此,未知節(jié)點P1插值為0。這個算法的優(yōu)點是計算簡單方便,缺點是插值結果不夠平滑。

      1. 線性插值算法、Linear Interpolation Algorithm、兩點插值算法、直線插值算法、折線插值算法、一次函數(shù)插值算法

      設已知某函數(shù)在給定兩個互異的點、上的函數(shù)值為、,構造一個線性函數(shù),使其近似于函數(shù),且滿足、,那么我們將這樣的線性函數(shù)稱為的線性插值函數(shù),整個這個算法稱為線性插值算法、兩點插值算法、直線插值算法、折線插值算法、一次函數(shù)插值算法

      從幾何上看,線性插值就是經(jīng)過給定兩個互異的點、的一條直線,如圖:

       

      線性插值函數(shù)的構造算法

      第一種

      用線性函數(shù)的一般公式進行求解,將點、代入公式中,得到一個二元一次方程組,然后求解出和,最后得到的一元二次函數(shù)就是經(jīng)過這點、的線性插值函數(shù)了。

       

      第二種

      線性插值函數(shù)可以看成是兩個直線函數(shù)相加而成的,第一個直線函數(shù)要經(jīng)過點和,第二個直線函數(shù)要經(jīng)過點和。

      構造兩個函數(shù)和,使函數(shù)滿足、,使函數(shù)滿足、,則可以使得函數(shù)成立。如圖:

      那么只要構造出函數(shù)和就可以了。

       

      構造函數(shù):

      因為,且式子在時等于0,所以。

      因為,所以,所以。

      所以。

       

      構造函數(shù):

      因為,且式子在時等于0,所以。

      因為,所以,所以。

      所以。

       

      最后得出函數(shù),這個函數(shù)就叫做線性插值函數(shù)線性插值多項式,我們將這里的函數(shù)和稱為線性插值基函數(shù)線性基本插值多項式

       

      第三種

      我們先構造一個函數(shù),要使函數(shù)經(jīng)過點,則,函數(shù)。

      再構造一個函數(shù)。

      要使函數(shù)經(jīng)過點,則要使函數(shù),那么我們設函數(shù),則。

      要使函數(shù)經(jīng)過點,則,則,則。

       

      最后得出函數(shù),這個函數(shù)就叫做線性插值函數(shù)線性插值多項式

       

      如果我們已知有多個互異的點,那么當內(nèi)插值時,我們要求的未知點在哪兩個點之間,就用這兩個點的線性插值函數(shù)去求,當外插值時,我們要求的未知點離哪兩個點最近,就用這兩個點的線性插值函數(shù)去求。如圖:

       

      總結:線性插值算法計算方便、應用很廣,但由于它是用直線去近似曲線,因而一般要求相鄰兩個點的范圍比較小,且在相鄰兩個點上變化比較平穩(wěn),否則線性插值的誤差可能很大。

       

      例題:已知、,用線性插值算法求。

      解:根據(jù)已知條件得到兩點、,代入線性插值函數(shù)得

       

      那么

       

       

      例題:已知兩個點、,用線性插值算法求的函數(shù)值。

      解:根據(jù)已知條件得到兩點、,代入線性插值函數(shù)得

       

      那么

       

      1. 拋物線插值算法、Parabolic Interpolation Algorithm、二次曲線插值算法、二次函數(shù)插值算法

      設已知某函數(shù)在給定三個互異的點、、上的函數(shù)值為、、,構造一個線性函數(shù),使其近似于函數(shù),且滿足、、,那么我們將這樣的拋物線函數(shù)稱為的拋物線插值函數(shù),整個這個算法稱為拋物線插值算法、二次曲線插值算法、二次函數(shù)插值算法

      從幾何上看,拋物線插值就是經(jīng)過給定三個互異的點、、的一條曲線,如圖:

       

      拋物線插值函數(shù)的構造算法

      第一種

      用拋物線函數(shù)的一般公式進行求解,將點、、代入公式中,得到一個三元一次方程組,然后求解出、、,最后得到的一元三次函數(shù)就是經(jīng)過這點、、的拋物線插值函數(shù)了。

       

      第二種

      拋物線插值函數(shù)可以看成是三個拋物線函數(shù)相加而成的,第一個拋物線函數(shù)要經(jīng)過點、、,第二個拋物線函數(shù)要經(jīng)過點、、,第三個拋物線函數(shù)要經(jīng)過點、、。

      構造三個函數(shù)、、,使函數(shù)滿足、、,使函數(shù)滿足、、,使函數(shù)滿足、、,則可以使得函數(shù)成立。如圖:

      那么只要構造出函數(shù)、、就可以了。

       

      構造函數(shù):

      因為、,且式子在或時等于0,所以。

      因為,所以要使,則。

      所以。

       

      構造函數(shù):

      因為、,且式子在或時等于0,所以。

      因為,所以要使,則。

      所以。

       

      構造函數(shù):

      因為、,且式子在或時等于0,所以。

      因為,所以要使,則。

      所以。

       

      最后得出函數(shù),這個函數(shù)就叫做拋物線插值函數(shù)拋物線插值多項式,我們將這里的函數(shù)、、稱為拋物線插值基函數(shù)拋物線基本插值多項式

       

      第三種

      在線性插值函數(shù)的基礎上,我們再構造一個函數(shù)。

      要使函數(shù)經(jīng)過點、,則要使函數(shù)且,那么我們設函數(shù),則。

      要使函數(shù)經(jīng)過點,則,則,則。

       

      最后得出函數(shù),這個函數(shù)就叫做拋物線插值函數(shù)拋物線插值多項式

       

      如果我們已知有多個互異的點,就要每三點分為一組,那么當內(nèi)插值時,我們要求的未知點在哪三個點之間,就用這三個點的拋物線插值函數(shù)去求,當外插值時,我們要求的未知點離哪三個點最近,就用這三個點的拋物線插值函數(shù)去求。如圖:

       

      總結:拋物線插值算法相比線性插值算法的計算量略大,但由于它是用拋物線去近似曲線,所以比線性插值算法略好,但還是要求相鄰三個點的范圍比較小,且在相鄰三個點上變化比較平穩(wěn),否則拋物線插值的誤差可能較大。

       

      例題:已知、、,用拋物線插值算法求。

      解:根據(jù)已知條件得到三點、、,代入拋物線插值函數(shù)得

       

      那么

       

      1. 聯(lián)立方程式

      2. 拉格朗日插值算法、Lagrange Interpolation Algorithm

      我們根據(jù)線性插值算法和拋物線插值算法的插值函數(shù),可以推導出已知個互異離散點的插值函數(shù)。

      根據(jù)已知兩個互異離散點的線性插值函數(shù):

       

      和已知三個互異離散點的拋物線插值函數(shù):

       

      得出,已知四個互異離散點的插值函數(shù)就是可以看成是四個基函數(shù)相加而成的,函數(shù)的公式為:

       

       

      歸納可得,已知個互異離散點的插值函數(shù)就是可以看成是個基函數(shù)相加而成的,函數(shù)的公式為

       

      其中

       

      我們將最后推導出來的函數(shù)稱為拉格朗日插值函數(shù)拉格朗日插值多項式,其中基函數(shù)稱為拉格朗日插值基函數(shù)拉格朗日基本插值多項式,整個這個算法稱為拉格朗日插值算法

      1. 拉格朗日插值誤差估計算法

       

       

       

       

       

       

      插值法的事后誤差估計

      已知,,,試用線性插值求的近似值,并估計插值誤差。

      解:要用線性插值求在點的值,可取,為插值節(jié)點,記線性插值式為。經(jīng)計算易得。

      但是,由于不知道的解析式,故不能直接利用拉格朗日余項式做誤差估計。為此,下面用另外一種方法來估計誤差。

      設以,為節(jié)點的線性插值式為,則有

       

       

      其中,均屬于由、、和所決定的區(qū)間。假設在該區(qū)間內(nèi)變化不大,則將上面兩個式子相除,消去近似相等的和,結果有

       

      整理得

       

      這表明,的插值誤差大致等于,按此估計式,只要再計算出。由此可得的誤差估計

       

      進一步還可以考慮用事后誤差估計式對進行修正。因為事后誤差估計給出了大致誤差值,如果用這個誤差值作為的一種補償,得到

       

      可以期望,是的更好的插值結果。在本題中,利用上述可以算得

      事實上,被插值函數(shù)為,按上述方法得到的插值結果與拋物插值的結果相同,精度的確提高了。

      值得說明的是,這并不只是簡單的巧合。將式展開即可證明,上述就是拋物線插值多項式。

      根據(jù)這種思想,人們還建立了逐步線性插值的埃特金插值法。

      1. 重心拉格朗日插值算法、Barycentric Lagrange Interpolation Algorithm

      重心拉格朗日插值法是拉格朗日插值法的一種改進。在拉格朗日插值法中,運用多項式

      拉格朗日插值法的數(shù)值穩(wěn)定性:如圖,用于模擬一個十分平穩(wěn)的函數(shù)時,插值多項式的取值可能會突然出現(xiàn)一個大的偏差(圖中的14至15中間),也就是龍格現(xiàn)象。

      可以將拉格朗日基本多項式重新寫為:

      定義重心權

      上面的表達式可以簡化為:

      于是拉格朗日插值多項式變?yōu)椋?/p>

      即所謂的重心拉格朗日插值公式(第一型)或改進拉格朗日插值公式。它的優(yōu)點是當插值點的個數(shù)增加一個時,將每個都除以,就可以得到新的重心權,計算復雜度為,比重新計算每個基本多項式所需要的復雜度降了一個量級。

      將以上的拉格朗日插值多項式用來對函數(shù)插值,可以得到:

      因為是一個多項式。

      因此,將除以后可得到:

      這個公式被稱為重心拉格朗日插值公式(第二型)或真正的重心拉格朗日插值公式。它繼承了(1)式容易計算的特點,并且在代入x值計算的時候不必計算多項式。它的另一個優(yōu)點是,結合切比雪夫節(jié)點進行插值的話,可以很好地模擬給定的函數(shù),使得插值點個數(shù)趨于無窮時,最大偏差趨于零。同時,重心拉格朗日插值結合切比雪夫節(jié)點進行插值可以達到極佳的數(shù)值穩(wěn)定性。第一型拉格朗日插值是向后穩(wěn)定的,而第二型拉格朗日插值是向前穩(wěn)定的,并且勒貝格常數(shù)很小。

       

      注意:當時,除數(shù)為0,這時就不能使用重心拉格朗日插值算法了。

       

      java代碼:

      import java.util.Scanner;

       

      public class BarycentricLagrangeInterpolation {

      private static double[] BELIE(double x[],double y[],double x0[]) {

      int m = x.length;

      int n = x0.length;

      double y0[] = new double[n];

      for(int yi = 0;yi < n;yi ++) {

      double j = 0,k = 0,l = 0;

      int ic = 0;

      for(int ia = 0;ia < m;ia ++) {

      double w = 1;

      for(int ib = 0;ib < m;ib ++) {

      if(ia != ib) w /= (x[ia] - x[ib]);

      }

      System.out.println(w);

      k += (w / ((x0[yi] - x[ic]))) * y[ic];

      l += (w / ((x0[yi] - x[ic])));

      ic ++ ;

      j = k / l;

      }

      y0[yi] = j;

      }

      return y0;

      }

       

      public static void main(String[] args) {

      System.out.println("請輸入給定的插值點數(shù)量:");

      Scanner input = new Scanner(System.in);

      int m = input.nextInt();

      System.out.println("請輸入需求解的插值點數(shù)量:");

      int n = input.nextInt();

      double x[] = new double[m];

      double y[] = new double[m];

      double x0[] = new double[n];

      System.out.println("依次輸入給定的插值點:");

      for(int i = 0;i < m;i ++){

      x[i] = input.nextDouble();

      }

      System.out.println("依次輸入給定的插值點對應的函數(shù)值:");

      for(int i = 0;i < m;i ++){

      y[i] = input.nextDouble();

      }

      System.out.println("依次輸入需求解的插值點");

      for(int i = 0;i < n;i ++){

      x0[i] = input.nextDouble();

      }

      double y0[] = BELIE(x, y, x0);

      System.out.println("運用重心拉格朗日插值法求解得:");

      for(int i = 0;i < n;i ++){

      System.out.println(y0[i] + " ");

      }

      System.out.println();

      input.close();

      }

       

      1. 牛頓插值算法、Newton Interpolation Algorithm

      我們根據(jù)線性插值算法和拋物線插值算法,可以推導出已知個互異離散點的插值函數(shù)。

      根據(jù)已知兩個互異離散點的線性插值函數(shù):

       

      和已知三個互異離散點的拋物線插值函數(shù):

       

      得出,已知四個互異離散點的插值函數(shù)就是可以看成是函數(shù)與相加而成的,函數(shù)的公式為:

       

       

      用差商公式,函數(shù)的公式可以變形為:

       

       

       

       

       

       

      歸納可得,已知個互異離散點的插值函數(shù)就是可以看成是函數(shù)與相加而成的,函數(shù)的公式為

       

       

      我們將最后得到的函數(shù)稱為牛頓插值函數(shù)牛頓插值多項式,整個這個算法稱為牛頓插值算法

      1. 牛頓等距插值算法、Newton Equidistance Interpolation Algorithm

      設函數(shù)經(jīng)過個等距節(jié)點、、…、,且,代入牛頓插值函數(shù)得

       

       

       

      根據(jù)等距向前差商公式得

       

       

      所以牛頓等距向前插值函數(shù)

       

       

      設函數(shù)經(jīng)過個等距點、、…、、,且,代入牛頓插值函數(shù)得

       

       

       

      根據(jù)等距向后差商公式得

       

       

      所以牛頓等距向后插值函數(shù)

       

       

      整個這個算法稱為牛頓等距插值算法

       

      使用本公式前,需要先建立差分表,然后再計算未知點的函數(shù)值就能大大降低計算量。

      1. 連分式插值算法、Continued Fraction Interpolation Algorithm

      插值函數(shù)的推導:

       

       

       

       

       

      常量的推導:

       

       

       

       

       

      1. 二次樣條曲線插值算法、Quadratic Spline Interpolation Algorithm

      二次樣條曲線插值算法的原理:

         我們會想到既然直線不行,那么我們就用曲線來近似的代替和描述。最簡單的曲線是二次函數(shù),如果我們用二次函數(shù):aX^2+bx+c來描述曲線,最后的結果可能會好一點,下圖中一共有4個點,可以分成3個區(qū)間。每一個區(qū)間都需要一個二次函數(shù)來描述,一共需要9個未知數(shù)。下面的任務就是找出9個方程。

         如下圖所示:一共有x0,x1,x2,x3四個點,三個區(qū)間,每個區(qū)間上都有一個方程。

         1>曲線方程在節(jié)點處的值必須相等,即函數(shù)在x1,x2兩個點處的值必須符合兩個方程,這里一共是4個方程:

             a1*x1^2+b1*x1+c1=f(x1)

             a2*x1^2+b2*x1+c2=f(x1)

             a2*x2^2+b2*x2+c2=f(x2)

             a3*x2^2+b3*x2+c3=f(x2)

         2>第一個端點和最后一個端點必須過第一個和最后一個方程:這里一共是2個方程

         3>節(jié)點處的一階導數(shù)的值必須相等。這里為兩個方程。

               2*a1*x1+b1=2*a2*x1+b2

               2*a2*x2+b2=2*a3*x2+b3

        4>在這里假設第一個方程的二階導數(shù)為0:這里為一個方程:

                a1=0

       上面是對應的9個方程,現(xiàn)在只要把九個方程聯(lián)立求解,最后就可以實現(xiàn)預測x=5處節(jié)點的值。

          

      下面是寫成矩陣的形式,由于a1=0,所以未知數(shù)的個數(shù)少了一個。

      二次樣條函數(shù)運行之后的結果如下,從圖像中,我們可以看出,二次樣條在函數(shù)的連接處的曲線是光滑的。這時候,我們將x=5輸入到函對應的函數(shù)端中,就可以預測相應的函數(shù)值。但是,這里還有一個問題,就是二次樣條函數(shù)的前兩個點是直線,而且函數(shù)的最后一個區(qū)間內(nèi)看起來函數(shù)凸出很高。我們還想解決這些問題,這時候,我們想是否可以用三次樣條函數(shù)來進行函數(shù)的模擬呢?

       

      1. 三次樣條曲線插值算法、Cubic Spline Interpolation Algorithm

      設已知某函數(shù)在給定個互異的點、、、上的函數(shù)值為、、、,且,且,這個互異點共組成了個區(qū)間,每個區(qū)間都對應一個一元三次多項式函數(shù)用于插值,每個函數(shù)都滿足、,且、,然后再指定一種邊界條件,最后得到一個分段插值函數(shù),那么我們將這樣的分段插值函數(shù)稱為的三次樣條曲線插值函數(shù),整個這個算法稱為三次樣條曲線插值算法

       

      三次樣條曲線插值函數(shù)的構造算法

      設第個區(qū)間對應的一元三次多項式函數(shù)為

       

       

       

       

      因為,所以

       

       

      因為,,所以

       

       

      因為,,所以

       

       

      因為,,所以

       

      整理得

       

       

      因為,,所以

       

      整理得

       

       

      因為,,所以

       

      整理得

       

       

      因為,,,所以

       

      整理得

       

       

       

      因為,所以得到個方程:

       

       

       

       

       

      以上方程一共有個未知數(shù),如果要解出這些未知數(shù),必須要方程,所以還需要個方程,因此我們再指定一種邊界條件來構造這個方程。

       

      自然邊界條件(Natural Boundary Condition)

      第一類自然邊界條件就是當首尾端點的一階導數(shù)都等于的情況,也就是,。

      第二類自然邊界條件就是當首尾端點的二階導數(shù)都等于的情況,也就是,。

       

      固定邊界條件(Clamped Boundary Condition)

      第一類固定邊界條件就是當首尾端點的一階導數(shù)都等于指定的數(shù)的情況,也就是,。

      第二類固定邊界條件就是當首尾端點的二階導數(shù)都等于指定的數(shù)的情況,也就是,。

       

      周期邊界條件(Period Boundary Condition)

      周期邊界條件就是當插值函數(shù)是以為周期的情況,也就是,,。

       

      非節(jié)點邊界條件(Not-A-Knot Boundary Condition)

      非節(jié)點邊界條件就是當首尾插值函數(shù)的三階導數(shù)相等的情況,也就是,。

      計算過程:

      因為,,,,所以

       

       

      整理得

       

       

       

      最后由個方程的系數(shù)組成的系數(shù)行列式和常數(shù)項為

       

       

       

      用克拉默定理解出以上行列式中個,然后再因為、,從而解出個、,最終得到一個分段插值函數(shù)就是三次樣條曲線插值函數(shù)了。

      當插值節(jié)點大于等于個時,用克拉默定理可以推導出,,,從而簡便計算。當插值節(jié)點為或個時,還是要按照克拉默定理計算。當插值節(jié)點為個時,系數(shù)行列式等于方程組無唯一解。當插值節(jié)點為或個時,系數(shù)行列式無法解出。

      1. 三次B樣條曲線插值算法

      https://blog.csdn.net/liumangmao1314/article/details/54586761

      https://blog.csdn.net/liumangmao1314/article/details/54588155

      1. 埃爾米特插值算法、Hermite Interpolation Algorithm

      2. 分段低次插值算法

      3. 貝塞爾曲線插值算法

      4. 克里金插值算法

      5. 埃特金逐步線性插值法、Aitken successive lin-ear interpolation method

      樣條之埃特金(Aitken)逐步插值函數(shù)

       

      //////////////////////////////////////////////////////////////////////

      // 埃特金逐步插值

      //////////////////////////////////////////////////////////////////////

      static float GetValueAitken(const void* valuesPtr, int stride, int n, float t, float eps)

      {

      int i,j,k,m,l;

      float z,xx[10],yy[10];

       

      // 初值

      z = 0.0f;

       

      // 特例處理

      if (n < 1)

      {

      return(z);

      }

      if (n == 1)

      {

      z = YfGetFloatValue(valuesPtr, stride, 0);

      return(z);

      }

       

      float xStep = 1.0f/(n - 1);

       

      // 開始插值

      m=10;

      if (m > n)

      {

      m = n;

      }

       

      if (t <= 0.0f)

      {

      k = 1;

      }

      else if (t >= (n-1)*xStep)

      {

      k = n;

      }

      else

      {

      k = 1;

      j = n;

       

      while ((k-j != 1) && (k-j != -1))

      {

      l = (k+j)/2;

       

      if (t < (l-1)*xStep)

      j = l;

      else

      k = l;

      }

       

      if (fabs(t-((l-1)*xStep)) > fabs(t-(j-1)*xStep))

      {

      k = j;

      }

      }

       

      j = 1;

      l = 0;

      for (i = 1; i <= m; i++)

      {

      k = k+j*l;

      if ((k<1) || (k>n))

      {

      l = l+1;

      j = -j;

      k = k+j*l;

      }

       

      xx[i-1] = (k-1)*xStep;

      yy[i-1] = YfGetFloatValue(valuesPtr, stride, k - 1);

      l = l+1;

      j = -j;

      }

       

      i = 0;

      do

      {

      i = i+1;

      z = yy[i];

       

      for (j = 0; j <= i-1; j++)

      {

      z = yy[j]+(t-xx[j])*(yy[j]-z)/(xx[j]-xx[i]);

      }

       

      yy[i] = z;

      }

      while ((i != m-1) && (fabs(yy[i]-yy[i-1]) > eps));

       

      return(z);

      }

      1. 最小二乘法

      最小二乘估計參數(shù)可以用James–Stein estimator方法代替。

      1. Lanczos插值算法

      1. 混音、Audio Mixing、MIX

      在多人語音聊天時,我們需要同時播放來自于多個人的語音數(shù)據(jù),而聲卡播放的緩沖區(qū)只有一個,所以,需要將多路語音混合成一路,這就是混音算法要做的事情。混音可以在客戶端進行,也可以在服務端進行(可節(jié)省下行的帶寬)。

       

      混音公式:C = A + B - ( A * B >> 0x10 )

      A和B就是兩路不同的音頻數(shù)據(jù),C就是混音后的音頻數(shù)據(jù),混音后還需要對C進行防止數(shù)據(jù)溢出的處理,否則,可能會有破音。

       

      如果是16位整型音頻數(shù)據(jù),就是:

      if( C > 32767 ) C = 32767;

      else if( C < -32768 ) C = -32768;

       

      如果是32位浮點型音頻數(shù)據(jù),就是:

      if( C > 1 ) C = 1;

      else if( C < -1 ) C = -1;

       

      icoolmedia的混音方法:

      1. 遠距離拾音、FFP

      用戶可以在遠距離對著麥克風說話,錄音依然清晰。

      1. 自動語音識別、Automatic Speech Recognition、ASR、語音識別、Speech Recognition

      將人類語音中的語句內(nèi)容轉(zhuǎn)換為計算機可顯示的字符信息,這個過程我們稱為自動語音識別,也稱語音識別

      例如:有人說"撥打電話給114",計算機就會根據(jù)這段聲波識別出這句的內(nèi)容是"撥打電話給114",然后如果有軟件設定好了"撥打電話給"這樣的內(nèi)容就是調(diào)用打電話接口,那么計算機就會撥號114。

      1. 文語轉(zhuǎn)換、Text To Speech、TTS、語音合成、Speech Synthesis

      將計算機可顯示的字符信息轉(zhuǎn)變?yōu)榭梢匀祟惵牭枚恼Z音,這個過程我們稱為文語轉(zhuǎn)換,也稱語音合成

      例如:計算機中有一段字符"你好,我是人工智能機器人。",計算機就可以將這段字符信息換轉(zhuǎn)換為語音信號播放出來給人類聽,并且人類還可以聽懂。

       

      語音合成系統(tǒng)有:WORLD。

      pitchshift之world: https://github.com/mmorise/World

      pitchshift之straight: https://github.com/HidekiKawahara/legacy_STRAIGH

      1. 聲紋識別、Voiceprint Recognition

      2. 自發(fā)性知覺經(jīng)絡反應、Autonomous Sensory Meridian Response、ASMR

      3. 音頻變時不變調(diào)

      SoundTouch庫

       

      波形相似疊加、Waveform Similarity Overlap-Add、WSOLA

       

      https://blog.csdn.net/audio_algorithm/article/details/105126728

      https://www.docin.com/p-1271886370.html

      1. 預加重

      在語音發(fā)音過程中,口唇輻射的影響下,聲帶和嘴唇造成的效應,發(fā)音系統(tǒng)壓抑了高頻部分。

      為了消除發(fā)聲過程中,聲帶和嘴唇造成的效應,來補償語音信號受到發(fā)音系統(tǒng)所壓抑的高頻部分。并且能突顯高頻的共振峰。

      簡單理解就是在頻域上面都乘以一個系數(shù),這個系數(shù)跟頻率成正相關,所以高頻的幅值會有所提升。

       

       

      一般通過傳遞函數(shù)為一階FIR高通數(shù)字濾波器來實現(xiàn)預加重,其中a為預加重系數(shù),0.9<a<1.0。設n時刻的語音采樣值為x(n),經(jīng)過預加重處理后的結果為y(n))=x(n)-ax(n-1),這里取a=0.98。

      預加重實驗:

      %預加重程序 2013/9/25

      clear all;

      [x,sr]=wavread('test2.wav'); %sr為采樣頻率

      ee=x(1500:1755);

      r=fft(ee,1024);

      r1=abs(r);

      pinlv=(0:1:255)*8000/512;

      yuanlai=20*log10(r1);

      signal(1:256)=yuanlai(1:256);

      [h1,f1]=freqz([1,-0.98],[1],256,4000);

      pha=angle(h1);

      H1=abs(h1);

      r2(1:256)=r(1:256);

      u=r2.*h1';

      u2=abs(u);

      u3=20*log10(u2);

      un=filter([1,-0.98],[1],ee);

       

      figure(1);subplot(2,1,1);

      plot(f1,H1);title('高通濾波器的幅頻特性');

      xlabel('頻率/Hz');ylabel('幅度');

      subplot(2,1,2);plot(pha);title('高通濾波器的相頻特性');

      xlabel('頻率/Hz');ylabel('角度/rad');

      figure(2);subplot(2,1,1);plot(ee);title('原始語音信號');

      %axis([0 256 -3*10^4 2*10^4]);

      xlabel('樣點數(shù)');ylabel('幅度');

      subplot(2,1,2);plot(un);title('經(jīng)高通濾波后的語音信號');

      %axis([0 256 -1*10^4 1*10^4]);

      xlabel('樣點數(shù)');ylabel('幅度');

      figure(3);subplot(2,1,1);plot(pinlv,signal);title('原始語音信號頻譜');

      xlabel('頻率/Hz');ylabel('幅度/dB');

      subplot(2,1,2);plot(pinlv,u3);title('經(jīng)高通濾波后的語音信號頻譜');

      xlabel('頻率/Hz');ylabel('幅度/dB');

       

      實驗結果:

      可以看出,預加重后的頻譜在高頻部分的幅度得到了提升。

       

      1. 分幀(chunk)

      傅里葉變換要求輸入的信號的平穩(wěn)的。

       

       

      語音信號在宏觀上是不平穩(wěn)的,在微觀上是平穩(wěn)的,具有短時平穩(wěn)性(10---30ms內(nèi)可以認為語音信號近似不變),這個就可以把語音信號分為一些短段來進行處理,每一個短段稱為一幀(CHUNK)。

       

      如果后續(xù)操作需要加窗,則在分幀的時候,不要背靠背地截取,而是相互重疊一部分。相鄰兩幀的起始位置的時間差叫做幀移(STRIDE)。

      1. 加窗

      加窗即與一個窗函數(shù)相乘,加窗之后是為了進行傅里葉展開。

      1、使全局更加連續(xù),避免出現(xiàn)吉布斯效應

      2、加窗時候,原本沒有周期性的語音信號呈現(xiàn)出周期函數(shù)的部分特征。

      加窗的代價是一幀信號的兩端部分被削弱了,所以在分幀的時候,幀與幀之間需要有重疊。

       

       

      進行預加重數(shù)字濾波處理后,下面就是進行加窗分幀處理,語音信號具有短時平穩(wěn)性(10--30ms內(nèi)可以認為語音信號近似不變),這樣就可以把語音信號分為一些短段來來進行處理,這就是分幀,語音信號的分幀是采用可移動的有限長度的窗口進行加權的方法來實現(xiàn)的。一般每秒的幀數(shù)約為33~100幀,視情況而定。一般的分幀方法為交疊分段的方法,前一幀和后一幀的交疊部分稱為幀移,幀移與幀長的比值一般為0~0.5,。

      漢明窗函數(shù)如下:

      漢明窗的時域和頻域波形,窗長N=61

      x=linspace(20,80,61);

      h=hamming(61);

      figure(1);

      subplot(1,2,1);

      plot(x,h,'k');title('漢明窗時域波形');

      xlabel('樣點數(shù)');ylabel('幅度');

      w1=linspace(0,61,61);

      w1(1:61)=hamming(61);

      w2=fft(w1,1024);

      w3=w2/w2(1);

      w4=20*log10(abs(w3));

      w=2*[0:1023]/1024;

      subplot(1,2,2);

      plot(w,w4,'k');

      axis([0,1,-100,0]);

      title('漢明窗幅度特性');

      xlabel('歸一化頻率');ylabel('幅度/dB');

      結果:

       

      漢明窗的主瓣寬度較寬,是矩形窗的一倍,但是漢明窗的旁瓣衰減較大,具有更平滑的低通特性,能夠在較高的程度上反應短時信號的頻率特性。

      矩形窗的主瓣寬度小于漢明窗,具有較高的頻譜分辨率,但是矩形窗的旁瓣峰值較大,因此其頻譜泄露比較嚴重。

       

       

      端點檢測

      1. 專業(yè)術語

      模數(shù)轉(zhuǎn)換器、Analog to Digital Converter、ADC

      數(shù)模轉(zhuǎn)換器、Digital to Analog Converter、DAC

      數(shù)字信號處理、Digital Signal Processing、DSP

      數(shù)字信號處理器、Digital Signal Processor、DSP

      聲學回音消除、Acoustic Echo Cancellation、AEC

      聲學回音消除器、Acoustic Echo Canceller、AEC

      殘余回音消除、Residual Echo Cancellation、REC

      殘余回音消除器、Residual Echo Canceller、REC

      噪音抑制、降噪、Denoise、Noise Suppression、NS

      混響消除、Dereverberation、De-Reverberation、Dereverb、DR

      自適應抖動緩沖區(qū)、Adaptive Jitter Buffer、AJB

      自適應抖動緩沖器、Adaptive Jitter Buffer、AJB

      Speex專用自適應抖動緩沖器、Speex Adaptive Jitter Buffer、SpeexAJB

      預處理、Preprocess

      預處理器、Preprocessor

      數(shù)據(jù)包丟失隱藏、Packet Loss Concealment、PLC

      非連續(xù)傳輸、Discontinuous transmission、DTX

      強化立體聲編碼、Intensity Stereo Encoding、ISE

      固定比特率、Constant Bit Rate、CBR

      可變比特率、Variable Bit Rate、VBR

      平均比特率、Average Bit Rate、ABR

      非連續(xù)傳輸、Discontinuous transmission、DTX

      定點執(zhí)行、Fixed-point implementation

      浮點執(zhí)行、Floating-point implementation

      自動增益控制、Automatic Gain Control、AGC

      語音活動檢測、Voice Activity Detection、VAD

      多速率、multi-rate

      嵌入式、Embedded

      重采樣、Resample

      1. 參考資料

      https://blog.csdn.net/qq_34218078/article/details/102830558

      http://www.rzrgm.cn/LXP-Never/p/11703440.html

      https://huaweicloud.blog.csdn.net/article/details/109592524

      https://bbs.huaweicloud.com/blogs/207318

      https://my.oschina.net/anevernet/blog/37285?p=1

      http://www.rzrgm.cn/haibindev/archive/2011/12/07/2277366.html

      https://blog.jianchihu.net/pcm-volume-control.html

      https://blog.jianchihu.net/pcm-vol-control-advance.html

      https://docs.microsoft.com/en-us/windows/win32/coreaudio/audio-tapered-volume-controls

       

      噪音門(Noise Gate):

      https://zhuanlan.zhihu.com/p/68707538

       

      懂聽:

      https://www.bilibili.com/video/BV147411j7fL

      https://www.bilibili.com/video/BV1tE41147LP

      https://www.bilibili.com/video/BV1fE411M7Ug

      https://www.bilibili.com/video/BV1tE41157cB

       

      【硬件科普】音響耳機麥克風這些設備是怎么工作的?音頻的采樣率和采樣精度是什么?:

      https://www.bilibili.com/video/BV1ca411t7qf

      posted @ 2017-11-18 21:35  赤勇玄心行天道  閱讀(16993)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 四虎永久精品免费视频| 国产怡春院无码一区二区| 中文字幕av无码免费一区| 上司的丰满人妻中文字幕| 亚洲最大色综合成人av| 穆棱市| 国产久久热这里只有精品| 日韩中文字幕v亚洲中文字幕| 久久91精品牛牛| 亚洲综合一区二区三区不卡| 伊人久久大香线蕉AV网| 国产精品美女www爽爽爽视频 | 亚洲精品韩国一区二区| 国产高清精品在线91| 国产乱码精品一区二区三上| 福利视频在线一区二区| 国产日韩精品视频无码| 亚洲免费人成在线视频观看| 亚洲精品综合久中文字幕| 国产综合欧美| 亚洲偷自拍国综合| 国产一区二区在线有码| 狠狠综合久久av一区二| 福利在线视频一区二区| 栾川县| 久久久无码精品亚洲日韩蜜臀浪潮| 成人免费精品网站在线观看影片 | 国产精品中文av专线| 西西444www高清大胆| 成人三级视频在线观看不卡| 国产一精品一av一免费爽爽| 开心色怡人综合网站| 少妇人妻综合久久中文字幕| 云梦县| 2021亚洲国产精品无码| 国产精品白浆免费视频| 亚洲中文字幕在线精品一区| 乱码中文字幕| 欧美亚洲综合成人a∨在线| 成人动漫综合网| 岛国岛国免费v片在线观看|