File size: 4,301 Bytes
9c5e735
 
1ebfbbf
 
 
 
 
 
 
 
9c5e735
1ebfbbf
450870c
1ebfbbf
450870c
8131a83
1ebfbbf
450870c
 
1ebfbbf
450870c
1ebfbbf
283b7b7
450870c
283b7b7
1ebfbbf
8131a83
 
 
283b7b7
 
 
 
1ebfbbf
450870c
1ebfbbf
450870c
 
1ebfbbf
8131a83
 
 
1ebfbbf
8131a83
450870c
1ebfbbf
 
 
450870c
1ebfbbf
 
450870c
8131a83
 
 
 
 
1ebfbbf
 
8131a83
 
 
1ebfbbf
 
 
 
 
 
 
 
 
450870c
1ebfbbf
 
450870c
8131a83
1ebfbbf
450870c
1ebfbbf
 
 
 
8131a83
1ebfbbf
 
8131a83
450870c
1ebfbbf
 
450870c
1ebfbbf
450870c
 
 
1ebfbbf
450870c
1ebfbbf
450870c
 
283b7b7
 
 
450870c
 
1ebfbbf
450870c
1ebfbbf
450870c
 
 
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
103
104
105
106
107
108
109
110
111
---
license: mit
library_name: axera
pipeline_tag: audio-to-audio
tags:
- axera
- ax650
- npu3
- speech-enhancement
- h-gtcrn
---

# H-GTCRN.AXERA

[H-GTCRN](https://github.com/Max1Wz/H-GTCRN) 语音增强 AXERA 板端推理 demo。
AX650/NPU3 预编译模型 + Python SDK + C++ 可执行文件,即取即用,**wav 进 wav 出**- [x] Python 示例(numpy + pyaxengine,无 torch/onnxruntime 回退)
- [x] C++ 示例(`bin/` 下可执行文件,无需编译)

## 支持模型

| 模型 | 输入 | 输出 | axmodel | 端到端 RTF | NPU core RTF |
|------|------|------|---------|:--:|:--:|
| H-GTCRN-core | 16kHz wav(1/2 声道) | 16kHz 增强 wav | 24.2 MB | ~0.36 | 0.0023 |

> 完整链路(与官方 GTCRN_IVA 一致):STFT → WPE 去混响 → auxIVA 声源分离 →
> 特征构造 → [NPU: GTCRN 核 `feat→mask`] → 掩码应用 → ISTFT。
> CPU 侧为 numpy / C++ 实现,NPU 只跑神经核。
> **端到端 RTF =(CPU 链路 + NPU)总耗时 / 音频时长**(10s 音频约 3.6s,AX650 实测);
> NPU core RTF = 仅神经核推理 / 音频时长。CPU 链路占绝对主导:WPE/IVA 是
> 整段统计算法(每频点 36×36 矩阵求逆 + 10 轮迭代),与上游一致为离线整段推理,
> 非流式;如需实时需改造为在线分块算法。

## 目录结构

```
H-GTCRN.AXERA/
├── models/                 # model.axmodel + model_meta.json
├── bin/                    # h_gtcrn_ax650 可执行文件(板端直接运行,wav→wav)
├── python/                 # Python SDK + numpy 版 wav→wav demo
├── samples/                # 带噪/增强对比音频
├── run.sh                  # Python 一键推理
├── run_cpp_ax650.sh        # C++ 一键推理(wav→wav)
├── setup.sh                # 板端 Python 依赖安装
└── README.md
```

## 快速开始(AX650 板端)

```bash
# 下载本仓库到板端后:
bash run_cpp_ax650.sh        # C++ 一键降噪:Samples1_noisy.wav → output_cpp_enhanced.wav
# 或 Python:
bash setup.sh                # 安装依赖(numpy + pyaxengine,已装则跳过)
python3 python/audio_demo.py --model models/model.axmodel \
  --input-wav samples/Samples1_noisy.wav --output output_enhanced.wav
```

输入要求:16kHz PCM16 wav,1 或 2 声道;长度 ≤ 10.0s(626 帧,自动补零),更长请
自行分片。板端运行库在 `/soc/lib`,系统已配置搜索路径,一般直接运行即可;如提示
找不到 `libax_*.so`,再加 `export LD_LIBRARY_PATH=/soc/lib:${LD_LIBRARY_PATH:-}`。

## Python SDK

```python
import numpy as np
from h_gtcrn_core_sdk import ModelSession

feat = np.load("examples/sample_input.npy").astype("float32")
session = ModelSession("models/model.axmodel")
mask = session.run_named({"feat": feat})["mask"]
```

依赖仅 numpy + pyaxengine(板端),无 torch/onnxruntime 回退。
`python/audio_demo.py` 是完整 wav→wav demo(numpy 实现 CPU 链路)。

## C++ 推理(bin/ 可执行文件)

`bin/h_gtcrn_ax650` 已按 AX650 交叉编译好,板端直接运行:

```bash
./bin/h_gtcrn_ax650 models/model.axmodel samples/Samples1_noisy.wav output_enhanced.wav --bench 20
```

输出 16kHz PCM16 增强 wav,并打印 CPU 链路耗时 / NPU 耗时 / RTF。
C++ 源码(编译方法 + 工具链下载说明)见 GitHub:
<https://github.com/AXERA-TECH/H-GTCRN.AXERA>

## 示例音频 (samples/)

- `Samples1_noisy.wav` — 原始 16kHz 双通道带噪输入(RMS 0.09499)
- `Samples1_board_enhanced.wav`**AX650 板端增强输出**(RMS 0.02932)
- `Samples1_core_ref_enhanced.wav` — ONNX 参考增强输出

## 验证(AX650 板端实测)

| 指标 | 值 |
|------|-----|
| 端到端 RTF(CPU 链路 + NPU)/ 10s 音频 | ~0.36(C++ 3.6s;numpy 3.9s) |
| NPU core 20 次平均耗时 | 22.8 ms(RTF 0.0023) |
| C++ 输出 vs torch 链参考 cosine | 0.99999 |
| 板端 vs PyTorch mask cosine | 0.99876 |
| 板端增强音频 vs 原版 cosine | 0.99947 |

## 参考

- [H-GTCRN](https://github.com/Max1Wz/H-GTCRN) — 原始模型
- [H-GTCRN.AXERA(GitHub 源码)](https://github.com/AXERA-TECH/H-GTCRN.AXERA) — 模型转换 + C++ 源码
- [Magnetar](https://github.com/AXERA-TECH/Magnetar) — AXERA 模型部署 agent 工具