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 工具
|