android 字符串 声波,识别成功率100%的声波配网,看完你也可以实现一个
好久沒更新文章了,蠢作者剛好最近寫了個有意思的小工具,所以就寫它好啦~1.什么是聲波配網
2.聲波傳輸的技術原理
3.聲波傳輸編碼
4.聲波傳輸解碼
1.什么是聲波配網
現在很火的一些智能硬件,比如對話機器人,智能音響等,在使用的過程中都是需要聯網的,比如聯網抓取語料,獲取服務器指令,或者與手機APP綁定。而由于成本限制,這些智能硬件很多又沒有屏幕、鍵盤或者其它輸入設備無法輸入WIFI初始化信息(SSID+密碼)。所以通過手機播放聲波把WIFI的初始化連接信息傳遞給智能設備,讓設備識別完成WIFI初始化流程建立網絡連接是值得考慮的一種方式。
2.聲波傳輸的技術原理
顯然聲波配網技術中的技術難點就是聲波傳輸技術。而聲波傳輸的應用其實已經很廣啦:支付寶的聲波支付,QQ音樂中的歌曲的聲波分享,茄子快傳,蛐蛐兒等等。
聲波傳輸可以理解為類似NFC的一種近場通訊技術。聽起來很高大上有沒有~
其實原理很簡單啦,可以近似理解為對稱加密,加解密的過程大概如下所示~
僅傳輸ASCII可打印字符
傳輸UTF-8字符串
簡單的說就是在發送端把你把要識別的字符映射成頻率,然后把一個頻率映射成一個音節信號(單頻率的正弦波)編碼成音頻播放;在接收端接收到音頻信號后,解析出頻率,然后根據兩邊共同的碼表找到頻率對應的字符,從而解碼出數據。具體來說就是我們可以將700HZ的正弦波對應成字符'a',800HZ的正弦波對應數字'b',900HZ的正弦波對應數字'c',以此類推。那么數字串"abc"就對應成頻率串就是{700,800,900},然后把這個頻率串變成3個音節的正弦波音頻。如果規定每個音節持續100ms,則{700,800,900}對應300毫秒的音頻段。接收方錄制聲音,對收到的聲音進行解析,識別出700HZ,800HZ,900HZ三段正弦波頻率,然后查找碼表,解碼出的字符串就是"abc"。
關于聲波傳輸最根本的原理其實是時域頻域的相互轉換,所以我們繞不開傅里葉變換的相關知識, 貼兩篇不錯的科普,可以點進去看個熱鬧哈。
看了嗎~~~是不是懷疑自己大學上了假的高數課~~~~
不過其實,看不懂沒關系啦hiahiahia,記住下面這張圖就好啦,反正不影響我們寫代碼的~
網上關于聲波傳輸的資料不多,零星幾篇分析原理的文章詳細寫了聲波的編碼,解碼卻是一筆帶過。Github上面能找到的開源項目,識別成功率高的沒有核心代碼(他們的so庫按平臺收費23333,好吧,知識變現,沒毛病~),有完整源碼的識別成功率又達不到投入實際中使用的要求。所以蠢作者花了一些時間,在了解原理之后嘗試了好幾種解碼的方案,踩過一些坑才最終把這個小工具優化好。
最終的效果是在手機中等播放音量,距離接收端30cm內的時候可以做到識別成功率100%,不受環境噪音影響,沒有傳輸長度的限制(網上有一個說法【一般來說傳輸總字符如果達到40個以上,解碼正確率就會下降,數據量越大,出錯率就會升高】,雖然看不到他們的核心代碼,但踩過一些坑之后,大概知道造成這種現象的原因,在聲波傳輸解碼里我會說明)。當然隨著距離的增加,受環境噪音的影響,成功率也就有所下降。不過用作配網,30cm夠用啦,有處理音頻底子的寶寶可以自己加降噪的算法,這樣識別距離就可以變長啦~
關于聲波傳輸的編碼和解碼我都會單獨寫一篇詳細的文章(避坑指南)出來,有興趣的寶寶可以關注一下奧~
(都看到這里了就點個贊吧!^^)
End~
總結
以上是生活随笔為你收集整理的android 字符串 声波,识别成功率100%的声波配网,看完你也可以实现一个的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html section 布局,sect
- 下一篇: CSS边框,背景,边距,溢出