在 Mac 上做 ADSP-SC589 的音频实验
这学期数字信号处理实验课用的板卡是 ADI 的 ADSP-SC589 EZ-Board,一块音频开发板: 一颗 ARM 核加两颗 SHARC DSP 核,板上有 ADC 和 DAC。课上的作业基本都是同一个套路, 音频从 ADC 进来,在 SHARC 上做处理,再从 DAC 出去。
代码在 github.com/soundadam/sc589-audio。 板卡驱动和音频通路那部分是从 ADI 的示例改来的,带着 ADI 的版权声明,没法公开,所以仓库里只有我自己写的部分。
工具链不支持 Mac
ADI 的开发环境 CrossCore Embedded Studio(CCES)只有 Windows 和 Linux x86 版本, 调试器的驱动也没有 macOS 版。我手边只有一台 Mac,没有 Windows 笔记本,所以把流程拆成了两半:
- 编译在 Windows 上。 一台装了 CCES 的 Windows 机器只负责编译。Mac 上一个脚本把当前的代码传过去,
用命令行编译,再把生成的启动文件(
.ldr)拿回来。 - 运行在 Mac 上。 板卡自带一个 USB 转串口,接到 Mac 上。把板子拨到串口启动模式,
Mac 按芯片 Boot ROM 的协议把
.ldr从串口发进去,程序跑起来以后,输出也从同一个串口读回来。
这样日常改代码、上板、看结果都在 Mac 上完成,不需要调试器。代价是不能单步调试, 真要单步的时候还得去 Windows 那边。
滤波器本身写成不依赖板卡的 C 代码,在 Mac 上就能编译和测试;设计系数、画图、写报告用的是 Python 和 LaTeX。
第一次实验:FIR 和 IIR
第一次作业是在板上实现截止频率 2 kHz 的两个低通滤波器,31 阶 FIR 和 8 阶 IIR, 比较它们的冲激响应、幅频、相频、群时延和计算量。两个滤波器同时跑在左右两个声道上, 板子启动时把各自的冲激响应和运算周期数打到串口,报告里的图和数字都从这份输出生成。
结论和教科书一致:
- FIR 的系数对称,相位是线性的,所有频率都延时 15.5 个采样,波形不变形;
- 8 阶 IIR 的过渡带陡得多,每个采样的乘法也更少,但相位不是线性的,截止频率附近延时最大;
- 两者各有用处,要看更在乎波形还是更在乎选择性和运算量。
报告源文件在仓库的 coursework/E01-fir-iir/ 目录下。
如果你也用 Mac,又刚好要碰 ADI 的 SHARC 板卡,串口启动的脚本(host/board/uart_boot.py)
或许能直接拿去用;为什么这样选、试过哪些别的办法,写在仓库的
ADR 0001 里。