File size: 3,166 Bytes
ee4210e
63d8ba4
 
 
 
 
ee4210e
63d8ba4
ee4210e
 
63d8ba4
ee4210e
63d8ba4
 
 
 
 
 
 
da6e607
ee4210e
63d8ba4
ee4210e
63d8ba4
 
 
 
 
6c71c1b
63d8ba4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6c71c1b
63d8ba4
 
 
 
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
---
tags:
  - speech-enhancement
  - noise-cancellation
  - denoising
  - onnx
license: mit
library_name: onnxruntime
---

# DeepFilterNet3 ONNX

Verified neural-network export of the official
[DeepFilterNet3 v0.5.6](https://github.com/Rikorose/DeepFilterNet/tree/v0.5.6)
checkpoint for native 48 kHz speech enhancement.

This is the neural graph only. It expects normalized spectral features and
returns an ERB mask plus complex deep-filter coefficients. A compatible STFT,
feature-normalization, filtering, and synthesis implementation is required.

## Files

| File | Description |
|---|---|
| `deepfilter.onnx` | FP32 ONNX graph with a dynamic frame axis |
| `deepfilter-auxiliary.bin` | Canonical ERB matrices and Vorbis window for legacy consumers |
| `config.json` | Model and DSP configuration |
| `export_manifest.json` | Source checksum, artifact checksums, and ONNX parity results |

## Tensor contract

| Direction | Name | Shape | Type |
|---|---|---|---|
| input | `feat_erb` | `[1, 1, T, 32]` | float32 |
| input | `feat_spec` | `[1, 2, T, 96]` | float32 |
| output | `erb_mask` | `[1, 1, T, 32]` | float32 |
| output | `df_coefs` | `[1, 5, T, 96, 2]` | float32 |

The `feat_spec` channels are real then imaginary. The coefficient axes are
batch, filter order, frame, frequency, then real/imaginary.

## Required DSP contract

- sample rate: 48,000 Hz
- STFT: 960-point real FFT, 480-sample hop, Vorbis window
- spectrum: 481 bins; deep filtering: first 96 bins
- ERB bank: 32 disjoint bands with at least 2 FFT bins per band
- normalization: `tau=1.0`, rounded alpha `0.99`; ERB mean state linearly
  initialized from -60 dB to -90 dB and complex unit state from 0.001 to 0.0001
- deep filter: order 5, lookahead 2, applied from an immutable copy of the noisy
  spectrum before fusion with the ERB-masked spectrum
- batch/offline parity: append one 960-sample analysis tail and remove the
  480-sample STFT delay after overlap-add synthesis

`deepfilter-auxiliary.bin` is little-endian float32 data containing, in order,
the `[481,32]` forward ERB matrix, `[32,481]` inverse ERB matrix, and `[960]`
Vorbis window. New integrations can generate these deterministic constants.

## Verification

The export script checks the graph with ONNX, then compares ONNX Runtime CPU
outputs with PyTorch for several frame lengths. Exact errors and SHA-256 hashes
are recorded in `export_manifest.json`.

End-to-end validation used 20 VoiceBank-DEMAND clips (101.51 seconds total):

| Runtime | PESQ | STOI | SI-SDR |
|---|---:|---:|---:|
| official DeepFilterNet v0.5.6 | 2.9585 | 0.96064 | 18.228 dB |
| speech-core with this graph | 2.9602 | 0.96064 | 18.225 dB |

The speech-core output matched the official reference at 54.85 dB mean SI-SDR
with 0.000140 mean waveform RMSE. These values validate the tested native DSP
integration; other implementations must follow the contract above.

## Attribution and license

DeepFilterNet is by Hendrik Schröter and contributors and is dual-licensed
under Apache-2.0 or MIT. This repository publishes the converted model under
the MIT option. See the upstream project and papers for architecture and
training details.