构建定制音频频谱分析仪
作为一名音乐人,我不仅花费大量时间演奏乐器,也经常对音频信号进行调整,因此我一直对声音的视觉呈现充满兴趣。正因如此,我想设计一个基于硬件的实时音频频谱分析仪。
技术背景
要理解如何制作音频频谱分析仪,你需要掌握一些信号处理的基础知识:
抗混叠(Anti-Aliasing):对于去除高于奈奎斯特频率的成分至关重要。否则,在应用傅里叶变换时,信号会与自身重叠。
直流偏移(DC-Offset):微控制器的ADC只能测量0V到+VCC之间的电压。由于音频信号通常没有直流偏移,其电压会波动至负值。如果直接接入,信号会在0V处被截断(从而丢失负半部分),这属于硬性削波,会导致严重的谐波失真。为避免这种情况,我们使用求和放大器(运算放大器)来添加一个直流偏置。这会将整个波形垂直移动,使信号保持在ADC可测量的范围内,同时不丢失任何数据。
采样率(96kHz):虽然48kHz是标准值,但需要更陡峭、更复杂的滤波器。运行在96kHz时,我们有更大的余量来进行更清晰的处理。
下采样(Decimation):在后续计算频谱时,我们可以测量到采样率一半频率范围内的信号。由于吉他音频信号的最大频率约为5kHz,因此实际上并不需要完整的96kHz采样率。通过下采样,我们每隔N个样本丢弃一个,从而实现有效采样率为96kHz/N。在更高的采样率下,每个FFT频段的频率分辨率会降低。由于低频乐器信号(如贝斯)之间的差异仅几赫兹,若不进行调整,我们无法轻易区分E3和F3音符。因此,我们采用较低的有效采样频率。由于此处也可能发生混叠现象,因此需要使用数字滤波器以确保信号保持干净。
傅里叶变换:用于将时间域信号转换为频率域的数学运算。在此过程中,我们可以分离出低频、中频和高频部分。
硬件设置
我为这个项目选择了CY8CKIT-062S2-AI开发板。它是一款功能极为全面的“即用型”开发板,内置锂聚合物电池充电器、蓝牙低功耗(BLE)连接功能,以及实时音频分析所需的高频处理能力。
在视觉效果方面,我使用了三条WS2812B RGB LED灯带,并将它们映射到贝斯吉他发出的音频信号上。
连接LED灯带:
CY8CKIT采用3.3V逻辑电平,而WS2812B灯带通常需要5V电源。
通常情况下,我们会使用电平转换器或推挽电路将3.3V信号提升至5V。
但:许多5V灯带对3.3V信号非常敏感,可能直接触发点亮。因此,在搭建复杂电路之前,先尝试直接连接,也许就能成功!
软件设置
我使用Arduino IDE和Adafruit NeoPixel库来开发软件。
项目构建
抗锯齿处理
首先,必须设计合适的抗锯齿滤波器。我们已经将模拟采样率提高到了96kHz。
音频信号的最高频率约为20kHz(几乎无法察觉),这意味着我们需要至少40kHz的采样频率才能准确测量音频信号。由于我们希望有额外的频率裕量,因此决定使用96kHz。这为我们提供了(96/2)- 20 = 28kHz的滤波器裕量!
我使用了一个在线滤波器设计工具来计算出正确的电阻和电容值。
信号测量
这里最大的难题在于采样方法。使用简单的 analogRead() 是一个阻塞过程,会导致时序出现抖动。如果采样不完全一致,FFT 结果就会看起来像数字噪声。为了解决这个问题,我实现了硬件定时器,以确保 ADC 按固定间隔采集样本。
下一个问题是音频信号没有固定的电压电平。典型的被动吉他输出约为 100mV,但这一数值可能有很大差异。这带来了重大挑战:
如果内置的电压放大(增益)过高,信号就会开始削波。如前所述,这会产生不必要的失真!
如果内置的电压放大过低,FFT 就无法清晰地检测到频率。
由于不同吉他的输出电平不同,同一块固定电路板可能对其中一把吉他工作完美,却对另一把吉他完全产生削波。为解决此问题,我实现了一个可调节增益级,通过电位器即可轻松配置。
为了进行原型制作,我将测得的频率及其在FFT中的对应频段进行绘制,并精确记录了希望设置低频、中频和高频截止点的位置。这些数值随后可轻松地在软件中配置。
直流偏移
对于直流偏移,我使用了一个求和放大器。这样可以将计算出的VCC/2偏置值加入信号,使信号始终精确处于ADC量程的中间位置。这会在FFT中产生一个位于0频段(DC)的峰值,但我们可以使用软件轻松滤除该峰值。
PCB连接:
•Vin & GND:PSOC6的VCC和GND
•IN & GND:音频输入信号
•GND & OUT_DC:输出信号
•OUT:不使用
下一步工作
MIDI检测:我已经开始开发一种算法,用于识别所演奏音符的基本频率。完成后,我将利用内置的BLE模块以MIDI信号的形式广播这些数据。
外壳设计:目前项目仍安装在一个笨重的原型箱中。目标是缩小物理尺寸,打造一个简洁美观的外壳,使其能完美贴合吉他。
应用:我计划开发一款配套应用程序,利用蓝牙低功耗(BLE)将设备转变为数字乐器调音器,实时可视化你的音符是否准确、偏高或偏低。
最终思考
从零开始构建音频频谱分析仪,是理解硬件信号与软件计算之间桥梁的绝佳方式。通过选择合适的采样率并保持信号链清晰,你可以将任何乐器变成一场动态的灯光秀。
本文编译自hackster.io





