開發一個 App,利用 Bose 降噪耳機的原理實現其功能?
利用手機的麥克風捕獲環境中的噪音,然後通過 App 實時計算出與噪音頻率相反的聲音,再通過耳機輸出,這樣不就可以簡易的實現主動降噪功能了嗎?
http://superpowered.com/androidaudiopathlatency
參考這個網站,它專門研究手機音頻延遲問題。
你可以用它提供的app測試下自己手機的採集播放延遲,或者看看其他用戶上傳的測試結果。iPhone基本在30ms左右,Android則普遍在80ms以上,部分低端Android則高達200多ms。
而要達到主動降噪的效果需要採集播放延遲在1ms左右。
採樣精度,採樣滯後,控制閉環精度,最後不可行
題主的想法很好,確實已經有類似的 App 實現了類似的功能。但我爲什麼說它是「類似的功能」,是因爲這種想法的實現,在現有的設備上有一些天生的不現實性。最根本的問題有三個:延遲、相位和耳機個體差異。要瞭解這三個問題的原由,必須先瞭解主動降噪耳機的構成方式。
現在常見的主動降噪耳機有三種形態:前饋式(Feed-Forward)、反饋式(Feedback)和混合式(Hybrid),分別對應的是:- 置於耳機外部或耳罩開口處,用於採集外部噪聲的單個採樣麥克風 —— 前饋式
- 置於耳機內部揚聲器內側,用於採集耳罩內部噪聲的單個採樣麥克風 —— 反饋式
- 內外雙採樣麥克風,以上兩種方式的結合 —— 混合式
毫無疑問,借用有麥克風的耳機上的麥克風(或使用手機本身的麥克風)進行環境噪聲採樣,可以勉強算作是「前饋式」。那麼它所面臨的第一個問題就是:由於前饋式的設計方式,使得其對採樣麥克風的指向性問題極爲敏感,所以前饋式所採用的採樣麥克風都是全指向式的。但我們知道,通常耳機上的麥克風都是單一指向式的,而且通常位置也是不固定的、較耳機揚聲器和耳道距離較遠的,所以這個問題無解。而這個問題的背後,也正是延遲和相位的問題 —— 採樣麥克風放哪裏?相位差如何補償?頻率、振幅差是否可以糾正?
另外一個關鍵性問題:由於前饋式的工作原理是由採樣麥克風純粹採集外部噪聲,經過降噪電路的處理之後讓喇叭播放反相信號,用於抵消噪聲。那麼,若要實現最理想的效果,由喇叭產生的反相聲必須和傳入耳機內部的噪聲頻率、振幅相同,相位相差 180 度。在這種情況下,由於耳機本身物理特性造成的被動降噪效果,使得外部噪聲在透過耳罩傳入耳道的時候已經發生了變化 —— 甚至每個人不同的耳機佩戴方式也需要降噪電路對其使用的傳遞函數(transfer function)進行調整。在現實中,前饋式主動降噪耳機的降噪電路在設計時已經考慮到了這些因素,包括擬合噪聲經過耳罩進入耳道的衰減特性,以及通過調整耳機的整體設計使得人與人之間由於佩戴造成的差異最小化。一款手機應用,如何針對不同的耳機特性設計不同的濾波器?這或許也不是問題,畢竟一個個測過去就好了……但你確定要付出這麼大的代價嗎?
最後,也是最致命的一個問題(都懶得討論數字電路延遲的問題了):不合格的降噪,不是無用,而是會產生負作用。Poorly implemented 的結果就是聲音質量比不「降噪」出現更多的問題。換言之,何必呢?-------------------------------------------------------------------------------其實你要問技術可不可以實現,答案是顯然的。這不就是moto摩托羅拉的那個 「麗音」 技術的一個部分么,都有現成的解決方案了然而,無論是bose還是moto,都是先有的這個想法後根據需要給手機/耳機配置 專門的拾噪 麥克風以及,參數已經確定的 揚聲器,配套的數字信號處理器與可以快速響應的電路與驅動,最重要的是位置已經確定的聲道構型。然而你的想法最大的挑戰是,不同手機不定型的聲道構型與不確定的硬體結構。其實api的問題還是小case。------------------------------------------------------------------------------你需要一個 嵌入式 硬體大神 幫你解決 輸入延遲問題與系統構建問題需要一個博士級的通信大神,幫你解決 不定型麥克風帶來的採集滯後問題,普遍手機麥克風不穩定採集失真問題(多數麥克是以解決人聲採集而設計的),尤其是手機多用的婁式硅麥克風采集天然的一些問題。而且該大神還需通曉音頻知識,做出通用型的採集方案需要一個博士級的控制大神,和通信大神溝通並在不確定 控制器性能的情況下做好 揚聲器的混頻與抵消,最好還能超前一下彌補一下滯後的採集。一群會安卓開發又對音頻處理有很多認知的工程師,做多機型的矯正與測試
有延遲的話,直接反相估計行不通。不過可以試試別的辦法,比如獲得降噪麥上的波形後,做個雜訊功率譜估計,再維納濾波。沒試過,我也不好說。不過理論上這個方法對音質的損傷肯定比較大。
我不太認同 @劉中陽的回答。非實時不是阻礙這項技術實現的主要原因。
脫離實際操作環境,討論「實時」和「非實時」本身就是一個偽命題。一個所謂「實時」系統的核心參數是deadline,就是允許的最大延遲相應時間,這個上限是由應用環境而定的。比如同樣是實時視頻跟蹤系統,對於車輛跟蹤來說,一般最大延遲相應時間是幾十毫秒,而我之前做過的心臟射頻消融探頭的跟蹤,延遲時間達到0.5秒都是可以接受的:因為探頭運動的速度非常慢。
一般來說,單一任務系統的延遲響應時間是比較確定的,比如對於bose降噪耳機來說,主要由麥克風的A/D轉換時間,麥克風與處理器之間的I2C(或者SPI)的通信時間,以及處理器的信號處理時間組成,後兩者跟處理器的核心頻率(幾十MHz)相關。按我的經驗,這個響應時間大概是1毫秒這個數量級上下。
手機操作系統的優勢在於,他們的核心處理器的速度很快(GHz),缺點在於它是多任務的,麥克風和耳機這類外圍設備中斷優先順序是比較低的,所以很難保證處理器總是「及時」地處理來自於麥克風的任務請求,往往需要在中斷隊列中排隊。因此這些系統上的延遲時間,主要是由最大可能在隊列中等待的時間決定的,這個時間一般是毫秒到微秒等級的,根據不同任務環境差別很大,但我至少可以做一個最差的預測:1秒。原因是MP3播放器的buffer一般也就16K到64K左右,但MP3的碼率是64Kps以上。MP3播放總是可以不間斷的,說明處理器至少可以做到0.25S到1S就至少響應一次來自於麥克風和耳機的請求。1秒這個響應時間是否滿足實時降噪需求?我不是專業人士無法給出確定答案,但我個人認為,噪音環境的時變性不算太大,這個延遲乃至更長是完全可以容忍的。
回到問題來,我的答案也是「不可以」。
原因在於,降噪耳機的原理在於耳機主動產生一個與環境噪音相同頻率成分,相同幅度,但是相位差為180度的噪音。我姑且認為手機接收到的環境噪音和耳朵聽到的頻率和幅度一模一樣吧,問題是,在人耳處噪音的相位如何預測?手機到耳朵的距離根本無法確定。做個簡單的運算,人耳可接收的聲音頻率是20HZ到20KHz,用人自己的聲音1KHz計算,在空氣中波長就為340毫米,半波長170毫米,取10%左右的容忍度,大概就17毫米。也就是說,對手機到人耳距離的預測,起碼要做到17毫米的精度範圍,才能大致做到降噪人聲,對於更高頻率的環境雜訊,這個精度需求更高,會一直達到1毫米左右。bose耳機為什麼能做到?它的麥克風是內置在耳機里的,因此跟震動片的距離是固定的。我14年的時候在 iOS 上嘗試過。首先是蘋果並沒有給出近乎實時的獲取、發送聲音的API(現在有了)。其次是不管安卓還是蘋果,其系統都是非實時的,也就是說它並不能夠保證你收到數據、處理數據、發送數據的時間是穩定的。所以沒戲。
你算一下手機到耳朵的距離,乘以四,再算一下這個波長對應的頻率,然後感受一下
第一個問題 BOSE捕捉噪音的方式 是在耳罩里有個麥克風,這裡的收集到的聲音和手機麥克風所在的位置手機到的聲音是不同的,所以你計算出 用於抵消噪音的聲波在耳朵里聽起來是不準確的,而且聲音會互相干擾,這樣不但沒有達到效果,還降低了音質第二個問題,好像在你看來分析聲波並抵消是一件很簡單的事情···這裡的處理量其實很大···並不是看起來這麼簡單,而且降噪效果必然降低原本的聲音品質,這個功能其實受眾並不高·我覺得·
你麥克風捕獲的是麥克風附近的噪音,距離耳朵還是有點遠,想要實現肯定是要在耳朵附近搜集噪音的
那手機的麥克風,數模轉換功能的精度,速度要多好啊,這個成本,不比一個bose小了
Qualcomm為超小型耳塞與耳機帶來主動降噪技術 | Qualcomm
我來提供個思路,大家都在討論能否通過硬體或軟體提升來做到軟體程序上對聲波的時時反相,我個人的答案是不能由於滯後性這個原因,所以需要用超前量對原輸出結果進行預測補償,可惜對於雜訊,這個微分環節是未知的。 從自動控制理論角度的思考,望諸位大佬包含
可行,只要你解決延遲和壓縮率就好。
我覺得技術上很可能是可行的。
好多人說處理速度,延時什麼的。這確實是比較大的障礙。但是你們想沒想過,手機免提模式下的回聲抑制功能要多快的處理速度?所以個人感覺,關鍵問題可能還是充分挖掘手機的硬體潛力。像上面說的這種東西,邏輯上看是個濾波器,其實硬體上是DSP。這個東西也是可編程的。寫通用app可能有點困難,可以找個開發板先調調,也許真的能調出來呢。推薦閱讀:
※BOSE QC35的使用體驗如何?
※糾結! 想買一副運動耳機,現在糾結於Bose soundsport和JBL x UA,求推薦!?
※BOSE耳機怎麼樣呢?