You need to enable JavaScript to run this app.
AI 数据湖服务

AI 数据湖服务

复制全文
音频处理
音频信噪比计算
复制全文
音频信噪比计算

算子介绍

描述

音频信噪比(SNR)计算器,基于非负矩阵分解(NMF)进行信号-噪声分离

核心功能

  • 对音频进行 STFT 频谱分析;
  • 使用 NMF 将频谱分解为信号与噪声分量;
  • 基于重建的时域信号与噪声估计能量比值,计算 SNR(单位 dB)。

格式支持

  • 常见音频格式:mp3, wav, flac, ogg, aac, m4a
  • 支持本地路径与对象存储路径(tos:// 或 s3://)

Daft 调用

算子参数

输入

输入列名

说明

audio_paths

音频路径数组(支持本地与对象存储路径) - 本地路径:绝对路径或相对路径 - 对象存储:以 "tos://" 或 "s3://" 开头的路径

输出

浮点数组(float64),每行为对应音频的 SNR 值(单位 dB)。

参数

如参数没有默认值,则为必填参数

参数名称

类型

默认值

描述

n_components

int

2

NMF 分解的组件数量 默认值:2(通常认为第一个分量为信号、其余分量为噪声)

max_iter

int

200

NMF 最大迭代次数 默认值:200

调用示例

示例代码展示如何使用 Daft 运行算子计算音频的信噪比(SNR,单位 dB)。

from __future__ import annotations

import os

import daft
from daft import col
from daft.las.functions.audio import AudioSNR
from daft.las.functions.udf import las_udf

if __name__ == "__main__":
    if os.getenv("DAFT_RUNNER", "native") == "ray":
        import logging

        import ray

        def configure_logging():
            logging.basicConfig(
                level=logging.INFO,
                format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
                datefmt="%Y-%m-d %H:%M:%S.%s".format(),
            )
            logging.getLogger("tracing.span").setLevel(logging.WARNING)
            logging.getLogger("daft_io.stats").setLevel(logging.WARNING)
            logging.getLogger("DaftStatisticsManager").setLevel(logging.WARNING)
            logging.getLogger("DaftFlotillaScheduler").setLevel(logging.WARNING)
            logging.getLogger("DaftFlotillaDispatcher").setLevel(logging.WARNING)

        ray.init(dashboard_host="0.0.0.0", runtime_env={"worker_process_setup_hook": configure_logging})
        daft.context.set_runner_ray()
    daft.set_execution_config(actor_udf_ready_timeout=600)
    daft.set_execution_config(min_cpu_per_task=0)

    # 使用环境变量构建URL
    tos_dir_url = os.getenv("TOS_DIR_URL", "las-cn-beijing-public-online.tos-cn-beijing.volces.com")
    samples = {
        "audio_path": [
            f"https://{tos_dir_url}/public/shared_audio_dataset/sample.mp3"
        ],
    }

    ds = daft.from_pydict(samples)

    # 使用 Daft 进行分布式处理
    snr_udf = las_udf(
        AudioSNR,
        construct_args={
            "n_components": 2,
            "max_iter": 200,
        },
    )

    ds = ds.with_column("snr_db", snr_udf(col("audio_path")))
    ds.show()
    # ╭──────────────────────────────────────────┬──────────╮
    # │ audio_path                               ┆ snr_db   │
    # │ ---                                      ┆ ---      │
    # │ Utf8                                     ┆ Float64  │
    # ╞══════════════════════════════════════════╪══════════╡
    # │ https://las-cn-beijing-publi-…           ┆ 12.34    │
    # ╰──────────────────────────────────────────┴──────────╯
最近更新时间:2026.01.08 19:15:09
这个页面对您有帮助吗?
有用
有用
无用
无用