概述

声音无时无刻不充斥在我们的生活中,人类可以通过耳朵听取声音,可以通过嘴巴发出声音,如唱歌和读书。同样的,计算机可以通过麦克风录制声音,可以通过喇叭发出声音,比如音乐播放,或将一段文字通过语音播放出来。

计算机对音频信号的处理便涉及到音频的采样、编码、解码、文本转语音、模拟信号输出等各种音频相关的技术手段,本文将着重对 QuecPython 支持的音频技术进行原理和应用的阐述。

音频原理

DAC原理

DAC(Digital-Analog-Converter)是数字到模拟转换器的缩写,它的作用是将数字信号转换成模拟信号。
音频DAC是一种将数字音频信号转换为模拟音频信号的电路。它的工作原理一般分为三个步骤,即解码、滤波和放大。

  • 解码:将数字音频信号按照一定的规则,还原为模拟信号的采样值,这个过程通常采用多级幅度量化高阶Σ - Δ调制器结构。
  • 滤波:将解码后的模拟信号通过一个低通滤波器,去除高频噪声和抖动,得到平滑的模拟信号。滤波器可以有两种滚降特性,慢滚降和陡滚降。
  • 放大:将滤波后的模拟信号通过一个耳机放大器,增加信号的功率和驱动能力,使之能够推动耳机或扬声器发声。

音频DAC的性能指标主要有:

  • 位数:表示解码前的数字音频信号有多少位二进制数,决定了解码的精度和动态范围。
  • 采样率:表示每秒钟解码多少次,决定了信号的频带宽度。
  • 信噪比:表示模拟音频信号中有效信号与噪声的比例,反映了信号的质量。
  • 总谐波失真:表示模拟音频信号中谐波失真与有效信号的比例,反映了信号的线性度。

音频DAC的选型要根据具体的应用场景和需求来确定。一般来说,高端音频设备需要高位数、高采样率、高信噪比和低失真的音频DAC,而低端音频设备则可以使用低位数、低采样率、低信噪比和高失真的音频DAC。

ADC原理

ADC(Analog-Digital-Converter)是模拟到数字转换器的缩写,它的作用是将模拟信号转换成数字信号。
它的工作原理一般分为四个步骤,即采样、保持、量化和编码。

  • 采样:按照一定的频率,对输入的模拟信号进行离散化,得到一系列采样值。
  • 保持:将采样值暂时存储在一个电容上,以便后续的量化和编码。
  • 量化:将采样值按照一定的规则,分成若干个等级,并赋予每个等级一个数值,这个数值就是量化值。
  • 编码:将量化值用二进制数表示,得到数字信号。

音频ADC的性能指标主要有:

  • 位数:表示编码后的数字信号有多少位二进制数,决定了量化的精度和动态范围。
  • 采样率:表示每秒钟采样多少次,决定了信号的频带宽度。
  • 信噪比:表示数字信号中有效信号与噪声的比例,反映了信号的质量。
  • 总谐波失真:表示数字信号中谐波失真与有效信号的比例,反映了信号的线性度。

音频ADC的选型要根据具体的应用场景和需求来确定。一般来说,高端音频设备需要高位数、高采样率、高信噪比和低失真的音频ADC,而低端音频设备则可以使用低位数、低采样率、低信噪比和高失真的音频ADC。

常见数字音频接口

数字音频接口的作用是将数字音频信号在不同的设备之间进行传输,例如DAC、ADC、DSP、音频处理器、音频播放器等。数字音频接口可以提高音频信号的抗干扰能力,减少信号损失和噪声,提高音质和效率。数字音频接口也可以支持多声道和高采样率的音频信号,满足不同的应用需求。常见的数字音频接口有以下几种:

  • I2S接口:Inter-IC Sound Interface的缩写,是一种串行音频接口,用于连接数字音频设备,如DAC、ADC、DSP等。它使用三根线来传输数据,分别是时钟线(BCLK)、帧同步线(LRCK)和数据线(SD)。时钟线用于提供数据的采样率,帧同步线用于区分左右声道,数据线用于传输音频数据。I2S接口可以支持多达32位的数据位宽和高达192kHz的采样率。
  • PCM/TDM接口:Pulse Code Modulation/Time Division Multiplexing的缩写,是一种类似于I2S的串行音频接口,但是可以支持多路音频信号的复用。它也使用三根线来传输数据,分别是时钟线(BCLK)、帧同步线(FS)和数据线(SD)。时钟线用于提供数据的采样率,帧同步线用于区分不同的音频信号,数据线用于传输音频数据。PCM/TDM接口可以支持多达16路音频信号和高达768kHz的采样率。

目前支持QuecPython开发方式的模组主要支持PCM接口,可用于外接Codec(音频编解码器芯片)。引脚定义如下,

  • PCM
引脚名 I/O 描述
PCM_CLK DO PCM 时钟
PCM_SYNC DO PCM 帧同步
PCM_DIN DI PCM 数据输入
PCM_DOUT DO PCM 数据输出

不同平台支持PCM通道数如下:

平台 I2S PCM
EC600M-CN系列 0 1
EC800M-CN系列 0 1
EC600U系列 0 1
EG912U-GL系列 0 1
EG915U系列 0 1
EC200U系列 0 1
EC200A系列 0 1
EC600E-CN系列 0 1
EC800E-CN系列 0 1
BG95系列 0 1
BG600L-M3系列 0 1
EC600G系列 0 1
EC800G-CN系列 0 1(0或1,可选)
BC25系列 0 0
BC95系列 0 0
EG912N-EN系列 0 1
EG915N系列 0 1

蜂窝模组硬件框架

内置Codec

Codec(音频编解码器芯片)主要用于对音频信号进行数字化和还原。音频编解码器一般由两部分组成:ADC(模拟-数字转换器)和DAC(数字-模拟转换器)。ADC负责将模拟信号(如麦克风、线路输入等)转换为数字信号(如PCM等),DAC负责将数字信号(如I2S、SPDIF等)转换为模拟信号(如耳机、扬声器等)。部分模组内部已经内置了一路Codec,此时模组可以直接输入输出音频模拟信号,如下图:

外置Codec

当模组内部不带内置Codec时,或者需要使用两路Codec时,可以使用PCM或者I2S接口外接Codec。此时外部输入输出模拟信号需要和Codec连接,如下图:

外置DAC

音频DAC是一种音频数模转换器,即一种将数字信号转换为模拟信号的装置,可以将存储在数字媒体中的音频数据,如CD、DVD、MP3等,转换为可以通过扬声器或耳机输出的模拟信号,使人们可以听到声音。模组可以通过PCM或者I2S接口外接DAC,如下图:

PWM 音频

PWM音频是一种利用PWM(脉冲宽度调制)信号来播放和处理音频的方法,无需使用外部的音频DAC(数模转换器)芯片,适用于对音质要求不高而对成本敏感的应用。

PWM音频的主要原理如下:

  • PWM信号是一种周期性的方波信号,其占空比(高电平时间占一个周期的比例)可以调节,从而改变其平均电压值。
  • 音频信号是一种模拟信号,其幅度和频率可以表达声音的响度、音调和音色等特征。
  • 通过将音频信号进行采样和量化,可以得到一系列的数字数据,表示声音在不同时间点的幅度值。
  • 通过将数字数据转换为对应的PWM占空比,可以用PWM信号来模拟音频信号的波形变化。
  • 通过将PWM信号输出到扬声器或耳机等设备,可以还原出声音。

PA 管理

PA(Power Amplifier)音频功率放大器的作用是把来自音源或前级放大器的弱信号放大,推动音箱放声。模组或者Codec输出的音频模拟信号不够强,需要音频功率放大器(PA)的控制和优化,以提高音频输出的质量和效率,保护音频器件不受损坏。当模组对外输出音频,如播放音频文件或者使用TTS时,需要打开PA。当模组在录音状态时则需要关闭PA可以降低功耗,以及避免底噪被PA放大导致杂音。

常见音频应用

音频播放

音频播放是指使用音频编解码器将音频文件或音频流转换为模拟信号,通过输出通道(如听筒、耳机、喇叭等)播放出来的过程。

  • 音频播放需要创建一个Audio对象,指定输出通道,如aud = audio.Audio(0)表示使用听筒输出。
  • 音频播放可以使用aud.play(priority, breakin, filename)方法,指定播放优先级、打断模式和文件名称。支持mp3、amr和wav格式的文件播放。
  • 使用aud.playStream(format, buf)方法,指定音频流格式和内容。支持mp3、amr和wav格式的音频流播放。

音频播放的更多接口和详细使用方法见class Audio - 音频播放

语音电话

语音电话是指使用语音编解码器将语音信号转换为数字信号,通过网络传输到对方,再由对方的语音编解码器还原为语音信号的过程。
语音电话的更多接口和详细使用方法见voiceCall - 电话功能

录音

外部传入的声音通过麦克风的输入设备转化为电信号后,再通过Codec转化为数字信号传递给模组,模组将数字信号转化为不同格式(如AMR、WAV)的音频文件存储到Flash上。
录音的原理是将声音信号转换为电信号或数字信号,然后存储在某种介质上,以便于回放或处理。

  • 录音需要创建一个Record对象,指定输入通道,如record = audio.Record(0)表示使用听筒输出。
  • 使用record.start(file_name,seconds)方法,指定录音文件名称和录音长度。

语音电话的更多接口和详细使用方法见class Record - 录音

TTS

TTS是Text To Speech的缩写,即文本转语音,是一种能把文字内容转换为语音输出的技术。当前TTS模块主要包含如下接口:

  • 初始化:使用audio.TTS()创建一个TTS对象,指定输出通道。
  • 播放:使用TTS对象的play()方法,可以将指定的文本转换为语音并播放,可以指定是否打断、优先级、语速、语调等参数。
  • 停止:使用TTS对象的stop()方法,可以停止当前正在播放的语音。
  • 暂停:使用TTS对象的pause()方法,可以暂停当前正在播放的语音。
  • 恢复:使用TTS对象的resume()方法,可以恢复暂停的语音。
  • 设置:使用TTS对象的set_volume()、set_speed()等方法,可以设置音量、语速等参数。

语音电话的更多接口和详细使用方法见class TTS - 文本到语音播放

使用注意事项:

  • 数字和数值:数字:数字之间添加空格。如“1 2 3”,会播报成 “一二三”; 数值:“123” 会 播报成 “一百二十三”
  • 多音字:”您已超速,请保持安全行车速度“ ,默认情况下 “行” 会播报成 hang,应采用如下写法:"您已超速,请保持安全行[=xing2]车速度" [=xing2]即 xing 第二声
  • 停顿[z1] 标识起始位置,[z0] 标识末尾,***** 表示短停顿,# 表示长停顿

音频参数校准

概述

音频校准工具可调整内置 codec 输入增益(包含模拟增益,adc增益),输出增益(包含模拟增益,dac增益,算法增益),侧音增益。生效模式分为实时生效模式,和非实时生效模式,通过 API控制。其中非实时生效模式下,调整的参数将会在下次播放/通话时才能生效。工具可适配整多种应用场景,和多种输入/输出通道。音频工具调整好参数后,可以直接固定到NV文件中,作为默认音频参数。

各平台支持情况和工具适用

ASR平台

目前ASR平台可以通过CATStuido软件中的CAT-Audio工具上进行音频参数的校准。主要功能有:

  • 音频通路校准 可以设置不同音量等级下的增益。

CAT-Audio 音频通路自带 audio_gain.nvm 的修改和 AT*NVMFLUSH=1 的发送功能。 当所有增益修改完成,需要将改动保存至 flash 时,可以鼠标选中 Profiles 右击,会弹出 3 个选项:
“Save Gain to NVM”-----将修改保存到 NVM,即时生效, 重启也能保持设定的参数值;
“Create Default NVMs”--参数没保存到 NVM 时,点击可恢复原始 NVM;
“Reload NVM files”-----从 cp 调取原始 NVM。

  • 通话录音和播放 点击 “track view”按钮 ,界面显示 tracks view;
在 VE 拓扑图里勾选需要 dump 录音的点; 点击红色圆形按钮进入实时录音,在 tracks view 处可以看到实时波形;
  • 语音增强音频校准 语音增强拓扑图提供对所有语音增强模块的控制。它支持打开和关闭每个模块,并可以设置模块中的参数。

展锐平台

展锐平台使用AudioCalibrator软件去进行音频参数的标定。
Codec参数校主要包含:
内置codec输入增益(atctst_aud_codec_get_ingain)
输入增益即通话模式下的MIC增益,该增益在音乐播放模式下不可调。如下图,可以修改模拟增益和adc增益。不同通道下的模拟增益范围不同,adc增益范围相同。值不可过大,否则会造成输入失真。

内置codec输出增益(atctst_aud_codec_get_outgain)
输出增益在通话模式,或者音乐播放模式下均可调。输出增益与音量等级相关,当前支持0~11级音量,分别对应增益列表中的outGains[0] ~ outGains[11]。用户若要重新调整音量增益,可以调整对应音量等级下的dac,ana与alg增益。Alg调到最小可以实现静音。DAC的值不建议超过63,易造成失真。用户可根据应用场景,设置不同的增益组合。建议可保持ana与alg不变,调整dac增益。

侧音增益(atctst_aud_codec_get_sidetonegain)
侧音增益用于通话场景。侧音默认关闭,客户若需要侧音,可在此调整。