前言:
总觉得自己总结归纳能力不是那么强,所以抽空写些东西,就当笔记。
既然标题是音频基础就从声音的物理特性说起吧:
一. 声音的特性
1. 声音的产生: 声音是由于物体的震动产生,属于一种压力纵波。
2. 声波的三要素:频率,振幅,和波形,频率代表音调,振幅代表音量,波形代表音色。
1) 音调:音调也叫频率,频率越高,波长越短,低频波长比较长,衰减小,容易绕过障碍物,传播的也远。在车上面喇叭布局中低音扬声器往往设置在离人耳较远的地方,特别是低音炮放后备箱类似设计原理。
2) 音量: 就是震动的幅度,反应的是声音的响度,常用分贝来表示声音的响度。分贝:度量相同单位比例的一种计量单位,声学通过声压来计算 公式为L = 20*log10(P/P0) P0表示参考声压值通常取2*10-5 Pa,也是人耳能听到1kz最小的声压级。但是在实际应用中,人耳对不同频率的感知度不同,所以常以A加权分贝 dba,dBA 的测试需要使用专用的仪器。
3)音色:在相同的频率和声量下,由于物体发出的波形不同,就会产生不同音色。
模拟信号—>数字信号
模拟信号到数字信号需要经过采样—量化—编码步骤:
采样:采样就是在连续的时间内取样模拟信号的离散值。根据奈奎斯特定律,采样频率一般是信号带宽的2倍进行采样。
量化:采样后的联系离散值仍然是模拟信号,需要将这些离散值转化为数字形式。这个过程就是量化。其中软件开发应用中经常应用到的就是位深,其最大最小值就是量化范围。量化误差也随即而来。所以无损音质一般采用24bit量化编码。
编码:将量化后的抽样信号转换成二进制码流的过程。
PCM 数据量化指标:
采样率 位深 声道数
采样率:
位深: 决定音频精度
声道数:单声道 立体声 5.1 7.1.4 等
说到通道数:展开一下ALSA中的几个概念以及作用。
Sample:每个采样点占用多少个bit。也就是量化深度。
Period Size:每次硬件中断处理音频数据的Frame个数,
Frame:字面翻译就是一帧数据。这一帧数据的大小怎么规定的呢?涉及到之前提到的通道数和位深,拿双通道16bit的数据来算。Frame = 2*16 = 32bit = 4byte,(Frame = channel * sample)。
ALSA ringbuffer = period size * period conut
数据在alsa buffer中存在的形式:
底噪: 除有用信号以外的总噪声,来源主要是设备噪声和环境噪声。
其中设备噪声: 线路干扰,电源的引入,器件本身因温度变化产生的参数漂移等。
白噪: 在整个可听频率范围内,白噪声的能量分布是均匀的。所以在声学领域常用来做标定信号。
粉噪:低频部分的频率比高频部分的更高,呈现1/f的频率衰减特性。自然环境中的风声,雨声 特别是汽车行驶过的声音类似粉噪,貌似有种助眠法就是粉噪助眠法。在声学领域主要用来测试音响系统的频率响应特性。
传感器:俗称咪头,也就是麦克风。麦克风的类型有很多像电容式,驻极体麦克风,MEMS麦克风等。他的电性能技术指标主要有:
灵敏度,麦克风将升压信号转换为电信号的能力,灵敏度越高,对声音的响应也就越灵敏。
频率响应:麦克风对不同频率的声音接受的能力
指向性:麦克风对声音方向接收的特性,常见的有心形 超心形 全向等,不同场景所需要的麦克风指向型不同,一般KTV麦克风会使用超心型 车载语音识别选择全向。
输出阻抗: 麦克风输出阻抗和输入设备需要匹配才能有最佳的信号输入,如果不匹配会造成损失和失真等问题,低阻抗的麦克风能够提供更大的输出功率,较高阻抗麦克风传输过程中会有较大的线路衰减和降低信噪比。
最大声压级:表示麦克风能够接收的最大声压
瞬态响应: 麦克风捕捉瞬间声音变化的能力
信噪比: 信号和噪音的比例。
总的来说麦克风的选型对语音识别, ECNS很重要,
声强:
单位时间内通过垂直于声音传播方向上单位面积内的声音能量即声波的能量密度
声功率:
单位时间内声波通过垂直于声音传播方向上指定面积的声能量
声压:
受声波震动变化的声压与标准大气压的差
声压级:
见文章开头。
响度:
响度是心理学一个重要的参数,描述的是声音的响亮程度,表示人耳对声音的主观感受,响度也就是音量,其计量单位是宋,定义1khz,声压级为40db的纯音为1宋。
响度级:
反应人耳对声压和频率对声音做出的主观响度感受。
等响度曲线:
因为声音的频率不同,即使声压级相同,人耳对响度的主观感受也有所不同,为了描述人耳对声音响度的主观感受随频率变化的特性,提出了等响度曲线的概念。
动态范围:
设备能够处理最大信号和最小信号强度之间的范围;动态范围的上限是设备能够承受而不产生严重失真的最大声音强度。下限是设备能够检测到并有效处理的最小声音强度或者电信号强度,这个下限通常受到设备自身的噪声水平限制,对于音响设备,动态范围是一个非常重要的参数。特别是需要高保真和高品质音频表现的场合。
扬声器:
将电信号转换为声信号的换能器件。扬声器的好坏对音质有直接影响。软件调音只是修饰,过分的修音往往造成音质的干燥不耐听。
功放:
功率放大器------可以自行百度了解
DSP:
数字信号处理技术,DSP芯片指能够实现数字信号处理的专用芯片。
IIS: 传输音频的协议,具体的可以根据芯片说明手册了解支持的协议形式:如下:
再如ADI芯片IIS说明。
一般情况下IIS 在配置时word length都会选择32bit 有效数据位 16bit/24bit. 所以MCLOCK 在采样位48K 时配置为48K32slot(2)。
所以这个地方有个问题: 在我们硬件上如果IIS 通道数不够用了是否可以进行编码的方式配置IIS为24bit或者32bit,去传输16bit,或者其他位深的音频。按理论分析完全可行,但具体的还得看MAST SLAVE设备的编码需求。
TDM:
类似IIS,支持更多的音频通道传输。
类似IIS ,TDM也有很种协议,可以根据芯片说明自行了解。
A2B:
Automotive Audio Bus,以菊花链的方式链接,目前A2B麦克风使用也比较广泛。支持较多slot音频数据传输。
看到这里:一般音频的整个链路你已经了解了。接下来聊聊逻辑设备,以及音频界的瑞士军刀(ALSA)
ALSA:(Advance Linux Sound Architecture)
首先一张图看看ALSA的基本架构:
ASOC: ALSA System On Chip
TinyAlsa:
ALSA CORD----->PCM
snd_pcm_ops: 代码路径,、include/sound/pcm.h
alsa open prepare close write 等应用层API的调用会调到这个地方。通过snd_pcm_set_ops注册进PCM逻辑设备,可以看结构体snd_pcm_substream.ops;
ALSA CODEC-----Control
control 既可以是一个物理控件也可以是一个虚拟控件。
snd_kcontrol_new 定义一个新的control控件
snd_kcontrol control 实例
关于control 的具体使用下来会出一篇专门的文档介绍。
ALSA Driver
DMA:Direct Memory Access
DAI: Digitization Audio Interface
DAPM: Dynamic Audio Power Manager
DPCM: Dynamic PCM
Platform Driver 平台相关的代码如DMA CPU dai 等
Codec Driver 一般是DSP 相关代码或者使用使用ALSA 虚拟codec
Match Driver 设备相关 连接cpu dai 和code dai 注册声卡等操作,可以了解一下snd_soc_dai_link这个结构体的构造。
DPCM:
这个不过多介绍,查看内核说明文档
Dynamic PCM allows an ALSA PCM device to digitally route its PCM audio to
various digital endpoints during the PCM stream runtime. e.g. PCM0 can route
digital audio to I2S DAI0, I2S DAI1 or PDM DAI2. This is useful for on SoC DSP
drivers that expose several ALSA PCMs and can route to multiple DAIs.
The DPCM runtime routing is determined by the ALSA mixer settings in the same
way as the analog signal is routed in an ASoC codec driver. DPCM uses a DAPM
graph representing the DSP internal audio paths and uses the mixer settings to
determine the path used by each ALSA PCM.
暂且就到这~~~~~~~ 周末愉快 剩余的有空再写。