` 本文提供有关采样音频信号和将数据传输到PC进行分析的详细信息。 为什么? 在之前的一篇文章中,我提出了一个简单的MEMS麦克风电路,可以包含在机器人系统或任何其他电子项目中。如果您尚未确定如何准确生成模拟音频,请从该文章开始。如果您已经有一个有效的麦克风界面,现在您想要对音频数据进行采样和分析,那么您已经为本文做好了准备。 我们都知道数字数据在处理和存储方面的优势。但为什么要将数据传输到PC?好吧,如果您的目标只是录制声音然后进行分析或保存以备将来享受,那么答案是显而易见的。但如果目标是系统内处理呢?即使最终应用程序需要机器人自己处理音频数据,PC分析也很有价值 - 可用于PC的功能强大且用户友好的软件可以帮助您开发和微调最终将在机器人处理器中实现的算法。 采样和计时 一旦获得缓冲的音频信号,将音频数据传输到PC需要两个主要任务:模数转换和机器人到PC数据传输。 让我们首先看一下模数转换,特别是涉及的时序细节。以下示意图摘录显示了麦克风电路和与EFM8微控制器的连接:
采样率 通常,可听频率的标准范围是20Hz至20kHz。这是最大或最佳范围; 实际范围因人而异。此外,对于许多类型的声音再现,我们不必代表整个可听频率范围。例如,当音频信号被限制在低于4kHz的频率时,可靠的语音通信是可能的,并且10kHz的上限允许体面(不是很大的)音乐再现。高质量音频的标准采样率为44.1 kHz,足以支持高达20 kHz的频率。 我的观点是你不受20 kHz带宽的限制。您可以根据所需的音频质量选择带宽,然后将ADC配置为采样率约为带宽的两倍。我正在以16 kHz运行我的14位EFM8 ADC,这使我能够捕获高达近8 kHz的频率。
存储与发送 数字音频可能看起来像是旧技术,但音频数据在微控制器环境中仍需要大量内存。如果您以14位和每秒16,000个采样(即16ksps)进行采样,则每秒音频需要32,000字节的数据。如果您的MCU只有4 kB的RAM,则限制为八分之一秒。使用125毫秒的录音,你无能为力。 因此,对于这个项目,我们不会存储音频数据。相反,我们将实时连续地将其传输到PC:只要ADC生成每个14位样本,我们就会将两个字节从串行端口发送出去。您可以使用本文中讨论的相同的硬件加软件安排,将麦克风纳入机器人技术 -ie,Pololu USB-to-UART转换器板(见下图ICfans)和YAT(“又一终端”)。 传输完成后,我们将数据从YAT移动到Excel。 时间冲突? 这里主要关注的是确保在新ADC样本到达之前成功传输两个字节。以16 ksps运行的ADC将每隔62.5μs生成一个样本。UART硬件必须每字节传输10位(8个数据位加一个起始位和一个停止位)。这总共是20位,然后我们还需要少量时间来处理中断并执行必要的指令。因此,让我们包括一些余量,并说25位周期必须适合ADC样本之间的62.5μs。
我们将波特率提高到最接近的标准值,即460800.EFM8分频器硬件的限制导致实际波特率为453704.这是否足够接近?我从这篇文章得出的结论是,当波特率差异不超过3.75%时,UART通信通常是可靠的。460800和453704之间的差异约为1.5%,所以应该没问题。 在我们继续之前,让我们使用调试信号和范围来确认我们没有时序冲突
如您所见,C2ADAPTER_LEDGRN在中断例程开始时(即,当新的ADC样本可用时)变为高电平,在中断例程结束时变为低电平,此时字节已经传输并且处理器已准备好开始闲着等待下一个样本。第一个示波器捕获中的光标确认上升沿相隔约62.5μs。
您已经可以看到在完成数据传输和下一个样本到达之间有足够的时间。确切地说,我们有18.8μs的空闲时间,这是ADC采样周期的30%:
YAT和Excel 使用上面显示的代码发送字节(如果需要,可以删除C2ADAPTER_LEDGRN = HIGH和C2ADAPTER_LEDGRN =LOW语句)。 请注意,如果您处理大量数据,YAT可能会给您带来问题。显然,它不喜欢终端监视器中有大量数据,因此保存到文件技术变得不方便。 另一种方法是使用日志文件,但我在日志记录功能方面遇到了严重困难 - 如此严重以至于我放弃了YAT并决定编写我自己的C#串口日志记录软件,它完全符合我的要求。这里是:
到目前为止,它运作良好。我可能会继续添加功能,直到我有一个通用的串行端口程序,高效可靠地(再一次)确实是我需要它做什么,仅此而已。当我确信它稳定且可以充分处理错误情况时,我将使记录器可供下载。 它目前安排了16,000个音频样本,相当于录制时间的一秒,它执行以下操作: 将字节转换为ADC计数和毫伏 生成两个音频数据的时域图 通过计算和绘制快速傅立叶变换(FFT)数据来执行频谱分析 总结 我们已经讨论了一些与音频信号数字化相关的重要细节,我们将自定义硬件与Excel结合使用,以可视化和分析数字音频数据。我甚至还开发了一些方便的串口软件 - 一个很好的提醒,项目并不总是遵循预期的路线。 `
|