标准pcm数据(正弦波、方波、三角波)解读

一年前写了一个demo,用于生成几种标准的波形,如正弦波、方波、三角波。以前写的只有这几个功能:波形/通道/时长/频率的控制选择,这几天抽了些时间又加了增益控制功能。为了不东西丢失或意外删除,特上传到github,有须要的能够本身下载验证。git

在测量板子信号时,咱们根据须要生成波形(wav封装),将获得的文件放到板子存储设备中进行播放。记得之前调试时都是找一个同事(一个好耍的憨厚朴实纯真的兄弟,名字叫jiawei)临时要的,然而数量毕竟有限,由于我可能须要不一样采样率/通道/增益/频率组合的信号。。。github

下面结合git仓库中的CStandardWaveGenerator和Adobe Audition来介绍声音的一些概念。像声道、采样率、增益、频率、时长等概念。之后有时间了再另起博文补充傅里叶变换,利用这个demo生成所须要的信号源。spa

 

示例介绍调试

生成信号:正弦波 + 时长100ms + 周期10ms(频率100Hz) + 单声道 + 8k采样率 + 单声道 + 6dBblog

执行命令:./StandardWaveGenerator.exe 0 100 10 8000 1 -6get

附带信息:get sin.wav with sample_rate=8000, channle=1, duration=100 ms, period=10 ms, gain=-6 dB, pcmLen:1600it

获得文件sin.wav,用Audition解读:io

 

 

信号解读音频

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。

相关文章
相关标签/搜索