File size: 3,112 Bytes
ac5007c
26f00f8
 
 
ac5007c
26f00f8
 
 
 
 
 
 
ac5007c
26f00f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
---
language:
- zh
- en
license: mit
pipeline_tag: audio-to-audio
tags:
- speech-enhancement
- noise-reduction
- axera
- ax650
- deepfilternet
---

# DeepFilterNet3.AXERA

DeepFilterNet3 (48kHz 全频带实时语音降噪) 的 AXERA 平台量化部署包 (当前支持 AX650N)。

- 模型: enc (U16) / erb_dec (U16) / df_dec (全 FP32) 3 个子图, GRU 状态跨块携带版
- 依赖: 仅 numpy + axengine (Python); C++ 为预编译 aarch64 可执行文件

## 目录

```
├── axmodels/       # enc.axmodel / erb_dec.axmodel / df_dec.axmodel
├── inference.py    # Python 推理入口 (依赖仅 numpy + axengine)
├── requirements.txt
├── assets/         # 演示音频 (带噪输入 + 增强输出样例)
├── bin/            # C++ 可执行文件 (aarch64)
└── run.sh          # 一键运行
```

## Python 运行

```bash
pip3 install numpy
# pyaxengine: https://github.com/AXERA-TECH/pyaxengine/releases/latest
pip3 install axengine-<version>-py3-none-any.whl
./run.sh input.wav output.wav
```

或:

```python
from inference import enhance_audio
out = enhance_audio(audio_float32_48k, model_dir="axmodels")
```

## C++ 运行

```bash
LD_LIBRARY_PATH=<ax_runtime>/lib ./bin/df3_ax \
  axmodels/enc.axmodel axmodels/erb_dec.axmodel axmodels/df_dec.axmodel \
  input.wav output.wav
```

## 模型说明

- 输入: 48kHz 单声道 (PCM16 wav 或 float32 数组)
- 3 子图流水线: STFT(fft 960/hop 480) -> ERB+unit_norm 特征 -> enc (GRU, 状态携带)
  -> erb_dec (m 掩码) + df_dec (coefs) -> ERB 增益 + DF 滤波(5 阶, 2 帧前瞻) -> ISTFT
- 静态 T=99 帧/块, GRU 状态跨块传递 (实时流式语义, 与官方 tract 部署一致)
- 完整转换源码见 GitHub: [DeepFilterNet3.AXERA](https://github.com/ZY-2012/DeepFilterNet3.AXERA)

## RTF(AX650N 实测, noisy_snr0.wav 10.6s)

| 推理路径 | 耗时 | RTF | 峰值内存 |
|------|------|------|------|
| C++ | 1.50 s | 0.142 | — |
| Python | 1.44 s | 0.136 | 28.9 MB |

> RTF = 推理耗时 / 音频时长(不含模型加载,RTF < 1.0 即可实时)

## 示例结果(AX650N 实测)

| 音频 | 输入 RMS | 输出 RMS | 效果 |
|------|---------|---------|------|
| `assets/noisy_snr0.wav`(SNR 0dB 带噪语音) | 0.0640 | 0.0489 | 噪声移除、语音保留 |
| `assets/enhanced_sample.wav`(上者降噪输出) | — | — | 试听对比用 |

> 其他实测(不在本仓):干净语音 RMS 0.0287→0.0270(几乎无损伤);
> 纯噪声 0.0336→0.0021(约 -24dB 压制)

## 精度(AX650N 实测)

| 指标 | 数值 |
|------|------|
| 逐张量 cosine vs ONNX(enc/erb_dec) | ≥ 0.9946(U16 量化) |
| df_dec 输出 coefs | 0.99999(全 FP32) |
| 板端端到端 vs 官方 torch 参考 | cosine 0.9857(量化损失仅 0.0005) |

## 参考

- [DeepFilterNet](https://github.com/Rikorose/DeepFilterNet)
- [DeepFilterNet3.AXERA](https://github.com/ZY-2012/DeepFilterNet3.AXERA)(完整转换源码)
- [Magnetar](https://github.com/AXERA-TECH/Magnetar) — AXERA 模型部署 agent 工具

## 技术讨论

- GitHub issues
- QQ 群: 139953715