标准pcm数据(正弦波、方波、三角波)解读
一年前写了一个demo,用于生成几种标准的波形,如正弦波、方波、三角波。之前写的只有这几个功能:波形/通道/时长/频率的控制选择,这几天抽了些时间又加了增益控制功能。为了避免东西丢失或意外删除,特上传到github,有需要的可以自己下载验证。
在测量板子信号时,我们根据需要生成波形(wav封装),将得到的文件放到板子存储设备中进行播放。记得以前调试时都是找一个同事(一个好耍的憨厚朴实纯真的兄弟,名字叫jiawei)临时要的,然而数量毕竟有限,因为我可能需要不同采样率/通道/增益/频率组合的信号。。。
下面结合git仓库中的CStandardWaveGenerator和Adobe Audition来介绍声音的一些概念。像声道、采样率、增益、频率、时长等概念。以后有时间了再另起博文补充傅里叶变换,利用这个demo生成所需要的信号源。
示例介绍
生成信号:正弦波 + 时长100ms + 周期10ms(频率100Hz) + 单声道 + 8k采样率 + 单声道 + 6dB
执行命令:./StandardWaveGenerator.exe 0 100 10 8000 1 -6
附带信息:get sin.wav with sample_rate=8000, channle=1, duration=100 ms, period=10 ms, gain=-6 dB, pcmLen:1600
得到文件sin.wav,用Audition解读:

信号解读
1.单双声道(channel)
这个通俗讲,你用几个mic去采集信号。如果是双声道,则上图有两个波形。双声道每次采样数据量为:2chn * 16bit(s16le) = 4Bytes
2.采样频率(sample_rate)
这个要与信号频率(周期信号的频率)做下区别。这个是指:每秒钟的采样次数。
就如上面示例图示,采样频率是8k,代表着1s内进行了8000次采样,而只保留了100ms的信号,因此数据量大小:8000 * 2Bytes * (100/1000) = 1600Bytes,从命令输出信息也可看到。
3.时长(duration)
这个文件的时间长度,示例中是100ms
4.信号频率/信号周期(frequence/period)
这个值代表信号多长时间后又开始重复,上面示例中使用了这个“period=10 ms”来控制,即T=10ms,那么f=1/T=100Hz,从图示下半部分可以看出信号的频率是100(明显的一条黄带)。
5.增益(gain)
这个可以表示声音的响度,其具体含义是信号与某一个值对比:20lg(V1/V2),在音频里则与最大值V2=215=32768进行对比,那么-6dB的信号可以算出来其值为:214=16384
例如,如果我们从文件中去找出最大值是多少来确认是否属实,可以按以下这么操作:
step1. 半波最大pcm值采样序号:10ms * (1/4) / 1000ms * 8000 = 20
step2. 在文件中的offset:44 + 20*2 = 84 = 0x54,其中44为wav_header,20*2中的2代表每次采样的2Bytes
step3. 用winhex进行查找(alt+g):得到 25 40

step4. 25 40代表值多少呢?由于存储格式为S16LE,S(signed)代表有符号,LE(little endian)为小端存储(先存低字节,再存高字节),那么这个采样值为0x4025 = 16421,大体上接近理论值16384。
标准pcm数据(正弦波、方波、三角波)解读的更多相关文章
- 002_89C52_Proteus_DAC0832_输出50HZ,正弦波,三角波,矩形波,锯齿波
(一)非常感谢:89C51与ad0832 输出正弦波,三角波,矩形波,锯齿波 (二)在上面的情况下进行程序的修改,实现50HZ的输出 (三)电路图 (三)输出方波 (四)输出锯齿波 (五)输出三角波 ...
- 几种比较经典的波形及其FFT变换(正弦波,三角波,方波和锯齿波)
之前上学时我的信号学得最差了,主要原因还是我高数学得不怎么样.可能是人总敬畏自己最不会的,所以我觉得我学过诸多科目中,数学是最博大精深而最妙的,从最开始的一次函数到反比例函数,二次三次函数和双曲线,椭 ...
- 多媒体基础知识之PCM数据《 转》
多媒体基础知识之PCM数据 1.什么是PCM音频数据 PCM(Pulse Code Modulation)也被称为脉冲编码调制.PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样.量化 ...
- 多媒体基础知识之PCM数据
1.什么是PCM音频数据 PCM(Pulse Code Modulation)也被称为脉冲编码调制.PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样.量化.编码转换成的标准的数字音频 ...
- [转]directsound抓取麦克风PCM数据封装类
网上有很多方法从麦克风读取PCM数据,不想一一举例.只是在这里发布一个我自己写的directsound的麦克风PCM数据采集类,通过它,可以很方便的利用directsound技术把麦克风的数据采集到, ...
- wav格式文件、pcm数据
wav格式文件是常见的录音文件,是声音波形文件格式之一,wav 文件由文件头和数据体两部分组成. 文件头是我们在做录音保存到文件的时候,要存储的文件的说明信息,播放器要通过文件头的相关信息去读取数据播 ...
- 【EMV L2】DDA标准动态数据认证处理流程
[标准动态数据认证DDA] 标准动态数据处理过程,除了动态签名由卡片生成以外,其他都是由终端执行的.处理过程: 1.认证中心公钥的获取终端使用认证中心公钥索引(PKI)以及卡片中的注册的应用提供商标识 ...
- 音频 PCM 数据的采集和播放
PCM(Pulse Code Modulation)脉冲编码调制 —— 音频的采集与量化过程. PCM数据是最原始的音频数据完全无损,所以PCM数据虽然音质优秀但体积庞大. 为了解决这个问题先后诞生了 ...
- pcm数据生成wav文件
Qt由pcm数据生成wav文件 void AudioGrabber::saveWave(const QString &fileName, const QByteArray &raw, ...
随机推荐
- 2015.11.10 asn1学习笔记
Openssl : OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. 在OpenSSL被曝出现严 ...
- MicroPython TPYBoard v201 简易家庭气象站的实现过程
转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 前言 上一篇教程中我们实现了一个简单网页的显示.本篇 ...
- TestNg中的断言你真的了解吗
前言 在执行自动化测试脚本的时候,我们需要自动判断测试脚本执行完成后的实际结果是否与预期结果一致,这个时候就需要在程序运行之前写入断言,判断当前程序执行后是否正常. 关于TestNG断言分为两种: 软 ...
- MapReduce 编程模型 & WordCount 示例
学习大数据接触到的第一个编程思想 MapReduce. 前言 之前在学习大数据的时候,很多东西很零散的做了一些笔记,但是都没有好好去整理它们,这篇文章也是对之前的笔记的整理,或者叫输出吧.一来是加 ...
- 用python twilio模块实现发手机短信的功能
前排提示:这个模块不是用于对陌生人进行短信轰炸和电话骚扰的,这个模块也没有这个功能,如果是抱着这个心态来的,可以关闭网页了 语言:python 步骤一:安装twilio模块 pip install t ...
- zookeeper中的分布式一致性协议
1. zookeeper中的一致性协议-ZAB协议 在深入了解ZK之前,相信很多同学都会认为ZK就是Paxos算法的一个实现.但事实上,ZK并没有完全采用Paxos算法,而是使用了一种称为ZooKee ...
- 通过wireshark学习Traceroute命令和mtr(UDP,ICMP协议)
traceroute: 通过TTL限定的ICMP/UDP/TCP侦测包来发现从本地主机到远端目标主机之间的第三层转发路径.用来调试网络连接性和路由问题. mtr: traceroute的一个变种,能根 ...
- 解决树莓派烧录系统后没有boot文件,只出现盘符问题
首先,如果下图情况,说明你没有烧录好,继续向下看 放一张安装成功的图片 出现这个的原因是因为前期没有烧录好,它会回滚到img文件中,如果中途退出,它会写入到img文件中 正确文件大小(Raspbian ...
- 【KakaJSON手册】01_JSON转Model_01_基本用法
在iOS开发中,后台返回的数据大多是JSON格式,对应地会被网络框架层解析成Swift中的Dictionary.Array.由于数据类型的复杂.字段的繁多,直接使用Dictionary.Array会比 ...
- React Native 混合开发与实现
关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 随着 React 的盛行,其移动开发框架 React Native 也收到了广大开发者的青睐,以下简 ...