0%

【音频】嵌入式之音频开发知识概述


前言

未完待续…

以一个嵌入式音频新人的角度,对日常的嵌入式音频知识作系统总结。

嵌入式开发之音频知识概述

音频之本质概述

正弦波是最简单的周期性信号之一,其数学表达式非常简单,如下:

y(t)=Asin(2πft+ϕ)

其中:
y(t) 是正弦波在时间 t 处的值。
A 是振幅,表示波形的最大振动幅度。
f 是频率,表示波形的周期性变化次数。
ϕ 是相位,表示波形在时间轴上的偏移。

正弦波是分析和合成其它信号的基础,因为所有的复杂信号、波形都可以看作为由不同的正弦波叠加而成。(傅里叶变换可以将波形信号分解为一系列的正弦波)

模拟信号->声音的过程: 音频在模拟信号中表现为一个随时间变化的电压波形,该电压波形输出到喇叭(喇叭内部有音圈),会产生电流的变化,从而产生变化的磁场,使得音圈产生相应的振动;音圈的振动带动了振膜振动,在空气中形成了压力波,即声波。

声音->模拟信号的过程: 声波传播使得麦克风内的声学敏感元件振动,这些振动即反映了声波的频率和幅度等。通过线圈、振膜、压电材料、电容器等,将机械振动波形转化为电压的变化波形,此即初始的模拟信号。可能需要麦克风内的放大器进行放大,再传输到模数转换器,被进一步转换为数字信号,便于存储、传输、或者数字处理。


模拟信号->数字信号:

  1. 采样:采样频率至少应为信号最高频率的两倍
  2. 量化:采样后的信号在幅度上被分割为有限数量的级别。每个采样值被近似到最接近的级别,这个过程称为量化。量化精度决定了数字信号的比特深度,通常为8、16、24或32比特。
  3. 编码:量化后的样本值被转换为数字代码,通常是二进制形式,以便于存储和传输

数字信号->模拟信号:

  1. 解码:
  2. 插值:由于数字信号是离散的,插值过程用于在样本点之间生成连续的信号。这通常通过低通滤波器实现,以平滑信号并消除重建过程中可能产生的高频噪声
  3. 重建:

采样率(采样的频率)、比特深度(采的样本精度)、转换误差

音频格式/常识

PCM(脉冲编码调制)

采集声音从模拟信号转换成数字信号,重要的两个衡量标准就是 采样率、位数(量化精度)。

PCM数据格式常用指标:

  • 采样率:如通话采样率为8KHz,常用媒体采样率为44.1KHz 等等
  • 位深度:一般为16bit(有65,536个等级可以用于衡量真实的模拟信号),也有24bit
  • 字节端序:大端或者小端
  • 声道数:单、双、2.1、3.1、5.1声道等
  • 样本对齐方式:多通道下的样本不同声道交错对齐?
  • 采样数据符号?

    如 FFmpeg中常见的PCM数据格式s16le为例:它描述的是有符号16位小端PCM数据。s表示有符号,16表示位深,le表示小端存储。

PCM存储数据流Stream:

1
2
3
4
5
// 8-bit有符号单声道,分割符"|"分割字节,采样的范围为-128~128
+---------+-----------+-----------+----
binary | 0010 0000 | 1010 0000 | ...
decimal | 32 | -96 | ...
+---------+-----------+-----------+----

实现播放速度调整:加载好PCM数据后,需要送到音频设备驱动程序中播放,这时我们应该能听到声音。与PCM数数据一同到达驱动程序的通常还有采样率(sample rate),用来告诉驱动每秒钟应该播放多少个采样数据。如果传递给驱动程序的采样率大于PCM实际采样率,那么声音的播放速度将比实际速度快,反之亦然。

常用的多声道PCM数据流排列方式:

1
2
3
4
5
6
7
2:  FL FR                       (stereo)
3: FL FR LFE (2.1 surround)
4: FL FR BL BR (quad)
5: FL FR FC BL BR (quad + center)
6: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR)
7: FL FR FC LFE BC SL SR (6.1 surround)
8: FL FR FC LFE BL BR SL SR (7.1 surround)

如上述,具体能够支持多少声道,得看芯片硬件通道是否支持。
FL:前置左声道
FR:前置右声道
FC:前置中置声道
LFE:重低音声道
BL:后置左环绕声道
BR:后置右环绕声道
SL:侧置左环绕声道
SR:侧置右环绕声道

PCM数据流结构及封装

对于一个16位、立体双声道、44.1kHz采样率的PCM数据流,每个样本占用2字节(16位),每秒钟会产生44100 * 2 * 2 = 176400字节的数据。在交错模式下,PCM格式数据流的结构如下:

1
2
3
4
5
6
7
8
9
10
第1字节:第一个左声道样本的低位字节。
第2字节:第一个左声道样本的高位字节。
第3字节:第一个右声道样本的低位字节。
第4字节:第一个右声道样本的高位字节。
...
第5字节:第二个左声道样本的低位字节。
第6字节:第二个左声道样本的高位字节。
第7字节:第二个右声道样本的低位字节。
第8字节:第二个右声道样本的高位字节。
...

数据流封装: PCM数据流通常会被封装在一个容器格式中,如WAV、AIFF或RAW等,这些容器格式提供了额外的信息,如采样率、位深度、通道数等元数据,以及可能的头部信息和尾部信息。

dB 分贝

在音频处理和日常生活中提到的“dB”(分贝)都是衡量声音强度的单位,但它们的使用场景和参照点有所不同。

dB是对数单位,用于表达两个量的比值,用于描述声音强度、功率、电压或电流等物理量的相对变化

生活中的dB:通常用于描述声压级,即声音在空气中的压力波动相对于基准声压的比值。其中基准声压,即0dB(通常为20uPa)是人耳能听到的最低声压。

音频处理中的dB:通常用于表示信号电平的相对变化(可以有不同的参照点,常见的是dBFS),以满刻度为基准。

16bit位深度的PCM音频数据为例,那么其最大值0xFFFF则表示为0dB。

相应的dBFS计算公式为dBFS = 20 * lg (signal / 0xFFFF)。 其中,signal为实际的采样值。
dBFS = 20 * lg (0x01 / 0xFFFF) = -96dB
所以,16bit位深的峰值表为 0dB到-96dB
可推算,24bit位深,峰值表为 0dB到-144dB

声音能量

声音能量:其计算通常用于音频信号处理中,以量化声音的强度或音量。(通过积分?)常用计算方法如下:

1
2
3
4
5
6
7
均方根能量(RMS Energy): 均方根能量是最常用的音频能量计算方法之一,它通过计算信号样本值的平方平均值的平方根来衡量信号的平均功率。公式如下: [ E_{RMS} = \sqrt{\frac{1}{N}\sum_{i=1}^{N}x_i^2} ] 其中,(x_i)是第(i)个样本值,(N)是样本总数。

峰值能量: 峰值能量是信号最大幅度的平方,它反映信号的最大强度。公式如下: [ E_{peak} = \max(x_i)^2 ]

总能量: 总能量是信号所有样本值平方的总和,它表示信号在整个时间窗口内的总能量。公式如下: [ E_{total} = \sum_{i=1}^{N}x_i^2 ]

平均能量: 平均能量是信号样本值平方的平均值,它类似于均方根能量的平方。公式如下: [ E_{avg} = \frac{1}{N}\sum_{i=1}^{N}x_i^2 ]

音频差分输出

假设有四个DAC输出通道:LP、LN RP RN

  • 正常单端配置下,LP、LN输出的波形是一样的,可任取其中一路直推到功放,表示左声道。
  • 差分配置下,LP、LN输出的波形相位差了180度,可以使得波形扩大一倍。LP、LN合并输出一路左声道

音频文件格式

WAV

MP3

M4A

WTG

APE

音频编码格式

MP3
FLAC
AAC
SBC
MSBC

音频流处理

EQ-均衡器

EQ英文全称Equaliser,中文也就是均衡器的意思。它的基本作用是通过对声音某一个或多个频段进行增益或衰减,从而达到调整音色的目的。EQ通常包括以下三个参数:
Frequency,频率:这是用于设定你要进行调整的频率点的参数;
Gain,增益:用于调整在你设定好的F值上进行增益或衰减的参数;
Quantize,频宽比(中心频率与控制带宽的比例,Q值越小,控制范围越大,越模糊):用于设定要进行增益或衰减的频段“宽度”的参数。Q值越小处理的频段就越宽。

DRC-动态范围控制

DRC,Dynamic Range Control(DRC):动态范围控制提供压缩和放大能力,可以使声音听起来更柔和或者更大声,即一种信号幅度调节方式。

限幅器

淡入淡出

直接对PCM数据处理、数字增益、模拟增益

直接对PCM数据处理:直接修改传输中的PCM样本值,以改变音频信号的电平。这通常涉及乘法运算或者移位,将每个样本值乘以一个增益因子。

数字增益:在数字信号处理DSP域中,对音频信号进行增益控制。主要为对处理器的参数化接口调整
灵活性:可以在软件中动态调整,便于实现复杂的音频处理算法。
无失真:只要不超过数字信号处理器的动态范围,数字增益不会引入额外的失真。
易于集成:可以与其他数字信号处理功能(如均衡、压缩、限幅等)无缝结合。

模拟增益:在信号链的模拟域中对音频信号进行放大的过程。
直接影响功率:模拟增益直接影响输出信号的功率,从而影响扬声器或耳机的音量。
可能引入失真:当信号电平过高时,模拟增益可能导致削波失真。
硬件限制:模拟增益受硬件的限制,可能有固定的增益步进或范围。

噪声门限

DAC-数模转换器

功率放大器

扬声器

其它音效处理

移频

小结

音频播放流程: 从 文件/蓝牙音频/IIS/SPDIF 到 PCM数据流,到发声,有一整条串行处理流:直接PCM数据处理、EQ/DRC处理、DSP数字增益、DAC、模拟增益、输出

处理节点可以自行进行适当配置, user_handler?

LADC:高分辨率ADC?

AUX接口,模拟到模拟的增益控制?:

音频接口/协议标准

A2DP协议标准(无线音频流配置)

A2DP并不是物理意义上的音频接口,而是蓝牙技术中的一种协议。其配置定义了如何通过蓝牙无线连接来传输立体声音频。(主要为音频流)

关键特征如下:

  • 音频质量:主要支持高质量的立体声音频传输,使用SBC、AAC、或者aptX、aptXHD、LDAC等编解码器来压缩/解压音频数据,以减少带宽需求并保持良好音质。(LDAC:高分辨率音质编解码器)
  • 无线传输及设备兼容性:无须依赖物理音频线,利用蓝牙技术,实现音频数据的无线传输。并支持广泛设备连接。
  • 应用场景包括但不限于:蓝牙耳机、手机/电脑音乐无线输出至蓝牙音响等。主要用于播放音乐、电影音轨、游戏音频等非通话相关的音频内容。
  • 角色定义:SRC(Source,源设备),负责音频编码和传输;SNK(Sink,接收设备),负责接收和解码音频。
  • 传输机制:A2DP的音频数据通过ACL(Asynchronous Connection-Less)Link传输(一种异步、无连接的数据传输方式,适合于音频流的连续传输)
  • 多编解码器支持:A2DP协议规范允许设备协商使用最佳可用的编解码器,以适应不同的音频质量和带宽需求。

A2DP的工作流程:

  • 设备发现:蓝牙设备通过广播信号互相发现对方的存在。
  • 配对与连接:用户确认配对请求,设备建立安全连接。
  • 服务发现:通过L2CAP(Logical Link Control and Adaptation Protocol)查询对方设备支持的A2DP服务。
  • 编解码器协商:双方设备协商使用哪种音频编解码器进行传输。
  • 音频流传输:SRC设备将音频数据编码并发送给SNK设备,后者解码并播放音频。

HSP/HFP(语音通话流配置)

关键特征如下:

  • 语音通话质量:HSP/HFP配置文件优化了语音通话质量,通常使用 CVSD 或 其它专为语音设计的编解码器
  • 传输机制:使用SCO(Synchronous Connection-Oriented)Link,是一种同步、面向连接的传输方式,特别适合于语音通话的实时性要求
  • 应用场景:用于手机通话、VoIP通话或会议电话等

HSP/HFP主要关注语音通话的清晰度,不支持立体声,且音频质量较低,不足以满足音乐播放的需求。

HFP扩展了HSP的功能,不仅支持语音通话,还增加了对电话控制的支持,如接听、挂断电话、拒接来电等。

HFP同样使用CVSD或类似的语音编解码器,以确保通话质量,但它其注重于提供免提通话的便利性,尤其是在驾驶或无法手持电话的情况下。

BT Audio接口之 A2DP/HSP/HFP 配置小结

BT Audio接口使用蓝牙无线技术,无需物理线缆即可传输音频数据。
配置文件支持:依赖于蓝牙协议中的特定配置文件,如A2DP(高级音频分配配置文件)用于高质量音频流传输,或者HFP/HSP(免提配置文件/耳机配置文件)用于语音通话。


A2DP与HSP/HFP的差异:

  • A2DP针对高质量音频传输,而HSP/HFP专注于清晰的语音通话
  • A2DP用于音频的下行传输,HSP/HFP配置文件支持音频的上行和下行双向传输,但音频质量较A2DP低。如果要同时使用高音质音频及语音上行,如游戏耳机,可以组合使用多个配置文件实现。
  • A2DP使用ACL Link,适合连续的音频流传输;HSP/HFP使用SCO Link,适合实时的语音通话。
  • A2DP支持多种音频编解码器,以适应不同的音频质量需求;HSP/HFP使用专为语音设计的编解码器

蓝牙设备可以同时支持A2DP(Advanced Audio Distribution Profile)和HSP/HFP(Headset Profile / Hands-Free Profile)配置文件

例如,当将一部支持A2DP和HFP的手机与一副同样支持这两种配置文件的蓝牙耳机配对时,手机会自动检测并建立与耳机的连接。在大多数情况下,手机会优先使用A2DP进行音频流传输,而当有来电时,连接会自动切换到HFP,以确保高质量的语音通话。

在某些情况下,设备可能需要手动或自动切换配置文件。例如,当用户正在通过A2DP听音乐时,如果接收到电话呼叫,设备通常会自动暂停音乐播放并切换到HFP进行通话。通话结束后,设备会自动返回到A2DP继续播放音乐。

注:ACL Link 和 SCO Link 是蓝牙技术中定义的两种不同的物理链路类型,它们分别用于不同的数据传输场景,并且具有不同的特性和优点。

(非限制一对一连接)
ACL Link 是一种异步无连接的数据传输链路,主要用于传输分组数据,如文件传输、互联网数据和高质量音频(通过A2DP配置文件)。ACL Link 的关键特性包括:
异步无连接:数据包可以随时发送,不需要预先建立连接,这使得ACL Link非常适合于突发性的数据传输。
可变数据速率:根据蓝牙版本的不同,ACL Link的数据速率可以从较低的1Mbps到较新的版本中的2Mbps甚至更高。
错误检测与重传:ACL Link支持错误检测机制,如果数据包丢失或损坏,可以请求重传。
适用于大量数据传输:由于其较高的数据速率和错误纠正能力,ACL Link非常适合于大数据量的传输,如文件传输和高质量音频流。

SCO Link 是一种同步面向连接的数据传输链路,主要用于传输实时性要求高的数据,如语音通话(通过HSP或HFP配置文件)。SCO Link 的关键特性包括:
同步面向连接:在数据传输前需要建立连接,数据包按照固定的时间间隔发送,保证了数据的实时性。
固定数据速率:SCO Link通常以固定的速率传输数据,如64kbps,以确保语音通话的连续性和清晰度。
不支持错误重传:由于实时性要求,SCO Link不支持数据包的重传,如果数据包丢失,则会被丢弃。
适用于实时音频传输:由于其低延迟和固定速率的特性,SCO Link非常适合于语音通话和实时音频流传输。

通常情况下:当音乐正在播放时(通过A2DP),如果电话呼入,耳机将自动暂停音乐播放,并切换到HFP/HSP模式以处理通话。通话结束后,音乐会自动恢复播放。(但有些耳机能够同时进行)

LINEIN/AUX 音频输入接口

AUX接口通常采用3.5毫米(1/8英寸)TRS插头,与标准的耳机插头兼容,便于连接。

  • 直接连接外部音频源,如平板、手机、笔记本等通过AUX连接到音响、音箱等
  • 音频信号:AUX接口支持模拟音频信号的传输,无须数模、或模数转换。保证了连接的简便性和即插即用的特性

与 LINEIN 相对应的是 LINEOUT 接口,与耳机3.5mm接口兼容,当然电气特性不完全相同。如:耳机接口可能包含音频输出和麦克风输入功能,而LINEOUT只有音频输出功能。

IIS接口

IIS(Inter-IC Sound),又称集成电路内置音频总线,是飞利浦在1986年定义的数字音频传输标准,与IIC并无相关性。

相对其它协议,IIS接口协议相对简单,没有地址和片选机制。在总线上,只能同时存在一个主设备和发射设备:提供时钟的为主设备,主设备可以是发射设备、接收设备或者协调两者的其它控制设备皆可。

主要应用于处理器与音频编解码器之间的音频数据传输

IIS协议定义了三根信号线:时钟信号SCK、数据信号SD、左右声道选择信号WS

  • SCK/BCLK 位时钟:等于通道数 * 位宽 * 采样率
  • SDIN/DIN 数据线:串行数据,以二进制补码形式在数据线上传输,在WS变化后的第一个SCK脉冲先传输最高位
  • WS/LRCLK 声道选择信号:用于区分左右声道的数据,0表示左声道,1表示右声道。也叫帧时钟,等于声音的采样频率
  • MCLK 主时钟(可选):提供主时钟频率给接收端,确保采样率的准确性。 在高质量音频输出、使用外部音频解码器、多通道音频传输时,主时钟是必须的。

时分复用,用于IIS实现多通道音频数据传输情况?

USB Audio Class接口(UAC)

UAC规范的组成部分:
音频控制接口(Audio Control Interface):这部分定义了音频设备的控制信号,包括音量调节、静音、采样率选择等。

音频流接口(Audio Streaming Interface):这部分定义了音频数据的传输方式,包括数据格式、采样率、位深度、通道数等。

SPDIF接口

SPDIF定义了一种数字音频信号的传输方式,包括数据的格式和编码,以及如何在设备间传输这些数据。

SPDIF接口主要用于家用音频设备之间,如CD播放机、数字录音机、AV接收器、电视和声卡等,以实现高质量的数字音频传输。

物理接口有:同轴电缆、光纤

数据格式:SPDIF定义了如何将数字音频数据打包成帧,包括采样率、位深度、通道数量等信息。
编码方式:使用脉冲编码调制(PCM)或压缩格式(如Dolby Digital或DTS)来编码音频数据。
传输机制:规定了如何在设备间同步传输这些数据,包括时钟信号的同步。

HDMI-ARC接口

PDM接口

PDM(Pulse Density Modulation)接口是一种用于传输音频信号的接口,特别是在数字麦克风和扬声器系统中。PDM是一种调制技术,用于将模拟音频信号转换为数字信号,这种数字信号由一系列脉冲组成,脉冲的密度反映了模拟信号的幅度。

PDM接口中,音频信号是以极高的频率(远远高于标准的PCM采样率,如44.1kHz或48kHz)进行采样的,通常在数兆赫兹(MHz)。由于采样率非常高,PDM信号可以使用单个比特(1位)来表示每个样本,这意味着信号在传输时要么为0,要么为1。

PDM接口不需要复杂的模数转换器(ADC)和数模转换器(DAC)

PDM接口常用于数字麦克风,如MEMS麦克风,以及一些音频编解码器中。在数字信号处理器(DSP)或专用集成电路(ASIC)中,PDM信号通常会被转换回更高分辨率的数字信号(如16位或24位PCM),以便进一步处理和播放。

音频开发相关概念

声卡

声卡的基本功能:将来自话筒、磁带、光盘、电脑USB设备等的原始声音信号或者数字音频信号,进行转换,再输出到耳机、扬声器或者扩音机等声响设备。

比如,电脑的音频文件进行解码后,可以通过其内置声卡,将音频输出到主机自带的AUX接口中。

也可以通过电脑USB将音频流输出到外挂的设备,再由外挂USB设备进行高质量的音频输出到扬声器。此时外挂的嵌入式设备,称为声卡。

进行嵌入式音频设备开发,通常在PC-USB模式下,将自身作为声卡功能

混响

录音

麦克风:动圈麦克风

混合录音

音频流以及MIC输入流,混合输入编码到PCM,再存储到文件中

如果音频流频率跟MIC采样频率不一样,则进行 SRC 变采样处理

音频流如 eq、drc、移频(避免啸叫)、变声、谐波、混响(空间、回声) -> 低中高频 DRC -> 输出

业务层音频功能开发

音频功能配置

输出模式? 单端隔直、差分输出、VCOM直推

VCM电容

音效调试

如何调试?

注意项及扩展思考

关机时需要先把功放给关掉, 另外ES8388音频解码器也要等电容的电放完 才能再次上电通讯,否则iic会通讯失败

为什么直接断电时,扬声器会嘭的一声

功放与扬声器的关系,为什么直接断电时 扬声器会嘭的一声: 功放电容直接关闭时瞬间放电导致SPK发声

通常在关闭功放或者音响时,先将功放设置为静音(MUTE)状态后,再断电。

避免开关冲击噪声,即功放内部可能的瞬态电流波动。

在开启功放时,也建议先将功放设置为静音状态,然后再启动。

1
2
扬声器的末端有一个电容,电容会有一个偏置电压,通常为 VDD/2 。在上电时,该电容瞬间上电会导致扬声器 peng 的一声。

音频开发中出现底噪、电流声的分析流程

噪声问题主要通过优化硬件处理, 如果硬件处理无法达到理想效果,则通过软件加噪声门处理(反相底噪的PCM数据,做音效抵消)

1、模拟地短接到数字地,导致模拟地有电压波动,导致音频噪声。
2、功放带宽大,导致DAC输出的信号有折回,会导致喇叭有明显噪声。 在DAC输出端加二阶低通滤波。

头戴式耳机本身模具决定电池线和喇叭线需要共同紧贴着走一段很长的距离,然后接到主板端上。此时电池上的干扰很容易就通过平行线耦合干扰到喇叭线。

硬件上做对应处理。

开发中出现音频数据没声音的问题排查

  • 音频管脚是否配置正确,是否为复用引脚
  • 时钟是由处理器还是编解码器提供?主从模式是否正确
  • 通信双方的通道数、位宽、采样率是否配置正确
  • LRCK、SCK是否输出正确,其中LRCK=采样率SCK=通道数*位宽*采样率

参考站点

附录/备忘录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

### 音频播放原理概述

将mp3文件通过esp32自带的转换工具转成bin文件,而后烧录到esp32的指定地址。(mp3文件命名转换与esp32代码中mp3命名一一对应)

esp32调用库接口解码播放相应的mp3歌曲,通过IIS将数字音频信号输出到ES8388音频解码器,转换成相应的交流信号(模拟信号),再经过功率放大器放大 音频的电信号,最后输出到扬声器将 电信号转换成声音

ESP32 IIC IIS->音频解码->功率放大器->扬声器

### 语音识别开发流程

离线语音识别:
电脑端模型训练词条,完成模型训练后,针对特定平台编译成相应的库(输入声音流,输出词条的库),编译部署到设备上运行


在线语音识别

语音识别和回音消除, 通过ES7243E模数转换器,将外界的声音转换成数字信号给ESP32识别,采集MIC的声音减去SPK的声音就是真实的外界声音。 (另外 IIS具有区分左右声道的能力)

声学算法如回声消除、噪声抑制等的部署,

编程初始化算法、处理音频数据、调用算法接口等

### 语音控制功能简述