SuperAPI AI 工具集

dsp-engineer

编程与开发

查看项目

更新于 10-16 04:14

技能介绍

用途

DSP Engineer 是一个数字信号处理(DSP)工程指南型技能,用于以《Think DSP》的教学方式推理 DSP 问题:从可编程信号出发,检查时域与频域,然后把想法转化为清晰的 C++ 实现。它适合在需要解释、设计、调试或实现 DSP 相关任务时使用。

该技能与同仓库的 dsp 技能互补:dsp 用于生产级音频算法和 cookbook 式实现;dsp-engineer 用于概念优先的分析、推导、实验脚手架,以及把 Think DSP 风格的 Python/NumPy 示例翻译成 C++。

来源说明

该技能基于对 Allen B. Downey 所著《Think DSP》(Green Tea Press,2014 年版权,以 Creative Commons Attribution-NonCommercial-ShareAlike 4.0 分发)的审阅。其参考资料被视为经过改造的工程笔记,而非原书的替代品。使用其解释、练习或示例结构时应注明 Think DSP。

工作流

  1. 将任务分类为:合成、分析、变换、比较、重采样或系统建模。
  2. 先确定单位:采样率(Hz)、时长(秒)、帧数、bin 间距、Nyquist/折叠频率、幅度约定,以及信号是实数还是复数。
  3. 选择表示形式:
    • Signal:可在任意时刻求值的数学信号。
    • Wave:采样值加上采样率和起始时间。
    • Spectrum:复数频率 bin 加上 bin 频率。
    • Spectrogram:按时间索引的一组短时频谱。
  4. 构建能证明该想法的最小 C++ 实验。分析代码优先使用 std::vector<double> 和 std::complex<double>;行为正确后再改用 float 和库 FFT。
  5. 用往返和不变量验证:DFT 后 IDFT、DCT 后逆 DCT、直接卷积对比频域乘法、已知谐波峰值、预期混叠折叠或已知自相关滞后。
  6. 之后才针对实时约束优化:预分配、避免音频回调中的锁和分配、平滑参数,并用 FFT 库替换直接 DFT 示例。

参考文件映射

仅按当前任务需要读取文件:

  • references/thinkdsp-concepts.md:需要 Think DSP 章节地图、概念摘要、公式或任务路由时读取。
  • references/cpp-patterns.md:需要书中 Python/NumPy 示例的 C++ 翻译时读取。
  • references/engineering-checks.md:需要实现检查、缩放约定、测试用例、常见 DSP 失败模式或相干音/子样本相位误差测量时读取。
  • assets/thinkdsp.hpp:需要一个紧凑的教育性 C++ 头文件复制到原型中或作为参考实现时读取。

C++ 默认约定

  • 离线分析和示例使用 double;测试通过后在实时路径改用 float。
  • DFT、DCT 推导、传递函数、调制和相位相关工作使用 std::complex<double>。
  • 命名约定:采样率 sampleRate、帧数 n、时间样本 ts、幅度 ys、复数 bin hs、bin 频率 fs。
  • DFT 定义为 X[k] = sum_n x[n] * exp(-i * 2pikn/N),逆 DFT 为 x[n] = (1/N) * sum_k X[k] * exp(i * 2pikn/N)。
  • 对于恰好落在 bin k 上的实正弦波,幅度估计为 2 * abs(X[k]) / N,DC 和 Nyquist bin 除外。
  • 生产环境使用经过验证的 FFT:FFTW、KissFFT、pffft、JUCE dsp::FFT、vDSP、IPP 或宿主框架的 FFT。本技能中的直接 DFT 示例仅用于清晰性和小规模测试。

工程规则

  • 在合成、分析、下采样或调制前检查 Nyquist。高于 sampleRate / 2 的分量在采样前未移除就会混叠。
  • 除非片段恰好周期,否则在频谱分析前对有限片段加窗。Hamming 是良好默认值;其他窗需有意选择。
  • 区分循环卷积与线性卷积。信号不应回绕时,在 FFT 卷积前补零。
  • 将 bin 0 视为 DC/偏置。微分会破坏它,积分无法在没有积分常数的情况下恢复它。
  • 将频域滤波器视为复数操作。幅度改变振幅;角度改变相位。
  • 频谱图段长是分辨率权衡:时间分辨率为 N / sampleRate;频率分辨率为 sampleRate / N。
  • 通过分布、序列相关和对数-对数功率斜率验证噪声。白噪声斜率接近 0,粉红噪声接近 -beta,布朗/红噪声接近 -2。

适用场景

适合需要概念优先的 DSP 分析、推导、实验脚手架搭建,以及将 Think DSP 风格示例翻译为 C++ 的场合。

限制

资料未提供具体的收费、价格、平台支持范围或效果保证等信息。