📖 第 37 章:DSP测试实验(DSP Test)

🔧 正点原子《DMF407 开发指南》V1.0 · Chapter 37
🗨️ 「DSP 指令:让 MCU 跑数字信号处理算法。」
这一章在干嘛? DSP 实验:Cortex-M4 内置 DSP 指令(MAC、SIMD)、CMSIS-DSP 库、FIR 滤波器与 FFT 性能测试。
37.1 DSP 简介与环境搭建37.2 硬件设计37.3 程序设计37.4 下载验证

37.1 DSP 简介与环境搭建

DSP(Digital Signal Processing)指令 = 单周期乘累加(MAC)和 SIMD 操作。

原书图 37.1.1:Cortex-M4 DSP 指令示例
原书图 37.1.1:Cortex-M4 DSP 指令示例

CMSIS-DSP 库:ARM 官方提供,包含 100+ DSP 函数(FIR/IIR/FFT/Matrix/Statistics 等)。

编译 DSP 代码:MDK 必须选 --cpu Cortex-M4.fp,否则 DSP 指令不生效。

37.2 硬件设计

TFTLCD 显示 FFT 频谱(输入信号由 DAC 输出,ADC 采样)。

37.3 程序设计

37.3.1 启用 DSP

CubeMX → Project Manager → Advanced Settings → 勾选 DSP。

或者 MDK:

37.3.2 FFT 示例

#include "arm_math.h"

#define N 1024
float32_t input[N], output[N];
arm_rfft_fast_instance_f32 fft;
arm_rfft_fast_init_f32(&fft, N);

// 填充 input → 执行 FFT
arm_rfft_fast_f32(&fft, input, output, 0);

// 计算幅值
float32_t magnitude[N/2];
arm_cmplx_mag_f32(output, magnitude, N/2);

原书图 37.3.2.1:FFT 计算流程
原书图 37.3.2.1:FFT 计算流程

37.3.3 FIR 滤波

arm_fir_instance_f32 fir;
float32_t coeff[NUM_TAPS] = {...};
float32_t state[N + NUM_TAPS - 1];
arm_fir_init_f32(&fir, NUM_TAPS, coeff, state, N);
arm_fir_f32(&fir, input, output, N);

原书图 37.3.3.1:FIR 滤波器结构
原书图 37.3.3.1:FIR 滤波器结构

原书图 37.3.3.2:CMSIS-DSP 滤波前后波形对比
原书图 37.3.3.2:CMSIS-DSP 滤波前后波形对比

37.4 下载验证

DAC 输出 1 kHz 正弦波叠加 5 kHz 噪声 → ADC 采集 → FIR 低通滤除 → LCD 显示滤波前后波形与频谱。

音频/电源/电机控制 都离不开 DSP:Cortex-M4F + FPU + DSP = 三位一体,数字信号处理效率吊打普通单片机。

🧠 小测验
Cortex-M4 DSP 指令能做什么?
单周期 MAC、SIMD、饱和运算。
CMSIS-DSP 库提供什么?
FFT/FIR/IIR/Matrix/Statistics 等函数。
使用 DSP 需要编译选项吗?
需要 --cpu Cortex-M4.fp
← 上一篇🏠 顶层目录下一篇 →