# 🏆 复杂时变声学环境主动降噪（ANC）算法挑战赛 - 官方基线系统

欢迎参加**2026年第二届CCF先进音频技术竞赛**！

本仓库包含由大赛组委会提供的官方基线（Baseline）系统。该基线提供了一套完整的端到端深度学习主动降噪解决方案，包含数据加载、网络模型构建、物理声学路径模拟、训练逻辑以及多维度的效果评估代码。


---

# 📢 【赛事官方公告】参赛模型提交工具包发布：引入切窗评估与工程落地规范

各位参赛选手，大家好：

为了进一步贴近真实端侧边缘设备的落地需求，全面考察算法在面对环境突变时的**动态鲁棒性**与**工程移植性**，组委会现正式发布配套的 **参赛模型提交工具包（Participant Kit）。

本次更新从“整体性能评估”转向了“严苛的动态时变与工程限制”，核心升级内容如下：

### 🎯 1. 评分机制：引入“切窗评估（Windowed Scoring）”

为防止算法利用长时的平稳表现来掩盖短时的发散失控，评测器彻底摒弃了整段一次性 FFT 的指标计算模式：

* **六窗等权平均**：3 秒的正式计分段现被严格划分为 6 个 0.5 秒（24000 采样点）的连续互不重叠窗口。各窗口分别独立计算 1/3 倍频带降噪量与反弹指标后，再进行等权算术平均。


* **更严苛的水床效应惩罚**：新的反弹指标会先在每个 0.5 秒窗口内部找出最恶劣的 1/3 倍频带反弹峰值，然后再对这 6 个峰值求平均。这意味着任何短暂的局部发散或啸叫都将显著拉低总分。



### ⏱️ 2. 时序逻辑：固定“初始化 + 计分”时间轴

为了模拟设备刚开机或环境刚突变时的真实物理状态，评测时间轴已被完全硬编码：

* **固定的 3.5 秒闭环**：强制执行 0.5 秒初始化（不计入声学成绩） + 3.0 秒正式计分。不允许自行改变评测时长。


* **状态完全连续**：在初始化与正式计分信号之间，系统**不会**调用 `reset()`，模型状态和次级路径状态必须保持绝对连续。


* **初始化算力计入考核**：0.5 秒初始化阶段产生的任何一次性计算（Startup MACs）都必须包含在您申报的“峰值事件 MAC”中。



### 🛡️ 3. 工程依赖“白名单”化：剔除外部训练库

为保证代码最终能无缝移植到轻量级端侧 C++ 环境，官方正式对 Python 依赖范围做出严格限制：

* **仅允许基础库**：正式推理环境仅支持 Python 标准库、PyTorch（>=2.1）和 NumPy（>=1.24）。


* **禁用非必要音频库**：正式环境默认**不提供** `torchaudio`、`torchvision`、`scipy`、`librosa`、`einops` 等第三方库。


* **配置参数固化**：提交目录中的 `requirements.txt` 建议保持为空或仅保留注释。如您在训练时依赖上述工具生成了滤波器系数或归一化参数，必须在提交前将其固化为模型权重、NumPy 数组或 JSON 文件。



### 📦 4. 提交打包“防呆”升级

官方打包脚本 `make_submission_zip.py` 增加了更严格的前置合规校验，防止因打包失误导致线上评测失败：

* **核心文件校验**：强制检查提交根目录是否包含 `submission.py`、`requirements.txt` 和 `README.md`，缺少任何一项将拒绝打包。


* **数据隔离拦截**：系统将自动拦截并提示删除误放入提交目录的 `public_demo_data` 测试数据文件夹，确保参赛压缩包合规且轻量。



### 💡 选手操作建议

请各位团队尽快下载最新的 **工具包**。在使用新版 `run_public_demo.py` 进行本地验证时，请务必关注您的算法在首个 0.5 秒窗口内的收敛表现，并清理代码中不合规的第三方库导入。

祝大家在比赛中取得优异成绩！

**2026 CCF先进音频技术竞赛组委会**
**2026年8月**

# 📢 【赛事官方公告】关于物理声学路径降采样幅值补偿及数据集更新的说明

各位参赛选手，大家好：

近期，组委会技术团队在复核数据集预处理流时，对一个经典的“多速率数字信号处理”物理缩放细节进行了优化更新，现说明如下：

### 🔍 优化背景

在离线数据集制作阶段，我们将真实测量的物理声场冲激响应（IR）从设备原始的 **200kHz** 降采样到了本次比赛标准的 **48kHz**。
根据离散信号处理原理（如 `scipy.signal.resample_poly`），点数的等比例缩减（比例为 $48/200 = 6/25$）会导致系统传递函数的频域幅值出现约 **-12.4 dB** 的等比例衰减。虽然这符合离散能量守恒，但在连续物理世界中，声学路径的真实物理衰减率不应因采样率的改变而发生改变。

### 🛠 修正内容

为了追求物理声场严谨性，还原真实空间中的声压级变化，组委会在降采样后的 IR 路径上乘以了相应的补偿系数（$200/48 = 25/6 \approx 4.1667$）。
目前，以此为基础重新卷积生成的期望残余噪声（EXPECTED_NOISE）**以及**次级路径文件（sh.npy）已在赛事平台上全面更新。

### 📊 对基线与参赛模型的影响：【无影响】

组委会使用最新修正的数据集，重新运行了官方提供的 `TimeDomainANC` 时域基线代码。测试结果表明：
**本次幅值修正对最终的降噪量（NR）评价指标几乎没有任何影响。** 这是因为深度神经网络在端到端训练中具备极强的线性缩放自适应能力（通过调整卷积核权重大小即可抵消统一的幅值缩放）。

**修正后的数据更加贴近真实物理世界的绝对声压幅值，但不会影响大家现有算法框架的相对降噪性能，请大家放心！**

### 🎯 选手操作建议

为了保证本地调试与最终线上评测的数据分布完全一致，请各位参赛选手**前往赛事官网重新下载最新的数据集压缩包**，并替换本地 `dataset/` 目录下的原有文件。网络结构与训练代码无需做任何更改。

感谢大家对赛事的关注，祝大家在比赛中取得优异成绩！

**2026 CCF先进音频技术竞赛组委会**
**2026年7月16日**

---

# 📢 【赛事官方公告】全新评价标准与自动化评估工具上线说明

各位参赛选手，大家好：

为了让本次挑战赛的成果更加贴近真实的端侧边缘设备（如TWS耳机、车载DSP）落地需求，组委会决定从单一的“宽带平均降噪量”升级为**多维度评价体系**。

我们引入了专业的 **1/3 倍频程（1/3-Octave Band）频段分析**与**模型计算复杂度硬性评估**。相关的官方评测代码已同步至代码仓库。

### 📊 1. 评测维度全面升级

目前的官方评价标准将包含以下三个核心维度：

1. **部署可行性约束（算力与显存）**：引入 `ptflops` 评估模型的参数量（Parameters）与乘加计算量（MACs），确保算法具备在低功耗硬件上运行的潜力。
2. **核心降噪区性能 (50Hz - 5000Hz)**：日常生活中的主要稳态/非稳态噪声集中于此。评测将计算该频段内的**平均降噪量**与**总能量降噪量**。
3. **高频反弹控制区 (1000Hz - 8000Hz)**：在实际ANC物理系统中，低频抵消往往会引起高频噪声放大（即水床效应）。本次新增高频**最大噪声反弹**指标，作为严厉的惩罚项，要求选手在降噪的同时不得引入刺耳的高频啸叫。

### 🗂️ 2. 新增文件与目录结构更新

请拉取最新代码，您的项目目录现应包含以下评测相关文件：

```text
ANC_Challenge_2026/
├── EvaluationMetrics/          # 【新增】官方评测裁判系统
│   ├── anc_audio_analysis.py   # 1/3倍频程与声学指标分析核心代码
│   ├── Model_evaluation.py     # 模型复杂度(MACs/Params)评估代码
│   └── ...
├── evaluate_custom_scenes.py   # 【新增】自动化全流程测试与评估脚本
├── model.py                    
├── train.py                     
└── ...

```

### 🚀 3. 自动化测试脚本使用方法

我们提供了全新的 `evaluate_custom_scenes.py` 脚本。该脚本会自动加载网络参数，对指定场景进行前向推理，并生成符合要求的测试音频（前5秒ANC关闭，后5秒ANC开启），最后自动调用 `EvaluationMetrics` 出具报告和1/3倍频程曲线图。**目前的测试代码和使用的噪声和次级路径仅做为示例，后续的测试集会重新更新。**

**运行方式：**
只需在 `evaluate_custom_scenes.py` 的用户配置区配置好您的参考信号与期望信号路径，然后运行：

```bash
python evaluate_custom_scenes.py

```

### 🏆 4. 官方基线最新评测结果 (Baseline Performance)

为了给参赛团队提供直观的对照，组委会使用官方提供的 `TimeDomainANC` 时域基线模型，在全新的评价标准下进行了测试，总结如下：

**【模型复杂度汇总】**

* **参数量 (Parameters)**: 42.76 k
* **计算量 (MACs)**: 2.09 GMac

**【场景声学降噪指标】**

| 测试场景 | 50Hz-5kHz 频带平均降噪量 | 50Hz-5kHz 总能量降噪量 | 1kHz-8kHz 最大噪声反弹 |
| --- | --- | --- | --- |
| **Scene_1 (车载)** | **5.62 dB** | **8.33 dB** | 5.10 dB |
| **Scene_2 (地铁)** | **2.63 dB** | **3.75 dB** | 3.56 dB |

*说明：基线模型在两个测试场景下均取得了有效的总能量降噪表现，但也存在一定程度的高频噪声反弹（如场景1中3150Hz处出现了-5.10dB的放大）。如何平衡低频降噪深度与高频水床效应，将是取得高分的关键！*

预祝各位团队在接下来的赛程中取得好成绩！🚀

**2026 CCF先进音频技术竞赛组委会**

**2026年7月14日**

---

## 📖 1. 赛题背景与核心挑战

传统主动降噪（ANC）系统在平稳噪声下表现优异，但在**声学环境突变**（如佩戴者从安静室内突然走到嘈杂街道或者改变设备佩戴位置）时，容易出现系统发散或降噪性能骤降的问题。

本次大赛的核心目标是：**使用深度神经网络（DNN）提升ANC系统在面临未见过的噪声源、未见过的声学路径时的收敛能力与跟踪稳定性。**

为了极度贴近真实的物理硬件部署场景，组委会在数据集设计上做出了以下严格限制：

* **初级路径（Primary Path, $P(z)$）物理隐藏**：在真实场景下，算法无法提前预知外界噪声的传播路径。因此，本赛题**不提供**初级声学路径。

---

## 🗂️ 2. 数据集说明

请参赛者将下载好的官方数据集放置于项目根目录的 `dataset/` 文件夹下。

### 数据说明

在真实的 ANC 物理模型中，误差麦克风接收到的残余噪声 $e(n)$ 由下式决定：

$$e(n) = d(n) - \hat{d}(n) = [x(n) * P(z)] - [y(n) * S(z)]$$

为了隐藏初级路径 $P(z)$，组委会已在离线阶段计算好了**期望噪声 $d(n)$**。参赛者可获取的数据仅包含以下三部分：

| 数据类型 | 目录/文件 | 说明 |
| --- | --- | --- |
| **原始参考噪声** $x(n)$ | `dataset/NOISE/` | 参考麦克风采集的原始环境宽带噪声（16-bit WAV，原生 48kHz）。 |
| **期望噪声** $d(n)$ | `dataset/EXPECTED_NOISE/` | 噪声经过未知初级路径衰减后到达误差麦克风的声音。**命名规则**：`{噪声名}_scene_{路径编号}.wav`。 |
| **次级路径** $S(z)$ | `dataset/sh.npy` | 扬声器到误差麦克风的物理冲激响应（已降采样至 48kHz，数组维度为 `(Num_Paths, Length)`）。 |

### 测试集

为考察网络在环境突变时的稳定性，基线的 Dataloader 在测试阶段会自动抽取两种不同的测试噪声进行测试。

---

## 🧠 3. 基线系统架构 (TimeDomainANC)

官方提供的基线模型 `TimeDomainANC` 采用纯时域（Pure Time-Domain）的端到端架构。

* **时域网络结构**：模型主体由一个输入 1×1 卷积层、10 个级联的残差块以及末端输出投影层构成。首先，输入卷积将原始一维波形映射到隐空间得到隐藏特征；随后，特征向量通过多级带残差连接的因果空洞卷积；最后，输出端通过两层 1×1 卷积和之间的非线性激活层，将隐藏特征映射为控制扬声器驱动信号。
* **因果空洞卷积**：残差块主要由因果空洞卷积层构成，通过对称 padding 后裁剪右端输出，从而避免未来样本泄露。同时，堆叠多层空洞卷积以增加感受野，膨胀率呈指数递增，实现了在时域捕获低频噪声的长时特征。
* **物理卷积对齐**：在模拟次级路径抵消（`apply_dynamic_path`）时，基线对 PyTorch 原生的一维卷积（底层为互相关）进行了**冲激响应时域翻转（Time-flip）**，从而严格等价于真实物理声学系统中的前向因果传播。

---

## 🚀 4. 快速开始

### 4.1 环境依赖

推荐使用 Python 3.8 及以上版本。请安装以下依赖库：

```bash
pip install torch torchvision torchaudio
pip install numpy matplotlib scipy librosa soundfile

```

*(注：基线系统强依赖 `soundfile` 库以实现离线长音频的极速指针读取，请务必安装)*

### 4.2 目录结构

在运行程序前，请确保您的项目结构如下：

```text
ANC_Challenge_2026/
├── dataset/
│   ├── NOISE/                  # 存放 48kHz 原始参考噪声 wav
│   ├── EXPECTED_NOISE/         # 存放离线生成的期望目标噪声 wav
│   └── sh.npy                  # 官方提供的次级声学路径
├── model.py                    # 时域 1D-CNN 网络模型架构
├── dataset.py                  # Dataloader 与声学物理卷积封装
├── train.py                     # 训练与测试评估主函数
└── README.md                   # 本说明文档

```

### 4.3 运行基线

直接运行主脚本即可启动训练与评估：

```bash
python train.py

```

---

## 📊 5. 评估指标与可视化

基线代码在每个测试场景结束后，会自动计算并输出**降噪量（Noise Reduction, NR）**，其核心定义为：

$$NR = 10 \log_{10} \left( \frac{\sum d(n)^2}{\sum e(n)^2 + \epsilon} \right)$$

*NR 值越大（单位 dB），表明网络的降噪性能越好。负值则代表网络导致了局部噪声放大。*

同时，基线会在项目根目录下自动生成两类的图表：

1. **时域波形图（Time Domain）**：展示初级噪声 $d(n)$ 与残余噪声 $e(n)$ 前 900ms 的波形对比，用于直观评估网络的绝对幅值压制能力。
2. **频域功率谱密度图（PSD）**：在对数频域上展示降噪前后的能量分布情况，帮助选手深层次分析网络对不同频带（高频/低频分量）的实际处理效果。

---

## 🏆 6. 官方基线性能参考 (Baseline Performance Reference)

为了给参赛团队提供一个直观的性能对照，组委会使用官方提供的 `TimeDomainANC` 模型在默认配置下进行了 **60 个 Epoch** 的训练。以下是该模型在测试集上的降噪表现：

| 测试场景 (Scenario) | 考察维度 | 独立场景降噪量 (Scene NR) | 平均降噪量 (Avg NR) |
| --- | --- | --- | --- |
| **Test 1: 未见噪声 + 已见路径**<br>*(Unseen Noise, Seen Paths)* | 对未知环境噪声的泛化与突变跟踪能力 | `6.99`, `9.39`, `6.93`, `4.90`<br>`4.79`, `5.93`, `0.43`, `4.86` (dB) | **5.53 dB** |
| **Test 2: 未见噪声 + 未见路径**<br>*(Unseen Noise, Unseen Paths)* | 对全新物理空间与未知噪声的**双重极限泛化能力** |  `6.53`, `1.07` (dB) | **3.93 dB** |


### 💡 基线结果分析与赛题洞察

从上述基线测试结果中，我们可以得出以下几个关键结论，供参赛选手在优化算法时参考：

1. **算法闭环的可行性验证**：在隐藏了初级声学路径 $P(z)$ 的极其严苛的条件下，纯时域基线网络在所有测试场景中均取得了**正向的降噪量（NR > 0）**，证明了利用纯数据驱动方法在底层波形上隐式学习声学规律的完全可行性。
2. **路径泛化衰减（核心痛点）**：对比 Test 1 和 Test 2 可以发现，当系统面对**完全未见过的物理路径**时，平均降噪量出现了明显的衰减（从 5.53 dB 下降至 3.93 dB）。如何提升网络跨物理空间的鲁棒性与自适应解耦能力，是本赛题最大的挑战之一。
3. **场景方差显著**：在 Test 1 中，面对不同的拼接突变场景，网络的降噪表现波动极大（最高可达 9.93 dB，最低仅为 0.43 dB）。这表明基础的因果卷积结构在应对某些特定频率的突变或极端的相位跳跃时，依然存在跟踪“盲区”，亟待参赛选手通过引入新的网络结构或优化策略来突破瓶颈。

