331b482179f3

好久没更新文章了,蠢作者刚好最近写了个有意思的小工具,所以就写它好啦~1.什么是声波配网

2.声波传输的技术原理

3.声波传输编码

4.声波传输解码

1.什么是声波配网

现在很火的一些智能硬件,比如对话机器人,智能音响等,在使用的过程中都是需要联网的,比如联网抓取语料,获取服务器指令,或者与手机APP绑定。而由于成本限制,这些智能硬件很多又没有屏幕、键盘或者其它输入设备无法输入WIFI初始化信息(SSID+密码)。所以通过手机播放声波把WIFI的初始化连接信息传递给智能设备,让设备识别完成WIFI初始化流程建立网络连接是值得考虑的一种方式。

2.声波传输的技术原理

显然声波配网技术中的技术难点就是声波传输技术。而声波传输的应用其实已经很广啦:支付宝的声波支付,QQ音乐中的歌曲的声波分享,茄子快传,蛐蛐儿等等。

声波传输可以理解为类似NFC的一种近场通讯技术。听起来很高大上有没有~

331b482179f3

其实原理很简单啦,可以近似理解为对称加密,加解密的过程大概如下所示~

331b482179f3

仅传输ASCII可打印字符

331b482179f3

传输UTF-8字符串

简单的说就是在发送端把你把要识别的字符映射成频率,然后把一个频率映射成一个音节信号(单频率的正弦波)编码成音频播放;在接收端接收到音频信号后,解析出频率,然后根据两边共同的码表找到频率对应的字符,从而解码出数据。具体来说就是我们可以将700HZ的正弦波对应成字符'a',800HZ的正弦波对应数字'b',900HZ的正弦波对应数字'c',以此类推。那么数字串"abc"就对应成频率串就是{700,800,900},然后把这个频率串变成3个音节的正弦波音频。如果规定每个音节持续100ms,则{700,800,900}对应300毫秒的音频段。接收方录制声音,对收到的声音进行解析,识别出700HZ,800HZ,900HZ三段正弦波频率,然后查找码表,解码出的字符串就是"abc"。

关于声波传输最根本的原理其实是时域频域的相互转换,所以我们绕不开傅里叶变换的相关知识, 贴两篇不错的科普,可以点进去看个热闹哈。

331b482179f3

看了吗~~~是不是怀疑自己大学上了假的高数课~~~~

331b482179f3

不过其实,看不懂没关系啦hiahiahia,记住下面这张图就好啦,反正不影响我们写代码的~

331b482179f3

网上关于声波传输的资料不多,零星几篇分析原理的文章详细写了声波的编码,解码却是一笔带过。Github上面能找到的开源项目,识别成功率高的没有核心代码(他们的so库按平台收费23333,好吧,知识变现,没毛病~),有完整源码的识别成功率又达不到投入实际中使用的要求。所以蠢作者花了一些时间,在了解原理之后尝试了好几种解码的方案,踩过一些坑才最终把这个小工具优化好。

最终的效果是在手机中等播放音量,距离接收端30cm内的时候可以做到识别成功率100%,不受环境噪音影响,没有传输长度的限制(网上有一个说法【一般来说传输总字符如果达到40个以上,解码正确率就会下降,数据量越大,出错率就会升高】,虽然看不到他们的核心代码,但踩过一些坑之后,大概知道造成这种现象的原因,在声波传输解码里我会说明)。当然随着距离的增加,受环境噪音的影响,成功率也就有所下降。不过用作配网,30cm够用啦,有处理音频底子的宝宝可以自己加降噪的算法,这样识别距离就可以变长啦~

关于声波传输的编码和解码我都会单独写一篇详细的文章(避坑指南)出来,有兴趣的宝宝可以关注一下奥~

(都看到这里了就点个赞吧!^^)

End~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐