通信建立的基础——耳机线上传输的信号

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

    下面我们来看看市面上常见的耳机座(公头)的引脚定义,android手机上用的耳机大多都是3.5mm的四芯座,在这四个芯中,分别是:地、左声道、右声道和线控开关(MIC),而这四芯的排列常见的有如下两种:

1、国家标准


2、国际标准

   国际标准耳机座MIC和GND和国内标准是反的,其它的一样!

不难发现有了左右声道,向外设扩展头供电和发送数据就有了相应通信线路的支持,另外有了MIC这个打电话时输入说话的信号通道,那么手机接收数据也有了硬件通道的支持了!

三、如何调制数据

   说到信号的调制解调,很多人都会想到收音机,没错,收音机之所以能听到千里之外的歌声,正是利用了电磁波作为传输媒介,将声源的信号通过特定的调制加载到电磁波上,然后传输到广阔的空间里的,无线电的调制有调幅(AM)、调频(FM)和调相(PM)三种,而调制又有模拟调制和数字调制之分,模拟调制就是把模拟信号(比如人说话的声音)直接加载到电磁波上,使得电磁波的某一特性随着声源的变化而变化;而数字调制是近现才发展起来的,特别是DSP(没错,就是数字信号处理)技术的发展,数字调制中的FM有2FSK(2进制调制)、4FSK(4进制调制)、8FSK(8进制调制)等等。

   由于在数字系统中,使用的是0、1表示的二进制数据,在这里,我使用了2FSK来作为信号的调制。

3.1 何为2FSK

    2FSK按字面的英语全称是:2(binary system) Frequency-shift keying(二进制频移键控),就是用二进制里的0、1来控制载波的频率,从而达到通信的目的!例如:我们用1ms长、1KHz的正弦信号来代表二进制里的1;用1ms长、2KHz的正弦来代表二进制里的0;那一连串的1KHz、2KHz的信号解调出来就是一连串的0和1,这样是不是达到了我们想要的二进制调制的目的了?

下面我们来看一张更加形像的gif动画图


3.2 android下实现2FSK(纯软件调制)

   要实现2FSK,首先我们得在android系统下面获得一个基准的正弦信号发生器,有了这个基准的正弦信号发生器,只要给它一个二进制量(0 or 1),就可改变输出频率,从而达到我们想要的信号调制目的。

   下面直接上图了,经过调制后的信号输出波形图:(黄色的是实际输出波型、红色方波是我后来P上去的对应二进制数据)


    这是我定义的通信协议头的一部分是:0x5AA5

3.3 android下音频播放相关

    android下音频播放的基本步骤如下:

①获取对应音频采样率下的最小缓冲区的大小

[java] view plaincopyprint?
  1. public static int pwMinBufferSize = AudioTrack.getMinBufferSize(EncoderCore.getPowerSupplySamplerate(),
  2. AudioFormat.CHANNEL_OUT_STEREO,
  3. AudioFormat.ENCODING_PCM_8BIT);

②新建AudioTrack

[java] view plaincopyprint?
  1. AudioTrack pwAT = new AudioTrack(AudioManager.STREAM_MUSIC,
  2. EncoderCore.getPowerSupplySamplerate(),
  3. AudioFormat.CHANNEL_OUT_MONO,
  4. AudioFormat.ENCODING_PCM_8BIT,
  5. pwMinBufferSize*2,
  6. AudioTrack.MODE_STATIC);

③将缓冲区中的音频数据写入音频播放线程并设置左右声道音量等

[java] view plaincopyprint?
  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();//开始播放

这部分代码是左声道对外部扩展头进行供电的,所以要设置循环播放,如果是发送消息就不必循环了!
    信号的调制就到这里,下一节将分享2FSK信号的解调。

示例源码下载地址:http://download.csdn.net/detail/xl19862005/5016843

最新变种版调制解调 apk

http://download.csdn.net/download/xl19862005/5333232


通信建立的基础——耳机线上传输的信号相关推荐

  1. 计算机课程线下,计算机应用基础课程线上与线下混合教学优化方案

    黎荣振 摘 要 在计算机应用基础课程教学中应用线上与线下混合教学模式其不仅符合当代学生的需求,还有利于打破传统教学方式的弊端,弥补其存在的不足,扩大了学生获取知识的渠道,促进学生综合能力和综合素养的提 ...

  2. ai建立使用图案_线上课程 | PS/AI时装效果图在线课程

    只要涉猎设计方向的学习和工作,相信没有人会对PS和AI感到陌生,服装设计作为设计中的分支,PS和AI在职场和学习中的应用更是普遍. 使用电脑软件进行设计创意的表达已经是当代设计职场人必不可缺的常备技能 ...

  3. altium 网口差分走线长度_差分信号的优缺点及布线要求

    在高速 PCB 设计中,差分信号的应用越来越广泛,这主要是因为和普通的单端信号走线相比,差分信号具有抗干扰能力强.能有效抑制EMI.时序定位精确的优势.作为一名(准)PCB 设计工程师,我们当然需要充 ...

  4. 湖北工程学院计算机基础实验报告,学院圆满举行2019级《计算机应用基础》 第一批线上测试试点工作...

    3月20日晚上19:00,信息与设备工程学院第一批<计算机应用基础>线上测试试点分为两个考试班,同步进行测试试点,取得了圆满成功.教务处副处长岳晓瑞.市政工程学院副书记陈继华,信息与设备工 ...

  5. RFID 基础/分类/编码/调制/传输

    不同频段的RFID产品会有不同的特性,本文详细介绍了无源的感应器在不同工作频率产品的特性以及主要的应用. 目前定义RFID产品的工作频率有低频.高频和甚高频的频率范围内的符合不同标准的不同的产品,而且 ...

  6. 谷歌用AI训练“耳机线”,实现了触摸屏大多数功能

    梅宁航 发自 凹非寺  量子位 报道 | 公众号 QbitAI 谷歌在开发可穿戴设备上从未停歇,比如和李维斯合作推出的智能夹克衫Commuter Trucker. 衣服上的袖口加装一块传感器,用户可以 ...

  7. 重磅开源:阿里妈妈技术质量开源了线上测试MagicOTP和性能测试平台ACP

    阿里QA导读:阿里妈妈技术质量团队正式开源了线上测试平台MagicOTP和性能测试平台ACP,开发者们可以在Github上自主下载. 2020年4月7日,阿里妈妈技术质量团队开源了线上测试平台Magi ...

  8. [毕业设计]基于springboot线上教学平台的管理系统

    课题背景 2021年处于信息科技高速发展的大背景之下.在今天,缺少手机和电脑几乎已经成为不可能的事情,人们生活中已经难以离开手机和电脑.针对增加的成本管理和操作,各大网站非常有必要建立自己的网上线上教 ...

  9. java/php/net/python线上歌唱比赛报名系统设计

    本系统带文档lw万字以上+答辩PPT+查重 如果这个题目不合适,可以去我上传的资源里面找题目,找不到的话,评论留下题目,或者站内私信我, 有时间看到机会给您发 管理员用例图 系统中的核心用户是系统管理 ...

最新文章

  1. VS+MFC+Opencv显示视频和图像。
  2. asp实现UNIX时间戳功能
  3. VS Code 1.29 发布,众多新功能有没有你想要的?
  4. shell中join链接多个域_Linux Shell中使用awk完成两个文件的关联Join
  5. 101. Leetcode 139. 单词拆分 (动态规划-完全背包)
  6. 工具 - MyEclipse算法机最新8.6forSpring有效
  7. 题目3:文本文件单词的检索与计数(实验准备)
  8. P1080 国王游戏(贪心)
  9. vuex modules 命名空间
  10. iframe 自适应高度 跨域
  11. 算法讲解 -- 二分图之 匈牙利算法
  12. java单元格合并多列_ElementUI表格列相同值自动合并单元格( 多列 )
  13. java post返回xml数据类型_Java 通过HttpURLConnection Post方式提交xml,并从服务端返回数据...
  14. JSON.parse()函数处理json格式字符串方法
  15. 计算机二级数据库系统知识点,2020年全国计算机二级Access复习知识点:分布式数据库系统...
  16. C#学习笔记——.NET
  17. unix系列系统镜像下载
  18. 华为NP课程笔记14-PIM-SM和SPT切换
  19. Git 可视化管理工具 - Sourcetree 使用指南
  20. 计算机操作员管理规定,系统安全运行管理制度及保障措施

热门文章

  1. Oracle 存储过程,Hibernate 调用存储过程,JDBC调用存储过程,Oracle 动态SQL
  2. t3选择完服务器后提示未响应,T3 老是出现未响应 卡住
  3. iOS框架和服务知识点
  4. Swiper6的基本使用
  5. AGV小车典型设计算法及应用
  6. 如何设置utorrent只走ipv6流、不走ipv4流量
  7. 案例教学 | 如何确定ADAMS简化模型的准确性,以及简化模型精度不够怎么办?
  8. Unity 之大屏幕多点触控插件 TouchScript 9.0 入门指南(上)
  9. ArtistV1——艺术家V1[STM32F1 | 写字机 | GRBL | LVGL | WIFI]
  10. 字节跳动再“进攻”印度市场,口碑本就不尽人意,这次会顺利吗?