手机与设备音频接口通信原理及案例分析.docx

上传人:牧羊曲112 文档编号:1603528 上传时间:2022-12-10 格式:DOCX 页数:34 大小:2.32MB
返回 下载 相关 举报
手机与设备音频接口通信原理及案例分析.docx_第1页
第1页 / 共34页
手机与设备音频接口通信原理及案例分析.docx_第2页
第2页 / 共34页
手机与设备音频接口通信原理及案例分析.docx_第3页
第3页 / 共34页
手机与设备音频接口通信原理及案例分析.docx_第4页
第4页 / 共34页
手机与设备音频接口通信原理及案例分析.docx_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《手机与设备音频接口通信原理及案例分析.docx》由会员分享,可在线阅读,更多相关《手机与设备音频接口通信原理及案例分析.docx(34页珍藏版)》请在三一办公上搜索。

1、 关于手机音频通信实际开发经验分享一、手机音频通信的特点1、 通用性强:在智能手机普及的今天,手机的对外通信接口多种多样,而其中以3.5mm的音频接口通用新最强,基本所有的手机、平板电脑都会有这个接口,所以在一些要求通用性的设备上,音频接口登上了舞台。2、 速率低:由于手机音频部分的采样频率一般为44.1KHZ(部分国产山寨为8KHZ),这极大的限制了音频通讯的速率。我们都知道44.1KHZ的采样频率,那么最高的信号频率只能为20KHZ左右,而信号周期也不可能只有2个采样点,通常要到10个以上,这样层层下来通讯速率可想而知。3、 小信号:音频通信的信号都是毫伏级的,各个手机厂商略有不同,但通常

2、最大不超过200mv,通常我们通信使用的信号强度也就100mv左右,这导致信号比较容易受干扰,且在开发阶段对工具有着种种限制。二、 手机音频通信分类1、 无线方式:a) 无线方式大家可能不太熟悉,容我慢慢道来。我们都知道人耳能听到的声音频率为20HZ20KHZ,而手机通信的信号频率最高也就20KHZ,所以无线通信方式是可行的。因为虽然人耳的极限听力能到20KHZ,但普通人一般在19KHZ以上时基本就听不到了,所以如果信号的强度比较弱,且控制在19KHZ到20KHZ之间,那么我们就可以将之当做是“超声波”来看待了。b) 其实在此提到手机音频通信的无线方式,算是给大家一种产品开发思路吧。它的通讯半

3、径在10M左右,前景还是很广阔的,大家有兴趣的可以试试。(其实已经有这方面的产品了)2、 有线方式:a) 有线方式分为单向(设备手机)和双向两种,单向的限制少,开发难度也小一些,但实际应用时会受限制。而双向通信限制多,开发难度也大一些,但实际应用时更方便些。b) 设备手机:曼彻斯特编码;FSK;DTMF;自定义正弦波c) 手机设备:由于手机输出的音频信号很小,无法直接使用,要么用运放发大到合适的范围,要么用电压比较器转换成TTL方波。三、手机音频通信硬件通信方式分类:手机音频通信的硬件通信方式大体可分为方波和正弦波两种。1、 方波:方波通常使用的是曼彻斯特编码方式(什么是曼彻斯特编码自己去查)

4、,它的好处是可以用单片机直接输出方波,经过衰减后即可使用,方便简单。缺点是兼容性不好,因为手机音频部分有这样一个特性,它只识别变化的电平信号,当麦克输入的信号长时间保持在某一非零电平时,手机会将其视为零,而强行拉回零电位。这就是采用方波通讯方式的兼容性不好的最大原因了,并且方波也容易受干扰。2、 正弦波:正弦波不会出现上面所说的方波的问题,故正弦波的兼容性和稳定性更好一些。通常采用方案有FSK、DTMF、信号发生器、或方波转正弦波等。(后面会对以上方案逐一分析)3、 通信信道分析a) 我们知道音频接口有4根线,MIC、地、左、右声道。设备手机用MIC,手机设备用地、左、右声道中的任意一个。这里

5、说一下,实际产品中,有一些厂家会更换地线,即将原本左、有声道中的一根改为地线来用,其实道理是一样的。因为音频通信的信号时交流信号,而地其实也是悬浮地,即便地线换了,最终的波形还是一样的,因为最终手机解析信号时需要的是频率和幅值。这样还剩下一个声道,通常被用来帮助设备进行上电识别,因为音频通信的设备通常都是电池供电的。b) 另外还要在MIC和地之间并联一个4.99K的电阻,因为手机是通过检测MIC和地之间的阻抗是否为4.99K(也有其他阻值的)来判断是否有设备(耳机)插入,这一点要谨记。四、各个通信方案对比分析1、 设备手机:a) 曼彻斯特编码:在诸多通信方式中,曼彻斯特编码是最灵活简便的一种方

6、法,编码信号可由单片机直接产生,经衰减电路衰减后便可直接使用。注意事项:曼彻斯特编码信号的生成有两种方式,一种是用PWM生成,一种是用定时器中断翻转IO,我个人比较倾向于定时器中断方式。因为我们知道曼彻斯特编码中有宽沿河窄沿之分,且宽沿和窄沿可能会灵活变化,而用PWM方式不容易精确控制宽沿、窄沿输出的变化,而定时器中断方式则非常灵活且容易控制。(后面会送上我自己写的曼彻斯特编码、解码函数)b) FSK、DTMF方式:FSK和DTMF两种方式大同小异,使用时通常都是用集成的芯片来生成的,而这些芯片通常都是遵守固定的通信协议的的要求(FSK为Bell202或V.23协议,DTMF记不清名字了)。这

7、两种通信方式的优点是采用正弦波通信、稳定性好且使用简便。但由于固定通信协议的限制导致通信速率、比特率也受到限制而缺乏灵活性。在这里跟他家推荐一款英国的通信芯片CMX系列,这个系列的芯片融合的FSK、DTMF的编码、解码,还是很不错的,大家有兴趣可以试试。(相关手册在附件里)c) 信号发生器、锁相环方式:这种方式用信号发生器或者锁相环来产生方波或正玄波,由单片机来控制波形的输出,也可以实现音频通信,且十分灵活。但缺点是电路较复杂,且不同频率信号之间衔接不好掌握,用不好反而是麻烦。(相关手册在附件里)d) 在这里送上一种我个人认为比较好的方案:就是曼彻斯特编码加低通滤波器,由单片机输出曼彻斯特编码

8、,再经由低通滤波器将方波滤成正弦波后输出。既解决了FSK、DTMF灵活性的问题,又解决了曼彻斯特编码方波稳定性、通用性的问题。在低通滤波器方面我个人采用的是“集成低通开关电容滤波器”,它成本虽然高一些,但好处也是明显的,电路简单,使用方便,且占用的空间亦很小。(相关手册在附件里)2、 手机设备:a) 放大电路方式:将手机输出信号经放大电路放大到合适的幅值,然后有锁相环或者结成FSK、DTMF芯片进行解析。该中方式难度最大,需要非常强的模拟电路功底,我个人水平有限,故采用的另一种方式。b) 电压比较器方式:将手机输出的交流信号经电路强行拉到Vcc/2级别,然后加到电压比较器一端,另一段接比较电压

9、Vcc/2,这样交流信号即被转化为TTL方波信号,此时再进行解析就变得很简单了。五、研发注意事项(通讯方案分析部分由于过长,放到最后来讲)1、 一个好手机录音软件是必须的,最好能在手机上直接看到波形的。2、 建议用笔记本电脑进行开发,而非台式机。因为音频信号很小,容易受干扰,而台式机干扰较大,笔记本还有一个好处是必要时可将外接电源拔掉,用电池供电。3、 一个好录音笔必不可少,有时需要得到纯净的音频信号,方便更加准确的分析。4、 做一个转接板,一边接音频母座,一边接音频公头,将MIC、地、左、右声道4跟线用排阵引出,方便录音。5、 做一个信号衰减电路,可将设备电路产生的信号衰减至音频接口能承受的

10、范围内。前期调试时,我们可以用该电路将信号录进电脑进行信号分析。(推荐一个电脑音频信号分析软件:Goldwave)6、 录音用的音频线切记不要太长,不然会给你带来不少麻烦。最好自己做,用音频裸头、杜邦线、排阵即可制作,方便好用。曼彻斯特编码的编码解码函数如下: 1. /*2. 注释:编码函数都是采用定时器中断的形式,以曼彻斯特编码的窄沿作为定时器周期。3. 发送的数据包括1个起始位、8个数据位、1个奇偶校验位、3个停止位。4. */5. static void VIC_VECT_Fucton_00(void)/发送编码数据中断函数6. 7. TIMER0IS =0x0;8. if(send_t

11、ime%2=0) & (send_start=1)9. 10. switch(FSK_txState)11. 12. case STARTBIT:13. if(GPIODATA&0x)=0x)/如果检测到数据发送管脚为零14. send_time+;15. else16. 17. currentSym=0;18. FSK_txState = BYTE;19. 20. break;21. case BYTE:22. if(txBit txBit) & 0x01;25. txBit+;26. txParity += currentSym; /奇偶校验位27. 28. else if (txBit

12、= 8)29. 30. currentSym = txParity & 0x01; /发送奇偶校验位31. txBit+;32. 33. else if(txBit8 & txBit=RX_time)75. RX_diff=RX_lasttime-RX_time; /lasttime初始值为076. else77. RX_diff=65535-RX_time+RX_lasttime;78. RX_lasttime=RX_time; 79. switch(RX_state) /启动代码时state已经被配置为STARTBIT80. 81. case STARTBIT_FALL:82. if (S

13、HORTINTERVALRX_diff) & (RX_diffLONGINTERVAL)83. 84. if(RX_ones5) /ones初始值为085. 86. RX_ones = 0;87. 88. else89. 90. RX_state = DECODE; /将状态配置为解码91. 92. 93. else if(RX_diff SHORTINTERVAL)94. RX_ones+;95. else96. RX_ones=0;97. break;98. case DECODE:99. /*通过间隔长短来判定数据*/100. if (SHORTINTERVALRX_diff) & (R

14、X_diffLONGINTERVAL)/ 若间距在范围内则当前数据位值和前一个相反101. 102. currentbit=(currentbit+1)&0x01;103. RX_times+=2;104. 105. else if( RX_diff SHORTINTERVAL) 106. 107. currentbit=currentbit;108. RX_times+;109. 110. else111. RX_state = DATAINIT; 112.113. /*接受数据位,从低位接起*/114. if(RX_times%2=0)115. 116. if(RX_bitcounter

15、1) + (1 1);127. RX_bitcounter+;128. 129. 130. else131. 132. rxParity&=0x01; /进行奇偶校验133. if(rxParity=currentbit)134. 135. RX_bitcounter+;136. RX_finish=1;137. RX_state=DATAINIT;138. 139. else140. RX_state=DATAINIT; /若奇偶校验错误则,重新检测141. 142. 143. break;144. case DATAINIT : /初始化参数状态145. RX_bitcounter=0;1

16、46. RX_ones=0;147. rxParity=0;148. currentbit=0;149. RX_state=STARTBIT_FALL;150. RX_times=0;151. break;152. default:153. break;154. 155. android音频口通信2FSK信号调制发布时间:2013-5-16一、前言 今天要和大家分享一个本人最近研发的完全具有自主知识产权的项目android音频口通信,并寻求有兴趣的同行和友人一起合作! 大家都知道拉卡拉,但它具体的技术实现我相信很少有人能说出来个一二,本人也正是抱着遇见问题勇往直前的技术男的精神,花了一两个月的

17、时间,完全摸透并已初步实现了用android手机的音频口(耳机输出输入)来实现全双工的通信,一但通信协议建立了,下面好玩的东西就多了! 你可以完全不再用担心你家的电视或者空调等此类用红外遥控的电器一时找不到遥控器而烦恼了,加上我现在研发的音频口扩展头,将其插入你的android手机的耳机口,装上特制的APP,你将可以用它来遥控你家的任何带红外遥控功能的电器! 你也可以抛开目前那种单调的耳机口防尘塞,加上相应的扩展头,你将可以实时知道你周围环境的温度、湿度等等指标 诸如此类的运用,数不胜数,在这里我就不一一列举了,下面转入我们的正题吧(_不好意思,闲话说多啦,哈哈) 二、通信建立的基础耳机线上传

18、输的信号 我们知道,耳机是用来听音乐,打电话的,既然是和声音相关的,那么耳机线上传输的就是音频信号,常见的音频信号一般都是在100Hz10KHz左右的范围内,那么手机里面的音频输出系统(DA和音频功放)的幅频特性(也既带宽)一定也是在这个范围(这是本人的猜想,由于设备和仪器有限,没有进行系统的测试,有兴趣的朋友可以用相关的测试仪器测测),那么,既然有带宽,好家伙,我们就可以通过努力在这个频带内实现我们的通信信道了!另外值得提的一点是,耳机线上传输的音频信号是交流的! 下面我们来看看市面上常见的耳机座(公头)的引脚定义,android手机上用的耳机大多都是3.5mm的四芯座,在这四个芯中,分别是

19、:地、左声道、右声道和线控开关(MIC),而这四芯的排列常见的有如下两种: 1、国家标准 2、国际标准 国际标准耳机座MIC和GND和国内标准是反的,其它的一样! 不难发现有了左右声道,向外设扩展头供电和发送数据就有了相应通信线路的支持,另外有了MIC这个打电话时输入说话的信号通道,那么手机接收数据也有了硬件通道的支持了! 三、如何调制数据 说到信号的调制解调,很多人都会想到收音机,没错,收音机之所以能听到千里之外的歌声,正是利用了电磁波作为传输媒介,将声源的信号通过特定的调制加载到电磁波上,然后传输到广阔的空间里的,无线电的调制有调幅(AM)、调频(FM)和调相(PM)三种,而调制又有模拟调

20、制和数字调制之分,模拟调制就是把模拟信号(比如人说话的声音)直接加载到电磁波上,使得电磁波的某一特性随着声源的变化而变化;而数字调制是近现才发展起来的,特别是DSP(没错,就是数字信号处理)技术的发展,数字调制中的FM有2FSK(2进制调制)、4FSK(4进制调制)、8FSK(8进制调制)等等。 由于在数字系统中,使用的是0、1表示的二进制数据,在这里,我使用了2FSK来作为信号的调制。 3.1 何为2FSK 2FSK按字面的英语全称是:2(binary system)Frequency-shift keying(二进制频移键控),就是用二进制里的0、1来控制载波的频率,从而达到通信的目的!例

21、如:我们用1ms长、1KHz的正弦信号来代表二进制里的1;用1ms长、2KHz的正弦来代表二进制里的0;那一连串的1KHz、2KHz的信号解调出来就是一连串的0和1,这样是不是达到了我们想要的二进制调制的目的了? 下面我们来看一张更加形像的gif动画图 3.2 android下实现2FSK(纯软件调制) 要实现2FSK,首先我们得在android系统下面获得一个基准的正弦信号发生器,有了这个基准的正弦信号发生器,只要给它一个二进制量(0 or 1),就可改变输出频率,从而达到我们想要的信号调制目的。 下面直接上图了,经过调制后的信号输出波形图:(黄色的是实际输出波型、红色方波是我后来P上去的对

22、应二进制数据) 这是我定义的通信协议头的一部分是:0x5AA5 3.3 android下音频播放相关 android下音频播放的基本步骤如下: 获取对应音频采样率下的最小缓冲区的大小 javaview plaincopyprint? 1. publicstaticintpwMinBufferSize=AudioTrack.getMinBufferSize(EncoderCore.getPowerSupplySamplerate(), 2. AudioFormat.CHANNEL_OUT_STEREO, 3. AudioFormat.ENCODING_PCM_8BIT); 新建AudioTrac

23、k javaview plaincopyprint? 1. AudioTrackpwAT=newAudioTrack(AudioManager.STREAM_MUSIC, 2. EncoderCore.getPowerSupplySamplerate(), 3. AudioFormat.CHANNEL_OUT_MONO, 4. AudioFormat.ENCODING_PCM_8BIT, 5. pwMinBufferSize*2, 6. AudioTrack.MODE_STATIC); 将缓冲区中的音频数据写入音频播放线程并设置左右声道音量等 javaview plaincopyprint?

24、1. pwAT.write(carrierSignal,0,EncoderCore.getPowerSupplyBufferSize();/写入音频数据 2. pwAT.flush();/刷新 3. pwAT.setStereoVolume(1,0);/设置左右声道播放音量 4. pwAT.setLoopPoints(0,EncoderCore.getPowerSupplyBufferSize(),-1);/设置音频播放循环点 5. pwAT.play();/开始播放 这部分代码是左声道对外部扩展头进行供电的,所以要设置循环播放,如果是发送消息就不必循环了!android音频口通信2FSK信号

25、解调一、解调电路 我的设计中,解调端用的是MSP430的单片机,因为TI这种系列的单片机功耗很低,在休眠状态下,电流可达到uA级,正常工作下电流也可以保持在几个mA级左右。 将手机右声道接至MSP430单片机的P2.3脚,在代码里设置并激活此引脚的第二功能(比较器0)的正向输入端,并将比较器0的反向输入端配置成内部VCC/2参考电压,如图,在手机右声道上用两个100K的电阻对VCC进行分压,所以只要右声道的电压在比较器导通的范围内变化时,比较器就能捕获到手机右声道上的信号了!下图是比较器的输出特性: 像上一节中的那种调制信号经过比较器之后的输出波形图如下: 二、解调原理 既然前面的调制信号是用

26、不同频率的波形来表示的,经过比较器之后,输出的波形如上图所示,很容易发现,这些宽窄有续的方波里就携带了我们想要的信息,然后再通过MSP430单片机里的捕获器来捕获这些方波信号 并用定时器来计算这些方波的时间,从而解调出我们前面调制的信号,从而获得码元。 解调方框图如下: 如何从手机音频口获得电能发布时间:2013-5-16如何从手机音频口获得电能 时下手机音频(耳塞)口的外设配件已不是什么新鲜事了。 目前应用最广的就是支付领域了,似乎Square公司在2011年就展开了移动支付业务,推出的刷卡支付方式受到的广泛的使用和好评,在短短的一年时间做出了惊人的成绩。现在国内也有很多厂商模仿退出类似产品

27、和服务。 Square的产品 国内的类似产品 从图上可以看出,这些个玩意儿只是利用了手机的耳塞插口,所以电源、通信都在一个耳塞插口。 这个项目Hijackhttp:/web.eecs.umich.edu/prabal/projects/hijack/是另外一个更好的应用耳塞插口的例子。 Hijack HiJack是一个硬件和软件平台,用来在小型、低耗电周边设备和iOS设备之间建立通信。该系统采用22kHz音频信号,将其转换为7.4mW电能(转化效率47%),可以带动一个TI MSP430微控制器和其它电子元件,允许HiJack和iOS应用进行通信。所有的资料都能在上面给的链接找到,有兴趣的可以

28、自己动手做一个。 本文就单独对如何从手机音频口获得电能做一个介绍。 下面是我的实验过程: 1. 手机的耳塞插孔简介 手机耳塞插孔线都是由四根线组成,也就是插头前面分成四部分,1和2是两路音频输出,这个对所有耳机插孔都是兼容的,极个别厂商也许会有例外?至少我没见过。因为普通的3根线的耳塞在那款设备上都可以用,普通耳塞的3、4两根线其实只有一根的,也就是上图中的3、4中间是没有隔开的,就是一跟底线GND。而手机的耳塞插孔3、4有一根是GND,还有一根则是麦克风MIC输入。这两根线好多厂商都不一样,比如iphone就是3对应GND,4是MIC;而我手头的索爱E15i和诺基亚E63则是3对应MIC,4

29、对应GND,华为C8812则跟iphone一样。 2. 电路 这是电路和对应的元器件型号表(价目都列出来了): J1接耳塞一路输出(另外一路还可以留作他用)。之后是一个升压变压器T1,因为输出的音频电压很低,甚至不能触发后面的FET导通,所以需要先升压。升压完了之后经过FET组成的桥整流电路,再经D1调整以后就得到直流输出。实际做电路的时候发现T1很难买,价格比起这个指导价巨贵,这个指导价是一万片的价格,另外Q1-Q4也不好买,就用了A3401和A3402代替。 做好以后像下面这样,ugly but works: 3. 实验 音频输出找了个Android simple frequency ge

30、nerator的软件,它可以调整输出频率和波形,结果发现输出16448HZ的方波的时候输出电压最大。其实是可以通过最佳匹配输入阻抗来计算这个频率值的,但是不清楚厂商的技术指标,所以直接试也是不错的办法,而且很方便。 华为手机能得到2.2v的电压,发光二接管亮了。 索爱的能得到2.8V。 Hijack的文档上说它在iphone能得到3.5v电压,不曾考究过。如果电压在2.2V-2.8V,可以加个charge pump来调整到3.3V。只要最后功率能达到驱动应用电路就可以了。 利用音频线与arduino进行通信 音频信号频率计发布时间:2013-5-16前言部分在多媒体电子设备中,音频设备是不可缺

31、少的。音频就是指我们人耳正常能听到的机械振动所对应的频率范围,一般在20Hz到20kHz之间。一般来说,机械振动发声(比如人的喉咙内的空气振动)通过介质传递到声音采集器中,然后使采集器产生相应的模拟信号,这些信号通过音频接口接入一个高质量的数模转换器(就电脑而言是是声卡),转成计算机或其它多媒体设备可以处理数字信号。而如果这些设备想复原声音,只需要将信号再次返回给数模转换器,重新转换成模拟信号,驱动音响等设备产生相应的机械振动,传到耳朵里就是声音了。说了这么多,听起来很枯燥。不过我们换个思路去思考,在这个音频的传递过程中,我们若把那些机械振动的采集和产生设备换成其他的我们想要的信号产生和接受装置,那么原则上我们是可以实现这些装置与电子设备的通信的,例如,电脑上的声卡可以帮助我们实现外部设备的拓展。我们将两个电子设备通过这一系列装置去连接,进而通信,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号