音频信噪比计算
更新时间:2026-06-15
简介
音频信噪比(SNR)计算器,基于非负矩阵分解(NMF)进行信号-噪声分离
功能描述
- 对音频进行 STFT 频谱分析;
- 使用 NMF 将频谱分解为信号与噪声分量;
- 基于重建的时域信号与噪声估计能量比值,计算 SNR(单位 dB)。
- 常见音频格式:mp3, wav, flac, ogg, aac, m4a
- 支持本地路径与对象存储路径(bos:// 或 s3://)
算子参数
输入
| 输入 | 含义 |
|---|---|
| audio_paths | 音频路径数组(支持本地与对象存储路径) - 本地路径:绝对路径或相对路径 - 对象存储:以 "bos://" 或 "s3://" 开头的路径 |
输出
| 输出 | 含义 |
|---|---|
| result | pa.Array: 浮点数组(float64),每行为对应音频的 SNR 值(单位 dB)。 |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| n_components | int | 2 | NMF 分解的组件数量 默认值:2(通常认为第一个分量为信号、其余分量为噪声) |
| max_iter | int | 200 | NMF 最大迭代次数 默认值:200 |
调用示例
Python
1from __future__ import annotations
2
3import os
4
5import daft
6from daft import col
7
8from daft.aihc.common.udf import aihc_udf
9from daft.aihc.functions.audio.audio_snr import AudioSNR
10
11if __name__ == "__main__":
12 if os.getenv("DAFT_RUNNER", "native") == "ray":
13 import ray
14 ray.init(dashboard_host="0.0.0.0", ignore_reinit_error=True)
15 daft.set_runner_ray()
16 daft.set_execution_config(actor_udf_ready_timeout=6000, min_cpu_per_task=0)
17
18 # TODO: 根据实际场景准备样本数据
19 samples = {"audio_paths": [...]}
20 ds = daft.from_pydict(samples)
21 constructor_kwargs = {
22 "n_components": 2,
23 "max_iter": 200,
24 }
25 ds = ds.with_column(
26 "result",
27 aihc_udf(
28 AudioSNR,
29 construct_args=constructor_kwargs,
30 num_cpus=1,
31 concurrency=4,
32 batch_size=8,
33 )(col("audio_paths")),
34 )
35 ds.show()
评价此篇文章
