声音采集
将ADC的值编码成可播放的WAV
记录一些基础知识和原理
声音
声音(sound)是由物体振动产生的声波,作为一种波,频率在20Hz~20kHz之间的声音是可以被人耳识别的。
语音编码
原理
有一定电子基础的都知道传感器采集音频信号是模拟量,而我们实际传输过程中使用的是数字量。而这就涉及到模拟转数字的过程。 而模拟信号数字化必须经过三个过程,即抽样、量化和编码,以实现话音数字化的脉冲编码调制(PCM,Pulse Coding Modulation)技术。
抽样(Sampling)
抽样是把模拟信号以其信号带宽2倍以上的频率提取样值,变为在时间轴上离散的抽样信号的过程。
采样率 (sample)
每秒从连续信号中提取并组成离散信号的采样个数,用赫兹(Hz)来表示。
量化(quantizing)
抽样信号虽然是时间轴上离散的信号,但仍然是模拟信号,其样值在一定的取值范围内,可有无限多个值。 显然,对无限个样值一一给出数字码组来对应是不可能的。为了实现以数字码表示样值,必须采用“四舍五入”的方法把样值分级“取整”,使一定取值范围内的样值由无限多个值变为有限个值。 这一过程称为量化。
量化噪音
量化后的抽样信号与量化前的抽样信号相比较,当然有所失真,且不再是模拟信号。 这种量化失真在接收端还原模拟信号时表现为噪声,并称为量化噪声。 量化噪声的大小取决于把样值分级“取整”的方式,分的级数越多,即量化级差或间隔越小,量化噪声也越小。
采样位数
指的是描述数字信号所使用的位数。 8位(8bit)代表2的8次方=256,16 位(16bit)则代表2的16次方=65536; 采样位数越高,精度越高。
编码(Coding)
量化后的抽样信号就转化为按抽样时序排列的一串十进制数字码流,即十进制数字信号。 简单高效的数据系统是二进制码系统,因此,应将十进制数字代码变换成二进制编码。 根据十进制数字代码的总个数,可以确定所需二进制编码的位数,即字长(采样位数)。 这种把量化的抽样信号变换成给定字长的二进制码流的 过程称为编码。
一些概念
采样频率
人对频率的识别范围是 20HZ - 20000HZ, 如果每秒钟能对声音做 20000 个采样, 回放时就足可以满足人耳的需求。
- 8000hz 为电话采样。
- 22050 的采样频率是常用的。
- 44100已是CD音质, 超过48000的采样对人耳已经没有意义。
采样位数
每个采样数据记录的是振幅, 采样精度取决于储存空间(采样位数)的大小。
- 1 字节(也就是8bit) 只能记录 256 个数, 也就是只能将振幅划分成 256 个等级。
- 2 字节(也就是16bit) 可以细到 65536 个数, 这已是 CD 标准了。
- 4 字节(也就是32bit) 能把振幅细分到 4294967296 个等级, 实在是没必要了。
如果是双声道(stereo), 采样就是双份的, 文件也差不多要大一倍。
比特率
码率,是指经过编码后的音频数据每秒钟需要用多少个比特来表示。
有损和无损
对于我们最常说的“无损音频”来说,一般都是指传统CD格式中的16bit/44.1kHz采样率的文件格式。 而之所以称为无损压缩,也是因为其包含了20Hz-22.05kHz这个完全覆盖人耳可闻范围的频响频率而得名。
PCM 音频编码
PCM信号未经过任何编码和压缩处理(无损压缩)。 与模拟信号比,它不易受传送系统的杂波及失真的影响。动态范围宽,可得到音质相当好的效果。编码上采用A律13折线编码。
A律13折线
A律是PCM非均匀量化中的一种对数压扩形式。数字脉冲编码调制(PCM)是目前模拟信号数字化的基本方法,PCM包括采样、量化、编码三个步骤。 其中量化是对抽样值的取值离散,根据量化间隔的不同选取分为均匀量化和非均匀量化,非均匀量化可以有效地改善信号的量化信噪比。 语音信号的量化常采用ITU建议的两种对数形式的非均匀量化压缩特性:A律和μ律,A律编码主要用于30/32路一次群系统, A律PCM用于欧洲和中国。
声道
声道可以分为单声道和立体声(双声道)。PCM的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数。
首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,这样8位和16位的PCM波形样本的数据格式如下所示。
总结
通过ADC读取16位的一个字节数据,以小段模式单声道存储,最后加上wav头就可以播放。
STM32为12位ADC
读取到的数据需要经过转换。 设x为读到的数据。将其转换为16位数据。
x/2^12*2^16(未化简)
例子代码的wav头(未验证)