• 标准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。

  • 相关阅读:
    PMP考试终于结束了。。。
    干系人的管理
    设计业务时要兼顾实现方案的可行性和方案的可操作性
    办公室政治的问题
    SQL Server 2005/2008遍历所有表更新统计信息
    C1控件的破解步骤
    [七、项目实战]22开始制作一份网站访问量的统计页面
    [七、项目实战]17完成自定义弹出窗口的制作
    [七、项目实战]18给页面里的内容添加动画效果
    [七、项目实战]16利息支付方式设置界面的制作
  • 原文地址:https://www.cnblogs.com/Dreaming-in-Gottingen/p/11441842.html
Copyright © 2020-2023  润新知