承接上文
基于单片机的音频信号处理系统设计(一)
基于单片机的音频信号处理系统设计(二)
3.4 音频处理设计
电源滤波电路对于减少电源噪声对音频信号的干扰起着至关重要的作用。电源噪声主要来源于外部电网的电磁干扰、电源自身的开关动作以及系统内部其他电路的噪声耦合 。数字信号和模拟信号的处理不当,也会造成很大的噪音,这些噪声若不加以有效抑制,会叠加在音频信号上,导致音频质量下降,出现杂音、失真等问题。在电源输入端首先接入一个 10μF 的电解电容,用于滤除低频纹波,其较大的电容量能够存储一定的电荷,在电源电压出现低频波动时起到缓冲作用;通过这样的 π 型滤波电路,能够显著降低电源噪声,为音频信号处理系统提供稳定、纯净的电源,保证音频信号在处理过程中不受电源干扰的影响,有效提升音频质量。这里采用的音频芯片是ES8388,引脚说明如下:
表4
引脚编号 | 引脚名称 | I/O特性 | 描述 |
---|---|---|---|
1 | MCLK | 输入 | 主设备时钟 |
2 | DVDD | 电源 | 数字供电电源 |
3 | PVDD | 电源 | IO供电电源 |
4 | DGND | 电源 | 数字低 |
5 | SCLK | I/O | 音频数据时钟 |
6 | DSDIN | 输入 | DAC数据输入 |
7 | LRCK | I/O | 音频左右声道时钟 |
8 | ASDOUT | 输出 | ADC音频数据 |
9 | NC | NC | 不接 |
10 | VREF | 输出 | 接去耦电容 |
11 | ROUT1 | 输出 | 右声道输出1 |
12 | LOUT1 | 输出 | 左声道输出1 |
13 | HPGND | 电源 | 模拟地和数字地供地 |
14 | ROUT2 | 输出 | 右声道输出2 |
15 | LOUT2 | 输出 | 左声道输出2 |
16 | HPVDD | 电源 | 模拟输出驱动器的供点 |
17 | AVDD | 电源 | 模拟供电 |
18 | AGND | 电源 | 模拟地 |
19 | ADCVREF | 输出 | 去耦 |
20 | VMID | 输出 | 去耦 |
21 | RIN2 | 输入 | 右声道2输入 |
22 | LIN2 | 输入 | 左声道2输入 |
23 | RIN1 | 输入 | 右声道1输入 |
24 | LIN1 | 输入 | 左声道1输入 |
25 | NC | NC | 不接 |
26 | CE | 输入 | 去耦电容控制选择或设备地址选择 |
27 | CDATA | 输入 | 控制数据输入或输出 |
28 | CCLK | 输入 | 控制时钟输入 |
具体应用原理图如下所示
图5 音频处理图
3.5 无线音频传输设计
无线音频传输采用的国产蓝牙串口透传芯片CH9141。支持广播模式、主机模式和从机模式,支持蓝牙BLE4.2、 仅91141F 支持蓝牙 BLE5.3。支持串口 AT 配置和在从机模式下的蓝牙通信配置,支持MODEM联络信 号,并提供通用GPIO、同步GPIO、ADC采集功能,串口波特率最高1Mbps。蓝牙从机模式下可设置蓝 牙名称、厂商信息等参数,可通过APP或者串口命令轻松配置,方便快捷。使用的是ESSOP10封装,
表6
引脚编号 | 引脚名称 | 引脚说明 |
---|---|---|
11 | GND | 电源地 |
1 | SLEEP | 低功耗控制引脚,低电平有效,内置上拉电阻 |
2 | VCC | 芯片电源输入,需外接2.2uF退耦电容 |
3 | GND | 电源地 |
4 | X32MI | 高频振荡器的反相输入端 |
5 | X32MO | 高频振荡器的反相输出端 |
6 | ANT | RF射频信号输入输出 |
7 | VINTA | 内部模拟电路的电源节点,需外接2.2uF退耦电容 |
8 | RXD | 串口接收引脚 |
9 | TXD | 串口发送引脚 |
10 | AT | AT 透传功能切换引脚 0:AT模式 1:透传模式 |
原理图如下:
3.6 硬件版图
通过原理图,生成pcb版图,进行布局和布线,进行模块划分之后,具体的版图如下图所示:
3D效果图
4、系统软件设计
4.1 软件开发环境搭建
嵌入式系统选用 STM32CubeIDE +KeilMDK作为软件开发工具,STM32CubeIDE是意法半导体公司推出的一款专门用于 STM32 微控制器开发的集成开发环境(IDE)。主控芯片的CubeIDE引脚配置如下图所示:
系统时钟配置如下:
将配置好的工程文件生成代码,使用KeilMdk打开,进行HAL驱动代码编写。进行整理建立工程,如下图所示:
4.2 系统软件架构设计
4.2.1 单片机软件程序设计
在单片机程序软件程序设计中,编程语言采用的是C语言。C语言具有移植性好,执行效率高的特点 。程序流程图如下:
具体的流程上是进行芯片硬件接口初始化,系统始终初始化,调试串口初始化,语言芯片ES8388接口初始化,开启DAC,关闭ADC,DAC选择通道输出,设置喇叭音量,开启DAC,关闭ADC,DAC选择通道1输出,设置飞利浦标准16位数据长度,设置总线输出模式,设置采样率,音频输出。
4.2.2 Andoird程序设计
中间层作为音频信号处理系统软件架构的核心部分,承担着实现各种音频信号处理算法的重任,其性能和效率直接影响着整个系统的音频处理质量和效果。
在本系统中,中间层主要实现噪声抑制和回声消除等关键音频信号处理算法。噪声抑制算法的目的是减少或消除音频信号中的噪声,提高音频信号的清晰度和可懂度 。常见的噪声抑制算法有谱减法、维纳滤波法、基于小波变换的方法等。在本系统中,采用谱减法实现噪声抑制。谱减法的基本原理是基于人的感觉特性,即语音信号的短时幅度比短时相位更容易对人的听觉系统产生影响,从而对语音短时幅度谱进行估计,适用于受加性噪声污染的语音 。其具体实现过程为:首先,对输入的带噪音频信号进行分帧处理,将其划分为若干个短时段的音频帧,以便于对每个帧进行独立的处理。然后,对每个音频帧进行快速傅里叶变换(FFT),将时域信号转换为频域信号,得到其频谱 。在噪声估计阶段,利用语音信号的非平稳性和噪声的局部平稳性,通过分析无语音活动时(如语音停顿间隙)的音频帧来估计噪声的频谱 。接着,从带噪语音的频谱中减去估计得到的噪声频谱,得到纯净语音的频谱估计 。考虑到人耳对相位的感觉不灵敏,在相位恢复时采用带噪语音的相位信息 。最后,对得到的纯净语音频谱进行逆快速傅里叶变换(IFFT),将频域信号转换回时域信号,完成噪声抑制处理 。通过这样的谱减法实现,有效地降低了音频信号中的噪声,提升了音频信号的质量。
回声消除算法则是为了减少或消除音频信号中的回声,提高语音通信的清晰度和质量,特别是在免提通话、视频会议等应用场景中具有重要意义 。在本系统中,采用基于自适应滤波器的回声消除算法。该算法基于时间延迟的概念,通过计算回声信号与原始声音信号之间的差异,实现对回声的消除 。具体实现过程中,首先建立一个自适应滤波器模型,该滤波器的系数会根据输入信号的统计特性自动调整,以达到最佳的回声消除效果 。在实际运行时,将输入的音频信号分为两路,一路作为参考信号输入到自适应滤波器,另一路作为含有回声的接收信号 。自适应滤波器根据参考信号和接收信号之间的误差,不断调整滤波器的系数,使得滤波器的输出能够尽可能地逼近回声信号 。然后,从接收信号中减去滤波器输出的回声信号估计值,从而实现回声消除 。在本系统中,利用归一化最小均方(NLMS)算法来调整自适应滤波器的系数,该算法通过最小化误差的均方值来不断调整滤波器的系数,具有计算复杂度低、收敛速度较快等优点,能够有效地实现回声消除 。通过这样的回声消除算法实现,有效地减少了音频信号中的回声干扰,提升了语音通信的质量。
除了噪声抑制和回声消除算法外,中间层还可以实现其他音频信号处理算法,如音频均衡、音频压缩等,以满足不同的音频处理需求 。这些算法的合理设计和有效实现,使得中间层能够对音频信号进行全面、高效的处理,为上层应用提供高质量的音频数据,提升整个音频信号处理系统的性能和用户体验。
4.3 音频信号处理算法实现
4.3.1 噪声抑制算法实现
在音频信号处理过程中,噪声抑制是提升音频质量的关键环节。本系统采用谱减法来实现噪声抑制,该算法基于人的感觉特性,即语音信号的短时幅度比短时相位更容易对人的听觉系统产生影响,从而对语音短时幅度谱进行估计,适用于受加性噪声污染的语音 。
谱减法的基本原理是从带噪语音的频谱中减去噪声的频谱,从而得到纯净语音的频谱估计。假设 x(n) 为噪声污染的语音信号,由纯净语音信号 s(n) 和加性噪声 d(n) 组成,即
x(n) = s(n)+ d(n)
对其进行傅里叶变换,得到
,其中 X(w)、s(w) d(w) 分别为x(n) 和d(n),s(n)表示为极坐标形式
,其中 |D(w)| 通常无法直接获取,但考虑到噪声在语音停顿间隙等无语音活动时段相对平稳,可通过这些时段的平均幅度谱来近似代替 。而噪声的相位σd(w)则可以用带噪语音的相位来代替。在实际处理中,从带噪语音的幅度谱 |D(w )|。)| 中减去估计得到的噪声平均幅度谱 |D(),通过逆傅里叶变换恢复出时域的纯净语音信号。
在软件实现过程中,首先对输入的带噪音频信号进行分帧处理,将其划分为若干个短时段的音频帧,每帧长度一般为 20 - 30ms 。这是因为音频信号在短时间内具有相对平稳的特性,分帧处理可以使算法针对每帧信号进行独立的分析和处理,提高处理的准确性和效率。例如,将音频信号按 25ms 进行分帧,对于采样频率为 44.1kHz 的音频信号,每帧大约包含 1102 个采样点 。然后,对每个音频帧进行加窗处理,常用的窗函数有汉宁窗、汉明窗等,本系统采用汉宁窗 。加窗的目的是减少频谱泄漏,使频谱分析更加准确。以汉宁窗为例,其窗函数表达式为
其中 n = 0,1,…,N - 1,N 为窗函数的长度,与音频帧长度相同 。经过加窗处理后的音频帧,再进行快速傅里叶变换(FFT),将时域信号转换为频域信号,得到其频谱 。
在噪声估计阶段,利用语音信号的非平稳性和噪声的局部平稳性,通过分析无语音活动时(如语音停顿间隙)的音频帧来估计噪声的频谱 。具体实现时,可以设置一个噪声估计窗口,在窗口内对多个无语音活动帧的频谱进行平均,得到噪声的平均幅度谱估计 。例如,选取前 10 帧无语音活动的音频帧,计算它们的平均幅度谱作为噪声估计值 。接着,从带噪语音的频谱中减去估计得到的噪声频谱,得到纯净语音的频谱估计 。考虑到人耳对相位的感觉不灵敏,在相位恢复时采用带噪语音的相位信息 。最后,对得到的纯净语音频谱进行逆快速傅里叶变换(IFFT),将频域信号转换回时域信号,完成噪声抑制处理 。
为了对比不同噪声抑制算法的效果,选择了维纳滤波法与谱减法进行对比测试。维纳滤波法是一种基于最小均方误差准则的滤波方法,通过对信号的自相关函数和噪声的自相关函数进行估计,设计出最优的滤波器系数,从而实现噪声抑制 。在相同的噪声环境下,对同一音频信号分别采用谱减法和维纳滤波法进行处理。实验结果表明,谱减法在处理宽带噪声时,能够有效地降低噪声强度,使音频信号的信噪比得到明显提升,语音清晰度有较大改善,尤其在高频段的噪声抑制效果较为显著 。维纳滤波法在噪声估计较为准确的情况下,能够较好地保留音频信号的细节,但对噪声的统计特性要求较高,当噪声特性发生变化时,其噪声抑制效果会受到一定影响 。在实际应用中,谱减法由于其物理意义直接、运算量相对较小,在本音频信号处理系统中表现出了较好的噪声抑制性能,能够满足大多数音频处理场景的需求 。
4.3.2 回声消除算法实现
回声消除在音频信号处理中,尤其是在语音通信场景中起着至关重要的作用,它能够显著提升语音通信的清晰度和质量。本系统采用基于自适应滤波器的回声消除算法,该算法基于时间延迟的概念,通过计算回声信号与原始声音信号之间的差异,实现对回声的消除 。
其基本原理是建立一个自适应滤波器模型,该滤波器的系数会根据输入信号的统计特性自动调整,以达到最佳的回声消除效果 。在实际运行时,将输入的音频信号分为两路,一路作为参考信号输入到自适应滤波器,另一路作为含有回声的接收信号 。自适应滤波器根据参考信号和接收信号之间的误差,不断调整滤波器的系数,使得滤波器的输出能够尽可能地逼近回声信号 。然后,从接收信号中减去滤波器输出的回声信号估计值,从而实现回声消除 。在本系统中,利用归一化最小均方(NLMS)算法来调整自适应滤波器的系数,该算法通过最小化误差的均方值来不断调整滤波器的系数,具有计算复杂度低、收敛速度较快等优点 。
在软件实现过程中,首先初始化自适应滤波器的系数,通常将其初始化为一个较小的随机值或零向量 。然后,在每一个音频采样时刻,获取参考信号 x(n) 和接收信号 y(n) 。参考信号可以是本地发送的音频信号,接收信号则是经过传输路径后带有回声的信号 。计算滤波器的输出,即
,
其中 h(i) 为滤波器的系数,M 为滤波器的阶数 。接着,计算误差信号
该误差信号反映了接收信号与滤波器输出的回声信号估计值之间的差异 。根据 NLMS 算法,更新滤波器的系数 h(i),更新公式为,
其中 μ为步长因子,它控制着滤波器系数更新的速度和收敛性能,||x(n)||2 为参考信号的能量 。步长因子 μ 的取值需要根据实际情况进行调整,取值过大可能导致算法不稳定,取值过小则会使收敛速度变慢 。在本系统中,经过多次实验和优化,将步长因子 μ设置为 0.01,能够在保证算法稳定性的同时,实现较快的收敛速度 。
回声消除效果对音频质量的影响十分显著。在未进行回声消除的情况下,音频信号中会存在明显的回声,导致语音清晰度下降,语音内容难以分辨,尤其在免提通话、视频会议等应用场景中,回声会严重影响用户的沟通体验 。而经过回声消除处理后,音频信号中的回声得到有效抑制,语音清晰度大幅提高,语音内容更加清晰可辨,能够满足用户在各种语音通信场景中的需求 。通过实际测试,在一个典型的会议室环境中,使用本系统进行视频会议,未进行回声消除时,与会者之间的语音交流存在严重的回声干扰,难以听清对方的讲话内容;而开启回声消除功能后,回声明显减弱,语音通信质量得到显著提升,与会者能够清晰地交流,大大提高了会议效率 。