声波传输信息的研究

本文记录在学习声波传递信息技术过程中的点滴。用过支付宝当面付的同学都知道,当面付其实是传递的一个用户的编码,个人理解为后台实时产生的关联用户ID的唯一编号(实时有效)。

声波调制解调涉及信号处理技术,本文中涉及到概念解释均为个人理解,不正确的地方望纠正。

先来看两个概念:

时域--->真实存在的,描述事物按时间顺序变化的过程,也是人们认识事物变化的一般参考系。

频域--->是一个数学构造域,便于人们研究事物随频率变化的过程,是人们对事物本质规律一种标识系。

为了便于对信号的处理,人们将原本不好处理的时域信号转换为频域,这也就是频域的作用。

声波传递信息,我们需要把信息变成声音数据,通过扬声器对外发出。

第一步:信息是什么?

我们先来传输数字(1,2....),信息既是数字。我们如何用声音来表示呢?我们知道音乐中的表示方法,比如国际标准音6就是“La”,对应的频率就是440HZ,好了,那我们就用这个国际音标对我们的信息进行编码,我们采用高音进行编码。


音符


频率Hz


周期μs


低1Do


262


3816


低2Re


294


3401


低3Mi


330


3030


低4Fa


349


2865


低5So


392


2551


低6La


440


2272


低7Si


494


2024


高1Do


1047


955


高2Re


1175


851


高3Mi


1319


758


高4Fa


1397


751


高5So


1568


637


高6La


1760


568


高7Si


1967


508

知道要传递的信息实质是一连串特定频率了就好办了。

第二步:如何把信息变成声音数据?

现在开始定义一个声音,声音就是一连串特定频率波形(自然界中是各种频率叠加后的波形),在时域里可以理解为质点随时间的做特定频率的上下运动。接下来看一下Android中声音的播放类AudioTrack(http://developer.android.com/reference/android/media/AudioTrack.html),以下是他的构造函数:

publicAudioTrack(int streamType, int sampleRateInHz, int channelConfig, intaudioFormat, int bufferSizeInBytes, int mode)

参数说明:


streamType


the type of the audio stream. See STREAM_VOICE_CALLSTREAM_SYSTEMSTREAM_RINGSTREAM_MUSICSTREAM_ALARM,
andSTREAM_NOTIFICATION.


sampleRateInHz


the initial source sample rate expressed in Hz.


channelConfig


describes the configuration of the audio channels. See CHANNEL_OUT_MONO and CHANNEL_OUT_STEREO


audioFormat


the format in which the audio data is represented. See ENCODING_PCM_16BIT and ENCODING_PCM_8BIT,
and ENCODING_PCM_FLOAT.


bufferSizeInBytes


the total size (in bytes) of the buffer where audio data is read from for playback. If using the AudioTrack in streaming mode, you can write data into this buffer in smaller chunks than this size. If using the AudioTrack
in static mode, this is the maximum size of the sound that will be played for this instance. See getMinBufferSize(int,
int, int)
 to determine the minimum required buffer size for the successful creation of an AudioTrack instance in streaming mode. Using values smaller than getMinBufferSize() will result in an initialization failure.


mode


streaming or static buffer. See MODE_STATIC and MODE_STREAM

这些数据只需要设定就可以了:

a>1参数设定播放类型为STREAM_MUSIC

b>2设定采样频率为44.1k既44100HZ

c>3设定输出声道为单个声道CHANNEL_OUT_MONO

d> 设定音频位深度为ENCODING_PCM_16BIT

e> 设定存储audio data缓冲区的大小

f> 设定为MODE_STREAM流的方式

MODE_STREAM对应AudioTrack播放方法:

public intwrite(short [] audioData, int offsetInBytes, int sizeInBytes)


audioData


the array that holds the data to play.


offsetInBytes


the offset expressed in bytes in audioData where the data to play starts.


sizeInBytes


the number of bytes to read in audioData after the offset.

a>   音频数据buffer

b>   播放偏移

c>   写入buffer的大小

我们传递1,2,3,4,5,6,7下面是程序中需要的一系列变量:

根据AudioTrack的参数,生成数据。

第三步:采集音频数据,呵呵常说的录音AudioRecord (http://developer.android.com/reference/android/media/AudioRecord.html)

public AudioRecord (int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes)

Added in API level 3

Class constructor. Though some invalid parameters will result in an IllegalArgumentException exception,
other errors do not. Thus you should call getState()immediately
after construction to confirm that the object is usable.

Parameters
audioSource the recording source (also referred to as capture preset). See MediaRecorder.AudioSource for
the capture preset definitions.
sampleRateInHz the sample rate expressed in Hertz. 44100Hz is currently the only rate that is guaranteed to work on all devices, but other rates such as 22050, 16000, and 11025 may work on some devices.
channelConfig describes the configuration of the audio channels. See CHANNEL_IN_MONO and CHANNEL_IN_STEREOCHANNEL_IN_MONO is
guaranteed to work on all devices.
audioFormat the format in which the audio data is represented. See ENCODING_PCM_16BIT and ENCODING_PCM_8BIT
bufferSizeInBytes the total size (in bytes) of the buffer where audio data is written to during the recording. New audio data can be read from this buffer in smaller chunks than this size. See getMinBufferSize(int,
int, int)
 to determine the minimum required buffer size for the successful creation of an AudioRecord instance. Using values smaller than getMinBufferSize() will result in an initialization failure.

比较简单,读取到预先设定的buffer里就好了。

第四步:也就是关键步骤,对第三步中读取的数据进行FFT,到的信号的频率,根据频率值去对应我们第一步中所说的音频标准中,取得数据。

至此声波传递信息的步骤的做了记录。我的代码,非常粗糙,由于设置的阀值比较高,传输距离比较短。

纸上得来终觉浅,绝知此事要躬行,有兴趣可以自己试试。

时间: 2024-08-04 19:32:36

声波传输信息的研究的相关文章

【转载】声学——科学、技术与艺术

声学是一门具有广泛应用性的学科,涉及到人类生产.生活及社会活动的各个方面:同时声学又是一门具有很强交叉渗透性的学科,与各种新学科.新技术相互作用,相互促进,不断地吸收.应用和发展新的思想,增强了声学的生命力.竞争力和学术与艺术魅力.本文从科学.技术与艺术等几个方面,介绍了声学的学科发展,特别是在科学与技术上的新的研究方向与进展. 一.声学的基本概念 声和音 讲到声学,当然首先就要讲什么是声音.所谓声,实际上有双重的含义,我们一般地理解,人的耳朵能够感觉到的声波的作用就称之为声,这么说大家都懂:但

Android手机之间通过声音传输信息方法——声波通信(含工程代码)

大家可能都用过支付宝的声波支付,即两个终端同时打开该功能,一个终端作为发送端send,一个终端作为接收端get,send将本终端上发出的请求信息按照约定规则的算法进行声音编码,并播放出来,get端接收到send发来的声音数据,按照约定规则进行解码,即获得了相应的信息. 原理如上,其实很简单,就是用单频率声音信号对数据进行编码,然后播放这些单频率声音,接收方在收到声音后,识别出频率,然后根据频率解码出数据. 最简单的方法就是把0-9赋予特定的频率,将需要传输的数据转成十进制的数,分别赋予特定的频率

水下通信技术的分类、特征、应用及其最新研究进展

海洋覆盖着地球三分之二的表面积,它是人类探索和研究的最前沿的领域之一.海洋不仅在国际商业和渔业中扮演重要的角色,而且还包含了有关气候的信息,以及大量急待开发的资源. 水下无线通信是研制海洋观测系统的关键技术,借助海洋观测系统,可以采集有关海洋学的数据,监测环境污染,气候变化海底异常地震火山活动,探查海底目标,以及远距离图像传输.水下无线通信在军事中也起到至关重要的作用,而且水下无线通信也是水下传感器网络的关键技术. 水下无线通信主要可以分成三大类:水下电磁波通信.水声通信和水下量子通信,它们具有

[从头学声学] 第202节 复合的声波(1)

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进行着声学神通的修炼. 这次要研究的是[复合的声波(1)]. 正剧开始: 星历2016年05月02日 16:31:19, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起研究[复合的声波(1)]. 从这节开始,[机器小伟]要细细地研究各种声波,知识并不多, 声音这东西,当然要多听啦. 复合波大致就长这样. if (1) { var r = 20; config.setSector(1,1,1,1); config.graph

黑客可以使用声波和超声波信号来破坏硬盘

中国知名黑客安全组织东方联盟研究人员已经证明,只有通过目标计算机内置扬声器播放超声波声音或通过利用目标设备附近的扬声器,声波和超声波信号(对人类听不见)才能用来造成硬盘驱动器的物理损坏. 近日,东方联盟黑客安全人员进行了类似的研究,他们通过利用一种称为声共振的物理现象来证明对HDD的拒绝服务(DoS)攻击.由于硬盘受到外部振动的影响,研究人员展示了特制音响信号如何引起硬盘内部组件严重震动,最终导致依赖硬盘的系统出现故障.为了防止声音共振造成头部碰撞,现代硬盘驱动器使用震动传感器驱动的前馈控制器,

“网易声波”的上架或将引起新的语音直播源码潮流

美股研究社消息,据腾讯科技独家报道,酷传数据显示,11月12日,网易最新上线了一款社交软件"声波",开发商为网易(杭州)网络有限公司.据悉,"声波"是一款主打语音交友的陌生人社交软件,核心功能包括用户可加入或自建多人语聊房.礼物打赏和匿名社交.目前产品还处在初期,部分功能尚不稳定.目前,许多公司正在社交领域进行进一步的探索,不断在细分领域推出新产品以期望抢先占领市场.而随着动漫.电台等的火热,以及AI技术.声鉴技术的发展,声音也越来越受到年轻一代的欢迎,语音社交也逐

Google帝国研究——Google的产业构成

                                                                                    Google帝国研究--Google的产业构成 摘要:Google帝国研究  产业构成 作者:魏春颖 文章来源:网络整理 Google产业的构成: 1.    业务板块: 包括互联网搜索.云计算.广告技术,开发并提供大量基于互联网的产品与服务,开发线上软件.应用软件,还涉及移动设备的Android操作系统以及操作系统谷歌Chrom

今天研究了一下手机通信录管理系统(C语言)

题目:手机通信录管理系统 一.题目要求 二.需求分析 三.设计步骤/编写代码 四.上机/运行结果 五.总结 一.题目要求 模拟手机通信录管理系统,实现对手机中的通信录进行管理操作.功能要求: (1)查看功能:A:办公,B:个人,C:商务 (2)增加联系人:录入新数据(姓名,电话,分类,邮箱:weiyang,153********,个人,[email protected]) (3)修改功能:选中某人的姓名,可对其数据进行修改操作 (4)删除功能:选中某人姓名,可对此人的相应数据进行删除,并自动调整

tablib.Dataset()操作exl类型数据之“类方法”研究

#tablib.Dataset()操作exl类型数据之“类方法”研究 import tablib #初始化 data=tablib.Dataset() #设置列标题 data.headers=('name','where') some_collector=[('xiaodeng','enshi'),('xiaoming','hubei'),('xiaodong','enshi')] #写入数据 for key,value in some_collector: data.append((key,v