diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 20d0c4b..2377a50 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -42,13 +42,17 @@ jobs:
pip install --upgrade pip
pip install -e .[docs]
- - name: Build Sphinx documentation
+ - name: Build English docs
run: |
cd python/docs
python -m sphinx -b html source build/html
- # Create .nojekyll file to allow files starting with underscore
touch build/html/.nojekyll
+ - name: Build Chinese docs
+ run: |
+ cd python/docs
+ python -m sphinx -b html -D language=zh_CN source build/html/zh_CN
+
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
diff --git a/.gitignore b/.gitignore
index bf44bb2..1c956ba 100644
--- a/.gitignore
+++ b/.gitignore
@@ -201,7 +201,7 @@ python/docs/source/_autosummary/
# Claude Playground (temporary test scripts and experiments)
# =============================================================================
.claude
-
+CLAUDE.md
test_dataset/
agent_playground/
matlab/debug
diff --git a/docs/python_matlab_parity.md b/docs/python_matlab_parity.md
new file mode 100644
index 0000000..b2dbe44
--- /dev/null
+++ b/docs/python_matlab_parity.md
@@ -0,0 +1,82 @@
+# Python vs MATLAB Parity Tracker
+
+Last updated: 2026-03-10
+
+This document tracks feature parity between the Python (`adctoolbox` v0.5.0) and MATLAB (`ADCToolbox` v1.30) implementations.
+
+---
+
+## Function Mapping
+
+### Shared (present in both)
+
+| Category | MATLAB | Python | Notes |
+|---|---|---|---|
+| Spectrum | `plotspec` | `analyze_spectrum` | Python returns dict; MATLAB returns individual values |
+| Polar Spectrum | `plotphase` | `analyze_spectrum_polar` | |
+| Perf vs OSR | `perfosr` | *(in-example only)* | Python has no dedicated function; done in `exp_s06` example script |
+| Sine Fit | `sinfit` | `fit_sine_4param` | |
+| Find Coherent Bin | `findbin` | `find_coherent_frequency` | Python returns frequency, MATLAB returns bin index |
+| Estimate Frequency | `findfreq` | `estimate_frequency` | |
+| Alias Folding | `alias` | `fold_frequency_to_nyquist` | Python also has `fold_bin_to_nyquist` |
+| Error by Phase/Value | `errsin` | `analyze_error_by_phase`, `analyze_error_by_value` | MATLAB uses `xaxis` param to switch; Python split into two functions |
+| Error by Value (shortcut) | `errsinv` | `analyze_error_by_value` | Python absorbed the shortcut |
+| Time Decomposition | `tomdec` | `analyze_decomposition_time`, `analyze_decomposition_polar` | Python split into time and polar variants |
+| INL from Sine | `inlsin` | `analyze_inl_from_sine` | |
+| Overflow Check | `bitchk` | `analyze_overflow` | |
+| Weight Calibration | `wcalsin` | `calibrate_weight_sine` | |
+| Weight/Radix Plot | `plotwgt` | `analyze_weight_radix` | |
+| NTF Analysis | `ntfperf` | `ntf_analyzer` | |
+| Dashboard | `adcpanel` | `generate_aout_dashboard`, `generate_dout_dashboard` | Python split analog/digital into separate dashboards |
+
+### MATLAB-only (not yet ported to Python)
+
+| MATLAB Function | Description | Priority |
+|---|---|---|
+| `cdacwgt` | Capacitive DAC weight calculation from capacitor values (cd, cb, cp) | Low — niche, design-phase utility |
+| `ifilter` | FFT-based ideal (brickwall) bandpass filter | Medium — useful general utility |
+| `plotres` | Partial-sum residual plots for bit-matrix correlation analysis | Medium — useful debug visualization |
+| `plotressin` | Shortcut: `wcalsin` + `plotres` combined | Low — follows once `plotres` is ported |
+| `perfosr` (dedicated fn) | Sweep and plot SNDR/SFDR/ENOB vs OSR | Medium — exists as example script but not a reusable function |
+
+### Python-only (not in MATLAB)
+
+| Python Function | Description | Notes |
+|---|---|---|
+| `analyze_two_tone_spectrum` | Two-tone spectrum with IMD analysis | New feature in Python |
+| `analyze_error_pdf` | Error probability density function | New analysis |
+| `analyze_error_spectrum` | FFT of error signal | New analysis |
+| `analyze_error_autocorr` | Error autocorrelation | New analysis |
+| `analyze_error_envelope_spectrum` | Envelope spectrum of error | New analysis |
+| `fit_static_nonlin` | Fit static nonlinearity polynomial | New analysis |
+| `analyze_bit_activity` | Bit toggle activity analysis | MATLAB has legacy `bitact.m` only |
+| `analyze_enob_sweep` | ENOB per bit sweep | MATLAB has legacy `bitsweep.m` only |
+| `calibrate_weight_sine_lite` | Lightweight calibration variant | Internal (not exported), no MATLAB equivalent |
+| `analyze_phase_plane` | Phase-space anomaly detection | Internal (not exported), no MATLAB equivalent |
+| `siggen.nonidealities` | Signal generation with jitter, thermal noise, quantization, settling, nonlinearity | Entire module, no MATLAB equivalent |
+| Unit conversions (16 functions) | `db_to_mag`, `snr_to_enob`, `lsb_to_volts`, `dbm_to_vrms`, etc. | Utility library, no MATLAB equivalent |
+| FOM calculators (4 functions) | `calculate_walden_fom`, `calculate_schreier_fom`, `calculate_thermal_noise_limit`, `calculate_jitter_limit` | Utility library, no MATLAB equivalent |
+| `vpp_for_target_dbfs` | Calculate Vpp for target dBFS | Internal utility, no MATLAB equivalent |
+
+---
+
+## Structural / Behavioral Differences
+
+| Aspect | MATLAB | Python |
+|---|---|---|
+| **Naming** | camelCase (`plotspec`, `sinfit`, `wcalsin`) | snake_case (`analyze_spectrum`, `fit_sine_4param`, `calibrate_weight_sine`) |
+| **Return type** | Multiple return values (`[enob,sndr,sfdr,...] = plotspec(...)`) | Single dictionary (`result = analyze_spectrum(...)`) |
+| **Plot control** | `disp` parameter (0/1) | `create_plot` boolean; separate `plot_*` functions |
+| **API granularity** | One function does multiple things (e.g., `errsin` handles both phase and value binning) | Split into focused functions (`analyze_error_by_phase` vs `analyze_error_by_value`) |
+| **Dashboard** | Single `adcpanel` handles both analog and digital | Separate `generate_aout_dashboard` and `generate_dout_dashboard` |
+| **Legacy functions** | 15 deprecated functions in `legacy/` | No legacy layer; MATLAB names were never shipped |
+| **Shortcut wrappers** | `shortcut/` directory with convenience wrappers | Absorbed into main API (no separate layer) |
+
+---
+
+## Recommendations for Convergence
+
+1. **Port to Python**: `ifilter`, `plotres`, `perfosr` (as dedicated functions)
+2. **Port to MATLAB**: `analyze_two_tone_spectrum`, error analysis suite (PDF, spectrum, autocorr, envelope), `fit_static_nonlin`, signal generation module, unit conversion utilities, FOM calculators
+3. **Promote in Python**: `analyze_phase_plane` and `calibrate_weight_sine_lite` are implemented but not exported — decide whether to make them public
+4. **Decide on `cdacwgt`**: Very MATLAB-specific (CDAC design). May not be needed in Python if the toolbox focuses on measurement/characterization rather than circuit design
diff --git a/python/docs/source/_templates/layout.html b/python/docs/source/_templates/layout.html
new file mode 100644
index 0000000..04f68c8
--- /dev/null
+++ b/python/docs/source/_templates/layout.html
@@ -0,0 +1,16 @@
+{% extends "!layout.html" %}
+{% block extrahead %}
+{{ super() }}
+
+{% endblock %}
+{% block content %}
+
+{{ super() }}
+{% endblock %}
diff --git a/python/docs/source/conf.py b/python/docs/source/conf.py
index b3acb05..bdf3c98 100644
--- a/python/docs/source/conf.py
+++ b/python/docs/source/conf.py
@@ -38,6 +38,9 @@
language = 'en'
+locale_dirs = ['locale'] # where .po files live (relative to source/)
+gettext_compact = False # one .po file per source file (easier to manage)
+
# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
diff --git a/python/docs/source/index.rst b/python/docs/source/index.rst
index 3916dad..c5d1120 100644
--- a/python/docs/source/index.rst
+++ b/python/docs/source/index.rst
@@ -14,6 +14,7 @@ and digital output analysis.
api/index
algorithms/index
examples/index
+ python_matlab_parity
changelog
Features
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/AlgorithmOverview.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/AlgorithmOverview.po
new file mode 100644
index 0000000..aee9b5d
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/AlgorithmOverview.po
@@ -0,0 +1,790 @@
+# ADCToolbox 中文翻译
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: 2026-03-10 20:52+0800\n"
+"Last-Translator: ADCToolbox Contributors\n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/AlgorithmOverview.md:1
+msgid "ADCToolbox Algorithm Overview"
+msgstr "ADCToolbox 算法概览"
+
+#: ../../source/algorithms/AlgorithmOverview.md:3
+msgid "**Last Updated:** 2025-12-03"
+msgstr "**最后更新:** 2025-12-03"
+
+#: ../../source/algorithms/AlgorithmOverview.md:5
+msgid "Introduction"
+msgstr "简介"
+
+#: ../../source/algorithms/AlgorithmOverview.md:7
+msgid ""
+"This document describes the working principles and architectural design "
+"of the MATLAB algorithms in ADCToolbox. The toolbox has been streamlined "
+"for efficiency, maintainability, and consistent output formatting."
+msgstr ""
+"本文档介绍 ADCToolbox 中 MATLAB 算法的工作原理与架构设计。"
+"工具箱经过优化,注重执行效率、可维护性和统一的输出格式。"
+
+#: ../../source/algorithms/AlgorithmOverview.md:11
+msgid "Toolset Architecture"
+msgstr "工具集架构"
+
+#: ../../source/algorithms/AlgorithmOverview.md:13
+msgid "Design Principles"
+msgstr "设计原则"
+
+#: ../../source/algorithms/AlgorithmOverview.md:15
+msgid ""
+"**Separation of Concerns**: Tool execution and panel generation are "
+"separate functions"
+msgstr "**关注点分离**:工具执行与面板生成为独立函数"
+
+#: ../../source/algorithms/AlgorithmOverview.md:16
+msgid ""
+"**Data-Driven Execution**: Tool lists defined as data structures to "
+"eliminate repetitive code"
+msgstr "**数据驱动执行**:以数据结构定义工具列表,消除重复代码"
+
+#: ../../source/algorithms/AlgorithmOverview.md:17
+msgid ""
+"**Auto-Detection**: Panel functions automatically locate plot files using"
+" naming conventions"
+msgstr "**自动检测**:面板函数根据命名规范自动定位图表文件"
+
+#: ../../source/algorithms/AlgorithmOverview.md:18
+msgid ""
+"**Consistent Formatting**: All tools use standardized figure properties "
+"and output"
+msgstr "**统一格式**:所有工具使用标准化的图形属性和输出"
+
+#: ../../source/algorithms/AlgorithmOverview.md:20
+msgid "File Organization"
+msgstr "文件组织"
+
+#: ../../source/algorithms/AlgorithmOverview.md:33
+msgid "toolset_aout: Analog Output Analysis"
+msgstr "toolset_aout:模拟输出分析"
+
+#: ../../source/algorithms/AlgorithmOverview.md:35
+#: ../../source/algorithms/AlgorithmOverview.md:103
+msgid "**Files:**"
+msgstr "**文件:**"
+
+#: ../../source/algorithms/AlgorithmOverview.md:36
+msgid "MATLAB: `matlab/src/toolset_aout.m`"
+msgstr "MATLAB:`matlab/src/toolset_aout.m`"
+
+#: ../../source/algorithms/AlgorithmOverview.md:37
+msgid "Python: `python/src/adctoolbox/toolset_aout.py`"
+msgstr "Python:`python/src/adctoolbox/toolset_aout.py`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+#: ../../source/algorithms/AlgorithmOverview.md:39
+#: ../../source/algorithms/AlgorithmOverview.md:107
+msgid "Purpose"
+msgstr "功能说明"
+
+#: ../../source/algorithms/AlgorithmOverview.md:41
+msgid ""
+"Executes 9 diagnostic tools on calibrated ADC analog output data (sine "
+"wave). Covers time-domain, frequency-domain, and statistical error "
+"analysis."
+msgstr ""
+"对校准后的 ADC 模拟输出数据(正弦波)执行 9 个诊断工具,"
+"涵盖时域、频域和统计误差分析。"
+
+#: ../../source/algorithms/AlgorithmOverview.md:43
+#: ../../source/algorithms/AlgorithmOverview.md:111
+msgid "Algorithm Workflow"
+msgstr "算法流程"
+
+#: ../../source/algorithms/AlgorithmOverview.md:62
+msgid "Tool Execution Pattern"
+msgstr "工具执行模式"
+
+#: ../../source/algorithms/AlgorithmOverview.md:64
+msgid "Each tool follows a standardized pattern:"
+msgstr "每个工具遵循标准化执行模式:"
+
+#: ../../source/algorithms/AlgorithmOverview.md:78
+#: ../../source/algorithms/AlgorithmOverview.md:167
+msgid "Tools Executed"
+msgstr "执行的工具"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "#"
+msgstr "#"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "Tool"
+msgstr "工具"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "Key Parameters"
+msgstr "关键参数"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "1"
+msgstr "1"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`tomdec`"
+msgstr "`tomdec`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`freqCal`, `10` harmonics, `1` OSR"
+msgstr "`freqCal`,`10` 次谐波,`1` OSR"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "2"
+msgstr "2"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`plotspec`"
+msgstr "`plotspec`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`label=1`, `harmonic=5`, `OSR=1`, `window=@hann`"
+msgstr "`label=1`,`harmonic=5`,`OSR=1`,`window=@hann`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "3"
+msgstr "3"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`plotphase`"
+msgstr "`plotphase`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`harmonic=10`, `mode='FFT'`"
+msgstr "`harmonic=10`,`mode='FFT'`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "4"
+msgstr "4"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`errsin` (code)"
+msgstr "`errsin`(码值)"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`bin=20`, `fin=freqCal`, `xaxis='value'`"
+msgstr "`bin=20`,`fin=freqCal`,`xaxis='value'`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "5"
+msgstr "5"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`errsin` (phase)"
+msgstr "`errsin`(相位)"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`bin=99`, `fin=freqCal`, `xaxis='phase'`"
+msgstr "`bin=99`,`fin=freqCal`,`xaxis='phase'`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "6"
+msgstr "6"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`errpdf`"
+msgstr "`errpdf`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`Resolution`, `FullScale`"
+msgstr "`Resolution`,`FullScale`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "7"
+msgstr "7"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`errac`"
+msgstr "`errac`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`MaxLag=200`, `Normalize=true`"
+msgstr "`MaxLag=200`,`Normalize=true`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "8"
+msgstr "8"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`plotspec` (error)"
+msgstr "`plotspec`(误差)"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`label=0`"
+msgstr "`label=0`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "9"
+msgstr "9"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`errevspec`"
+msgstr "`errevspec`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`Fs=1`"
+msgstr "`Fs=1`"
+
+#: ../../source/algorithms/AlgorithmOverview.md:92
+#: ../../source/algorithms/AlgorithmOverview.md:243
+msgid "Key Features"
+msgstr "主要特点"
+
+#: ../../source/algorithms/AlgorithmOverview.md:94
+msgid ""
+"**Pre-computation**: Expensive calculations (frequency detection, sine "
+"fit) done once and reused"
+msgstr "**预计算**:耗时运算(频率检测、正弦拟合)只计算一次并复用"
+
+#: ../../source/algorithms/AlgorithmOverview.md:95
+msgid ""
+"**Memory Management**: Figures closed immediately after save to prevent "
+"memory buildup"
+msgstr "**内存管理**:图形保存后立即关闭,防止内存积累"
+
+#: ../../source/algorithms/AlgorithmOverview.md:96
+msgid ""
+"**Fail-Fast**: Execution stops on first error (use `try-catch` for fail-"
+"safe execution)"
+msgstr "**快速失败**:首次出错即停止执行(使用 `try-catch` 实现容错执行)"
+
+#: ../../source/algorithms/AlgorithmOverview.md:97
+msgid "**Standardized Output**: All plots have consistent size and formatting"
+msgstr "**标准化输出**:所有图表具有统一的尺寸和格式"
+
+#: ../../source/algorithms/AlgorithmOverview.md:101
+msgid "toolset_dout: Digital Output Analysis"
+msgstr "toolset_dout:数字输出分析"
+
+#: ../../source/algorithms/AlgorithmOverview.md:104
+msgid "MATLAB: `matlab/src/toolset_dout.m`"
+msgstr "MATLAB:`matlab/src/toolset_dout.m`"
+
+#: ../../source/algorithms/AlgorithmOverview.md:105
+msgid "Python: `python/src/adctoolbox/toolset_dout.py`"
+msgstr "Python:`python/src/adctoolbox/toolset_dout.py`"
+
+#: ../../source/algorithms/AlgorithmOverview.md:109
+msgid ""
+"Executes 6 diagnostic tools on ADC digital bit outputs (for SAR ADCs and "
+"bit-weighted architectures). Performs calibration, weight analysis, and "
+"performance evaluation."
+msgstr ""
+"对 ADC 数字位输出(适用于 SAR ADC 和位权重架构)执行 6 个诊断工具,"
+"包括校准、权重分析和性能评估。"
+
+#: ../../source/algorithms/AlgorithmOverview.md:133
+msgid "Data-Driven Tool Execution"
+msgstr "数据驱动的工具执行"
+
+#: ../../source/algorithms/AlgorithmOverview.md:135
+msgid "Unlike the old repetitive approach, tools are defined as a struct array:"
+msgstr "与旧式重复代码不同,工具定义为结构体数组:"
+
+#: ../../source/algorithms/AlgorithmOverview.md:161
+msgid "**Benefits of Data-Driven Approach:**"
+msgstr "**数据驱动方式的优势:**"
+
+#: ../../source/algorithms/AlgorithmOverview.md:162
+#, python-format
+msgid "**Code Reduction**: 109 lines → 66 lines (40% reduction)"
+msgstr "**代码精简**:109 行 → 66 行(减少 40%)"
+
+#: ../../source/algorithms/AlgorithmOverview.md:163
+msgid "**Consistency**: Single point of control for formatting"
+msgstr "**一致性**:格式控制集中于单一位置"
+
+#: ../../source/algorithms/AlgorithmOverview.md:164
+msgid "**Maintainability**: Easy to add/remove/modify tools"
+msgstr "**可维护性**:便于添加、删除或修改工具"
+
+#: ../../source/algorithms/AlgorithmOverview.md:165
+msgid "**Readability**: Tool properties clearly visible in struct definition"
+msgstr "**可读性**:工具属性在结构体定义中一目了然"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "Figure Size"
+msgstr "图形尺寸"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`plotspec` (nominal)"
+msgstr "`plotspec`(标称)"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "Spectrum before calibration"
+msgstr "校准前频谱"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "800×600"
+msgstr "800×600"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`plotspec` (calibrated)"
+msgstr "`plotspec`(已校准)"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "Spectrum after `wcalsine` calibration"
+msgstr "`wcalsine` 校准后频谱"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`bitact`"
+msgstr "`bitact`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "Bit toggle rate analysis"
+msgstr "位翻转率分析"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "1000×750"
+msgstr "1000×750"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`ovfchk`"
+msgstr "`ovfchk`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "Overflow/redundancy check"
+msgstr "溢出/冗余检查"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "1000×600"
+msgstr "1000×600"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`weightScaling`"
+msgstr "`weightScaling`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "Radix visualization"
+msgstr "基数可视化"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "`bitsweep`"
+msgstr "`bitsweep`"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "ENoB vs number of bits"
+msgstr "ENoB 与位数关系"
+
+#: ../../source/algorithms/AlgorithmOverview.md:180
+msgid "Panel Functions"
+msgstr "面板函数"
+
+#: ../../source/algorithms/AlgorithmOverview.md:182
+msgid "toolset_aout_panel"
+msgstr "toolset_aout_panel"
+
+#: ../../source/algorithms/AlgorithmOverview.md:184
+msgid "**File:** `matlab/src/toolset_aout_panel.m`"
+msgstr "**文件:** `matlab/src/toolset_aout_panel.m`"
+
+#: ../../source/algorithms/AlgorithmOverview.md:186
+msgid "Combines 9 individual AOUT plots into a 3×3 panel figure."
+msgstr "将 9 个独立 AOUT 图表组合为 3×3 面板图。"
+
+#: ../../source/algorithms/AlgorithmOverview.md:188
+#: ../../source/algorithms/AlgorithmOverview.md:227
+msgid "Algorithm"
+msgstr "算法"
+
+#: ../../source/algorithms/AlgorithmOverview.md:206
+#: ../../source/algorithms/AlgorithmOverview.md:231
+msgid "File Naming Convention"
+msgstr "文件命名规范"
+
+#: ../../source/algorithms/AlgorithmOverview.md:208
+#: ../../source/algorithms/AlgorithmOverview.md:233
+msgid "Auto-detected files:"
+msgstr "自动检测的文件:"
+
+#: ../../source/algorithms/AlgorithmOverview.md:221
+msgid "toolset_dout_panel"
+msgstr "toolset_dout_panel"
+
+#: ../../source/algorithms/AlgorithmOverview.md:223
+msgid "**File:** `matlab/src/toolset_dout_panel.m`"
+msgstr "**文件:** `matlab/src/toolset_dout_panel.m`"
+
+#: ../../source/algorithms/AlgorithmOverview.md:225
+msgid "Combines 6 individual DOUT plots into a 3×2 panel figure."
+msgstr "将 6 个独立 DOUT 图表组合为 3×2 面板图。"
+
+#: ../../source/algorithms/AlgorithmOverview.md:229
+msgid "Same as `toolset_aout_panel` but with 6 plots in 3×2 layout (1200×1000)."
+msgstr "与 `toolset_aout_panel` 相同,但以 3×2 布局排列 6 个图表(1200×1000)。"
+
+#: ../../source/algorithms/AlgorithmOverview.md:245
+msgid ""
+"**Auto-Detection**: Uses prefix to find files - no need to manually "
+"specify paths"
+msgstr "**自动检测**:使用前缀查找文件,无需手动指定路径"
+
+#: ../../source/algorithms/AlgorithmOverview.md:246
+msgid "**Flexible**: Can override with explicit `PlotFiles` parameter"
+msgstr "**灵活性**:可通过显式 `PlotFiles` 参数覆盖"
+
+#: ../../source/algorithms/AlgorithmOverview.md:247
+msgid "**Robust**: Handles missing files gracefully (shows placeholder)"
+msgstr "**鲁棒性**:优雅处理缺失文件(显示占位符)"
+
+#: ../../source/algorithms/AlgorithmOverview.md:248
+msgid "**Reusable**: Can re-generate panels without re-running tools"
+msgstr "**可复用**:无需重新运行工具即可重新生成面板"
+
+#: ../../source/algorithms/AlgorithmOverview.md:252
+msgid "Common Utility Functions"
+msgstr "通用工具函数"
+
+#: ../../source/algorithms/AlgorithmOverview.md:254
+msgid "findfreq"
+msgstr "findfreq"
+
+#: ../../source/algorithms/AlgorithmOverview.md:256
+msgid "**File:** `matlab/src/findfreq.m`"
+msgstr "**文件:** `matlab/src/findfreq.m`"
+
+#: ../../source/algorithms/AlgorithmOverview.md:258
+msgid "Auto-detects sine wave frequency from time-domain signal using FFT."
+msgstr "使用 FFT 从时域信号中自动检测正弦波频率。"
+
+#: ../../source/algorithms/AlgorithmOverview.md:260
+#: ../../source/algorithms/AlgorithmOverview.md:272
+msgid "**Algorithm:**"
+msgstr "**算法:**"
+
+#: ../../source/algorithms/AlgorithmOverview.md:261
+msgid "Compute FFT of input signal"
+msgstr "计算输入信号的 FFT"
+
+#: ../../source/algorithms/AlgorithmOverview.md:262
+msgid "Find peak in magnitude spectrum"
+msgstr "在幅度频谱中查找峰值"
+
+#: ../../source/algorithms/AlgorithmOverview.md:263
+msgid "Convert bin index to normalized frequency"
+msgstr "将频率箱索引转换为归一化频率"
+
+#: ../../source/algorithms/AlgorithmOverview.md:264
+msgid "Return frequency (0 to 0.5, normalized to sampling rate)"
+msgstr "返回频率(0 至 0.5,归一化至采样率)"
+
+#: ../../source/algorithms/AlgorithmOverview.md:266
+msgid "sinfit"
+msgstr "sinfit"
+
+#: ../../source/algorithms/AlgorithmOverview.md:268
+msgid "**File:** `matlab/src/sinfit.m`"
+msgstr "**文件:** `matlab/src/sinfit.m`"
+
+#: ../../source/algorithms/AlgorithmOverview.md:270
+msgid "Fits a 4-parameter sine wave to data: `A*sin(2πft + φ) + DC`"
+msgstr "对数据进行四参数正弦拟合:`A*sin(2πft + φ) + DC`"
+
+#: ../../source/algorithms/AlgorithmOverview.md:273
+msgid "Use `findfreq` to detect frequency"
+msgstr "使用 `findfreq` 检测频率"
+
+#: ../../source/algorithms/AlgorithmOverview.md:274
+msgid "Set up nonlinear least squares problem"
+msgstr "建立非线性最小二乘问题"
+
+#: ../../source/algorithms/AlgorithmOverview.md:275
+msgid "Optimize amplitude, frequency, phase, DC offset"
+msgstr "优化幅度、频率、相位和直流偏置"
+
+#: ../../source/algorithms/AlgorithmOverview.md:276
+msgid "Return fitted sine wave"
+msgstr "返回拟合正弦波"
+
+#: ../../source/algorithms/AlgorithmOverview.md:280
+msgid "Naming Conventions"
+msgstr "命名规范"
+
+#: ../../source/algorithms/AlgorithmOverview.md:282
+msgid "File Naming"
+msgstr "文件命名"
+
+#: ../../source/algorithms/AlgorithmOverview.md:284
+msgid "**Individual tool outputs:**"
+msgstr "**单个工具输出:**"
+
+#: ../../source/algorithms/AlgorithmOverview.md:289
+#: ../../source/algorithms/AlgorithmOverview.md:298
+msgid "Examples:"
+msgstr "示例:"
+
+#: ../../source/algorithms/AlgorithmOverview.md:290
+msgid "`aout_1_tomdec.png`"
+msgstr "`aout_1_tomdec.png`"
+
+#: ../../source/algorithms/AlgorithmOverview.md:291
+msgid "`dout_3_bitActivity.png`"
+msgstr "`dout_3_bitActivity.png`"
+
+#: ../../source/algorithms/AlgorithmOverview.md:293
+msgid "**Panel outputs:**"
+msgstr "**面板输出:**"
+
+#: ../../source/algorithms/AlgorithmOverview.md:299
+msgid "`PANEL_AOUT.png`"
+msgstr "`PANEL_AOUT.png`"
+
+#: ../../source/algorithms/AlgorithmOverview.md:300
+msgid "`PANEL_DOUT.png`"
+msgstr "`PANEL_DOUT.png`"
+
+#: ../../source/algorithms/AlgorithmOverview.md:302
+msgid "Variable Naming"
+msgstr "变量命名"
+
+#: ../../source/algorithms/AlgorithmOverview.md:304
+msgid "`plot_files` — Cell array of PNG file paths"
+msgstr "`plot_files` — PNG 文件路径的元胞数组"
+
+#: ../../source/algorithms/AlgorithmOverview.md:305
+msgid "`outputDir` — Directory for output files"
+msgstr "`outputDir` — 输出文件目录"
+
+#: ../../source/algorithms/AlgorithmOverview.md:306
+msgid "`freqCal` — Calibrated/detected frequency"
+msgstr "`freqCal` — 校准/检测频率"
+
+#: ../../source/algorithms/AlgorithmOverview.md:307
+msgid "`w_cal` — Calibrated bit weights"
+msgstr "`w_cal` — 校准后的位权重"
+
+#: ../../source/algorithms/AlgorithmOverview.md:308
+msgid "`digitalCodes` — Digital output codes (nominal weights)"
+msgstr "`digitalCodes` — 数字输出码(标称权重)"
+
+#: ../../source/algorithms/AlgorithmOverview.md:309
+msgid "`digitalCodes_cal` — Digital output codes (calibrated weights)"
+msgstr "`digitalCodes_cal` — 数字输出码(校准权重)"
+
+#: ../../source/algorithms/AlgorithmOverview.md:313
+msgid "Performance Optimizations"
+msgstr "性能优化"
+
+#: ../../source/algorithms/AlgorithmOverview.md:315
+msgid "Memory Management"
+msgstr "内存管理"
+
+#: ../../source/algorithms/AlgorithmOverview.md:317
+msgid "Figures closed immediately after save"
+msgstr "图形保存后立即关闭"
+
+#: ../../source/algorithms/AlgorithmOverview.md:318
+msgid "Use `'Visible', false` for batch processing (faster)"
+msgstr "批处理时使用 `'Visible', false`(速度更快)"
+
+#: ../../source/algorithms/AlgorithmOverview.md:319
+msgid "Pre-allocate cell arrays for file paths"
+msgstr "预分配文件路径的元胞数组"
+
+#: ../../source/algorithms/AlgorithmOverview.md:321
+msgid "Computation Efficiency"
+msgstr "计算效率"
+
+#: ../../source/algorithms/AlgorithmOverview.md:323
+msgid ""
+"**Pre-computation**: Expensive operations (frequency detection, sine fit,"
+" calibration) done once"
+msgstr "**预计算**:耗时操作(频率检测、正弦拟合、校准)只执行一次"
+
+#: ../../source/algorithms/AlgorithmOverview.md:324
+msgid "**Data-driven loops**: Eliminates repetitive code"
+msgstr "**数据驱动循环**:消除重复代码"
+
+#: ../../source/algorithms/AlgorithmOverview.md:325
+msgid "**Minimal disk I/O**: Each plot saved once"
+msgstr "**最小化磁盘 I/O**:每个图表只保存一次"
+
+#: ../../source/algorithms/AlgorithmOverview.md:327
+msgid "Code Efficiency"
+msgstr "代码效率"
+
+#: ../../source/algorithms/AlgorithmOverview.md:329
+msgid "**Before (repetitive):**"
+msgstr "**重构前(重复代码):**"
+
+#: ../../source/algorithms/AlgorithmOverview.md:346
+msgid "**After (data-driven):**"
+msgstr "**重构后(数据驱动):**"
+
+#: ../../source/algorithms/AlgorithmOverview.md:358
+#, python-format
+msgid "**Result:** 109 lines → 66 lines (40% reduction)"
+msgstr "**结果:** 109 行 → 66 行(减少 40%)"
+
+#: ../../source/algorithms/AlgorithmOverview.md:362
+msgid "Usage Patterns"
+msgstr "使用模式"
+
+#: ../../source/algorithms/AlgorithmOverview.md:364
+msgid "Pattern 1: Generate plots and panel together"
+msgstr "模式一:同时生成图表和面板"
+
+#: ../../source/algorithms/AlgorithmOverview.md:376
+msgid "Pattern 2: Batch generate plots, then gather panels"
+msgstr "模式二:批量生成图表,然后汇总面板"
+
+#: ../../source/algorithms/AlgorithmOverview.md:390
+msgid "Pattern 3: Re-generate panels only (plots already exist)"
+msgstr "模式三:仅重新生成面板(图表已存在)"
+
+#: ../../source/algorithms/AlgorithmOverview.md:400
+msgid "Error Handling"
+msgstr "错误处理"
+
+#: ../../source/algorithms/AlgorithmOverview.md:402
+msgid "Current Behavior"
+msgstr "当前行为"
+
+#: ../../source/algorithms/AlgorithmOverview.md:404
+msgid "Both toolsets use **fail-fast** error handling:"
+msgstr "两个工具集均采用**快速失败**错误处理策略:"
+
+#: ../../source/algorithms/AlgorithmOverview.md:405
+msgid "Execution stops on first error"
+msgstr "首次出错即停止执行"
+
+#: ../../source/algorithms/AlgorithmOverview.md:406
+msgid "MATLAB displays error message"
+msgstr "MATLAB 显示错误信息"
+
+#: ../../source/algorithms/AlgorithmOverview.md:407
+msgid "Partial results may be saved"
+msgstr "可能保存部分结果"
+
+#: ../../source/algorithms/AlgorithmOverview.md:409
+msgid "Implementing Fail-Safe Execution"
+msgstr "实现容错执行"
+
+#: ../../source/algorithms/AlgorithmOverview.md:411
+msgid "To continue execution after errors, wrap tools in `try-catch`:"
+msgstr "若需在出错后继续执行,请将工具包装在 `try-catch` 中:"
+
+#: ../../source/algorithms/AlgorithmOverview.md:428
+msgid "Future Enhancements"
+msgstr "未来增强计划"
+
+#: ../../source/algorithms/AlgorithmOverview.md:430
+msgid "Planned Features"
+msgstr "计划功能"
+
+#: ../../source/algorithms/AlgorithmOverview.md:432
+msgid ""
+"**Python panel functions**: Implement `toolset_aout_panel` and "
+"`toolset_dout_panel` in Python"
+msgstr "**Python 面板函数**:用 Python 实现 `toolset_aout_panel` 和 `toolset_dout_panel`"
+
+#: ../../source/algorithms/AlgorithmOverview.md:433
+msgid "**Parallel execution**: Run independent tools in parallel using `parfor`"
+msgstr "**并行执行**:使用 `parfor` 并行运行独立工具"
+
+#: ../../source/algorithms/AlgorithmOverview.md:434
+msgid "**Progress callbacks**: Optional callback function for progress updates"
+msgstr "**进度回调**:可选的进度更新回调函数"
+
+#: ../../source/algorithms/AlgorithmOverview.md:435
+msgid "**Custom tool selection**: Allow users to specify which tools to run"
+msgstr "**自定义工具选择**:允许用户指定要运行的工具"
+
+#: ../../source/algorithms/AlgorithmOverview.md:436
+msgid "**Fail-safe mode**: Option to continue execution after errors"
+msgstr "**容错模式**:出错后继续执行的选项"
+
+#: ../../source/algorithms/AlgorithmOverview.md:438
+msgid "Architectural Improvements"
+msgstr "架构改进"
+
+#: ../../source/algorithms/AlgorithmOverview.md:440
+msgid "**Tool registry**: Central registry of all available tools"
+msgstr "**工具注册表**:所有可用工具的集中注册表"
+
+#: ../../source/algorithms/AlgorithmOverview.md:441
+msgid "**Plugin system**: Easy addition of custom tools"
+msgstr "**插件系统**:便于添加自定义工具"
+
+#: ../../source/algorithms/AlgorithmOverview.md:442
+msgid "**Configuration files**: YAML/JSON config for tool parameters"
+msgstr "**配置文件**:使用 YAML/JSON 配置工具参数"
+
+#: ../../source/algorithms/AlgorithmOverview.md:443
+msgid "**Result caching**: Cache expensive computations for reuse"
+msgstr "**结果缓存**:缓存耗时计算结果以供复用"
+
+#: ../../source/algorithms/AlgorithmOverview.md:447
+msgid "References"
+msgstr "参考文献"
+
+#: ../../source/algorithms/AlgorithmOverview.md:449
+msgid "**IEEE Std 1241-2010**: Standard for ADC Test Methods"
+msgstr "**IEEE Std 1241-2010**:ADC 测试方法标准"
+
+#: ../../source/algorithms/AlgorithmOverview.md:450
+msgid "**IEEE Std 1057-2017**: Standard for Digitizing Waveform Recorders"
+msgstr "**IEEE Std 1057-2017**:数字化波形记录仪标准"
+
+#: ../../source/algorithms/AlgorithmOverview.md:451
+msgid "MATLAB documentation: Function handles, struct arrays, exportgraphics"
+msgstr "MATLAB 文档:函数句柄、结构体数组、exportgraphics"
+
+#: ../../source/algorithms/AlgorithmOverview.md:455
+msgid "Version History"
+msgstr "版本历史"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "Version"
+msgstr "版本"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "Date"
+msgstr "日期"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "Changes"
+msgstr "变更内容"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "**2.0**"
+msgstr "**2.0**"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "2025-12-03"
+msgstr "2025-12-03"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "Streamlined toolsets with data-driven execution, separated panel functions"
+msgstr "精简工具集,采用数据驱动执行,独立面板函数"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "**1.0**"
+msgstr "**1.0**"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "2025-01-28"
+msgstr "2025-01-28"
+
+#: ../../source/algorithms/AlgorithmOverview.md
+msgid "Initial implementation"
+msgstr "初始实现"
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_decomposition_polar.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_decomposition_polar.po
new file mode 100644
index 0000000..d323a61
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_decomposition_polar.po
@@ -0,0 +1,321 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:1
+msgid "analyze_decomposition_polar"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:5
+msgid ""
+"`analyze_decomposition_polar` performs time-domain harmonic decomposition"
+" with polar (magnitude-phase) visualization. This provides an intuitive "
+"view of harmonic distortion structure, showing how each harmonic "
+"component relates to the fundamental in both amplitude and phase."
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:7
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:20
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:22
+msgid "**`signal`** (array_like) — Input ADC signal (sine wave excitation)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:23
+msgid "**`harmonic`** (int, default=5) — Number of harmonics to decompose"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:24
+msgid "**`show_plot`** (bool, default=True) — Display polar decomposition plot"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:25
+msgid "**`ax`** (matplotlib polar axis, optional) — Polar axis to plot on"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:26
+msgid "**`title`** (str, optional) — Custom title for the plot"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:28
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:30
+msgid "Dictionary containing:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:31
+msgid "**`fundamental`** — Fundamental component (time domain)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:32
+msgid "**`harmonics`** — List of harmonic components (time domain)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:33
+msgid "**`residual`** — Remaining error (noise + higher-order distortion)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:34
+msgid "**`harmonic_amplitudes`** — Amplitude of each harmonic"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:35
+msgid "**`harmonic_phases`** — Phase of each harmonic (radians)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:36
+msgid "**`frequency`** — Detected fundamental frequency"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:38
+msgid "Algorithm"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:55
+msgid "Polar Visualization"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:57
+msgid "The polar plot shows:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:58
+msgid "**Angle**: Phase of each harmonic relative to fundamental"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:59
+msgid "**Radius**: Magnitude of each harmonic (dBFS or linear)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:60
+msgid "**Markers**: Different harmonics (HD2, HD3, HD4, ...)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:62
+msgid "**Interpretation:**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:63
+msgid "**Clustered phases**: Coherent distortion mechanism"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:64
+msgid "**Random phases**: Multiple independent error sources"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:65
+msgid "**Phase = 0° or 180°**: In-phase/anti-phase with fundamental"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:66
+msgid "**Phase = 90° or 270°**: Quadrature distortion"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:68
+msgid "Examples"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:70
+msgid "Example 1: Harmonic Decomposition with Polar Plot"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:87
+msgid "Example 2: Compare Time and Polar Views"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:106
+msgid "Example 3: Memory Effect Detection"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:121
+msgid "Interpretation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:123
+msgid "Harmonic Phase Patterns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "Phase Pattern"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "Likely Cause"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "**All harmonics ~0°**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "Symmetric compression/limiting"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "**HD2 at 0°, HD3 at 0°**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "Positive nonlinearity (expansion)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "**HD2 at 180°, HD3 at 0°**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "Negative nonlinearity (compression)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "**HD2 at 90°/270°**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "Asymmetric transfer function"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "**Even harmonics clustered**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "Differential pair mismatch"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "**Odd harmonics clustered**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "Single-ended nonlinearity"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:134
+msgid "Harmonic Magnitude Analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "Magnitude Pattern"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "**HD2 dominant**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "Even-order nonlinearity (asymmetry)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "**HD3 dominant**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "Odd-order nonlinearity (curvature)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "**HD2 = HD3**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "Mixed nonlinearity"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "**High HD2, low HD3**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "**Low HD2, high HD3**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md
+msgid "Well-matched differential design"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:144
+msgid "Use Cases"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:146
+msgid "**Distinguish nonlinearity mechanisms**: Even vs. odd order"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:147
+msgid "**Identify memory effects**: Characteristic phase signatures"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:148
+msgid "**Visualize distortion structure**: More intuitive than time domain"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:149
+msgid "**Debug ADC architectures**: Pipelined, SAR, flash"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:150
+msgid "**Compare before/after calibration**: Phase should remain stable"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:152
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:154
+msgid ""
+"[`analyze_decomposition_time`](analyze_decomposition_time.md) — Time-"
+"domain view"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:155
+msgid "[`analyze_spectrum`](analyze_spectrum.md) — Frequency-domain metrics"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:156
+msgid "[`fit_static_nonlin`](fit_static_nonlin.md) — Extract k2/k3 coefficients"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:158
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:160
+msgid "IEEE Std 1057-2017, \"IEEE Standard for Digitizing Waveform Recorders\""
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_polar.md:161
+msgid ""
+"R. Schreier and G. C. Temes, \"Understanding Delta-Sigma Data "
+"Converters,\" Wiley-IEEE Press, 2005"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_decomposition_time.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_decomposition_time.po
new file mode 100644
index 0000000..5e137a7
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_decomposition_time.po
@@ -0,0 +1,138 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/analyze_decomposition_time.md:1
+msgid "analyze_decomposition_time"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:5
+msgid ""
+"`analyze_decomposition_time` performs time-domain harmonic decomposition "
+"of ADC output, separating the fundamental from harmonic distortion "
+"components. This reveals the temporal structure of nonlinearity."
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:7
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:20
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:22
+msgid "**`signal`** (array_like) — Input ADC signal"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:23
+msgid "**`fs`** (float) — Sampling frequency in Hz"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:24
+msgid "**`harmonic`** (int, default=5) — Number of harmonics to decompose"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:25
+msgid "**`show_plot`** (bool, default=False) — Display decomposition plot"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:26
+msgid "**`ax`** (matplotlib axis, optional) — Axis for plotting"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:28
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:30
+msgid "Dictionary containing:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:31
+msgid "**`fundamental`** — Fundamental component (time domain)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:32
+msgid "**`harmonics`** — List of harmonic components"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:33
+msgid "**`residual`** — Remaining error (noise + distortion)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:34
+msgid "**`harmonic_amplitudes`** — Amplitude of each harmonic"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:35
+msgid "**`harmonic_phases`** — Phase of each harmonic"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:37
+msgid "Algorithm"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:52
+msgid "Use Cases"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:54
+msgid "Visualize harmonic distortion in time domain"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:55
+msgid "Understand nonlinearity structure (2nd vs. 3rd order)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:56
+msgid "Compare with polar decomposition for phase insights"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:58
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:60
+msgid ""
+"[`analyze_decomposition_polar`](../api/aout.rst) — Polar visualization of"
+" decomposition"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:61
+msgid "[`fit_sine_4param`](fit_sine_4param.md) — Core sine fitting algorithm"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:62
+msgid "[`analyze_spectrum`](analyze_spectrum.md) — Frequency-domain view"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:64
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/analyze_decomposition_time.md:66
+msgid "IEEE Std 1057-2017, \"IEEE Standard for Digitizing Waveform Recorders\""
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_autocorr.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_autocorr.po
new file mode 100644
index 0000000..2304282
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_autocorr.po
@@ -0,0 +1,175 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/analyze_error_autocorr.md:1
+msgid "analyze_error_autocorr"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:5
+msgid ""
+"`analyze_error_autocorr` computes the autocorrelation of ADC errors to "
+"reveal temporal patterns. White noise has zero autocorrelation at all "
+"lags; correlated errors indicate memory effects, settling issues, or "
+"periodic disturbances."
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:7
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:19
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:21
+msgid "**`signal`** (array_like) — Input ADC signal"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:22
+msgid "**`max_lag`** (int, default=100) — Maximum lag for autocorrelation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:23
+msgid "**`resolution`** (int, optional) — ADC resolution in bits"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:24
+msgid "**`show_plot`** (bool, default=False) — Display autocorrelation plot"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:25
+msgid "**`ax`** (matplotlib axis, optional) — Axis for plotting"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:27
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:29
+msgid "Dictionary containing:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:30
+msgid "**`autocorr`** — Autocorrelation values"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:31
+msgid "**`lags`** — Lag values"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:32
+msgid "**`error`** — Error signal used"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:34
+msgid "Interpretation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md
+msgid "Autocorrelation Pattern"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md
+msgid "Likely Cause"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md
+msgid "**Peak at lag=0 only**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md
+msgid "White noise (ideal)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md
+msgid "**Decay over few samples**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md
+msgid "Low-pass filtering, bandwidth limit"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md
+msgid "**Periodic peaks**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md
+msgid "Switching artifacts, clock coupling"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md
+msgid "**Slow decay**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md
+msgid "1/f noise, drift"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:43
+msgid "Use Cases"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:45
+msgid "Distinguish white noise from colored noise"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:46
+msgid "Detect memory effects in pipelined ADCs"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:47
+msgid "Identify periodic disturbances"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:49
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:51
+msgid "[`analyze_error_pdf`](analyze_error_pdf.md) — Error distribution"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:52
+msgid ""
+"[`analyze_error_spectrum`](analyze_error_spectrum.md) — Frequency domain "
+"view"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:53
+msgid ""
+"[`analyze_error_envelope_spectrum`](analyze_error_envelope_spectrum.md) —"
+" AM modulation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:55
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_autocorr.md:57
+msgid ""
+"B. Razavi, \"Principles of Data Conversion System Design,\" IEEE Press, "
+"1995"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_by_phase.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_by_phase.po
new file mode 100644
index 0000000..bdad62e
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_by_phase.po
@@ -0,0 +1,428 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/analyze_error_by_phase.md:1
+msgid "analyze_error_by_phase"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:5
+msgid ""
+"`analyze_error_by_phase` performs AM/PM (Amplitude Modulation / Phase "
+"Modulation) decomposition of ADC errors as a function of the input signal"
+" phase. This reveals whether errors are signal-dependent and whether they"
+" modulate the amplitude (AM) or timing/phase (PM) of the signal."
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:7
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:24
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:26
+msgid "**`signal`** (array_like) — Input ADC signal (sine wave excitation)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:27
+msgid ""
+"**`norm_freq`** (float, optional) — Normalized frequency (f/fs), range "
+"(0, 0.5)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:28
+msgid "If None: auto-detected via FFT"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:29
+msgid "**`n_bins`** (int, default=100) — Number of phase bins for visualization"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:30
+msgid ""
+"**`include_base_noise`** (bool, default=True) — Include base noise term "
+"in fitting"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:31
+msgid "**`show_plot`** (bool, default=True) — Display error vs. phase plot"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:32
+msgid ""
+"**`axes`** (tuple, optional) — Tuple of (ax1, ax2) for top and bottom "
+"panels"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:33
+msgid "**`ax`** (matplotlib axis, optional) — Single axis to split into 2 panels"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:34
+msgid "**`title`** (str, optional) — Test setup description for title"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:36
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:38
+msgid "Dictionary containing:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:40
+msgid "**Numerical Results:**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:41
+msgid "**`am_noise_rms_v`** — AM noise RMS (amplitude modulation)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:42
+msgid "**`pm_noise_rms_v`** — PM noise RMS in voltage units"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:43
+msgid "**`pm_noise_rms_rad`** — PM noise RMS in radians"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:44
+msgid "**`base_noise_rms_v`** — Base noise RMS (signal-independent)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:45
+msgid "**`total_rms_v`** — Total error RMS"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:47
+msgid "**Validation Metrics:**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:48
+msgid "**`r_squared_raw`** — R² for raw data fit (energy ratio)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:49
+msgid "**`r_squared_binned`** — R² for binned data (model confidence)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:51
+msgid "**Visualization Data:**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:52
+msgid "**`bin_error_rms_v`** — RMS error per phase bin"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:53
+msgid "**`bin_error_mean_v`** — Mean error per phase bin"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:54
+msgid "**`phase_bin_centers_rad`** — Phase bin centers (radians)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:56
+msgid "**Metadata:**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:57
+msgid ""
+"**`amplitude`**, **`dc_offset`**, **`norm_freq`** — Fitted signal "
+"parameters"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:58
+msgid "**`fitted_signal`**, **`error`**, **`phase`** — Signal decomposition"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:60
+msgid "Algorithm"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:62
+msgid "AM/PM Model"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:64
+msgid "Error is decomposed as:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:69
+msgid "where:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:70
+msgid "**AM**: Amplitude modulation error (gain variation with signal level)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:71
+msgid "**PM**: Phase modulation error (timing jitter, settling errors)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:72
+msgid "**base_noise**: Signal-independent noise"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:73
+msgid "**φ**: Signal phase"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:75
+msgid "Dual-Track Analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:77
+msgid ""
+"**Path A (Raw)**: Fit all N samples → highest precision AM/PM values "
+"**Path B (Binned)**: Compute binned statistics → visualization"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:80
+msgid "Cross-validation: Path A coefficients predict Path B trend → R² metric"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:82
+msgid "Examples"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:84
+msgid "Example 1: AM/PM Decomposition"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:100
+msgid "Example 2: Identify Dominant Error Mechanism"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:119
+msgid "Example 3: Compare Multiple Conditions"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+#: ../../source/algorithms/analyze_error_by_phase.md:142
+msgid "Interpretation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:144
+msgid "Error Type Classification"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "Dominant Component"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "Likely Cause"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "**AM dominant**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid ""
+"Gain error, amplitude-dependent distortion, residue amplifier gain "
+"variation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "**PM dominant**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "Clock jitter, timing errors, settling time issues"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "**Base noise dominant**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "Thermal noise, quantization noise (signal-independent)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "**AM ≈ PM**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "Mixed analog impairments"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:153
+msgid "Phase Pattern Analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "Error vs. Phase Pattern"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "**Sinusoidal (AM-like)**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "Amplitude-dependent error"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "**Cosinusoidal (PM-like)**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "Timing/phase-dependent error"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "**Flat (uniform)**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "Signal-independent noise"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "**Complex shape**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md
+msgid "Multiple error mechanisms"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:162
+msgid "R² Interpretation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:164
+msgid "**R² > 0.9**: Model fits well, errors are signal-dependent"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:165
+msgid "**0.5 < R² < 0.9**: Moderate signal dependence"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:166
+msgid "**R² < 0.5**: Errors mostly signal-independent (random noise)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:168
+msgid "Use Cases"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:170
+msgid "**Distinguish jitter from amplitude errors**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:171
+msgid "**Identify memory effects** in pipelined ADCs"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:172
+msgid "**Validate settling time** in SAR ADCs"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:173
+msgid "**Characterize residue amplifier** gain variations"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:174
+msgid "**Debug clock quality** (PM noise indicates jitter)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:176
+msgid "Common Patterns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:178
+msgid "Pipelined ADC"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:179
+msgid "High AM → Residue amplifier gain error"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:180
+msgid "High PM → Inadequate settling time"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:182
+msgid "SAR ADC"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:183
+msgid "High AM → DAC mismatch, reference variation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:184
+msgid "High PM → Comparator metastability"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:186
+msgid "Flash ADC"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:187
+msgid "Low AM, low PM → Good performance"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:188
+msgid "High base noise → Comparator noise"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:190
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:192
+msgid "[`analyze_error_by_value`](analyze_error_by_value.md) — Error vs. ADC code"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:193
+msgid "[`analyze_error_pdf`](analyze_error_pdf.md) — Error distribution"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:194
+msgid ""
+"[`analyze_error_autocorr`](analyze_error_autocorr.md) — Temporal "
+"correlation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:196
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:198
+msgid ""
+"IEEE Std 1241-2010, \"IEEE Standard for Terminology and Test Methods for "
+"ADCs\""
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_phase.md:199
+msgid ""
+"M. Soudan et al., \"A Novel AM-PM-Jitter Decomposition Method for "
+"Characterizing ADC Nonidealities,\" IEEE Trans. IM, 2008"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_by_value.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_by_value.po
new file mode 100644
index 0000000..446a30d
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_by_value.po
@@ -0,0 +1,122 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/analyze_error_by_value.md:1
+msgid "analyze_error_by_value"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:5
+msgid ""
+"`analyze_error_by_value` rearranges ADC errors by their corresponding "
+"output codes, revealing code-dependent patterns like DNL-related errors, "
+"missing codes, and systematic nonlinearity."
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:7
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:19
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:21
+msgid "**`signal`** (array_like) — Input ADC signal (sine wave excitation)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:22
+msgid "**`resolution`** (int, optional) — ADC resolution in bits"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:23
+msgid "**`show_plot`** (bool, default=False) — Display error vs. code plot"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:24
+msgid "**`ax`** (matplotlib axis, optional) — Axis for plotting"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:26
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:28
+msgid "Dictionary containing:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:29
+msgid "**`error_by_code`** — Errors grouped by ADC code"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:30
+msgid "**`codes`** — Unique code values"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:31
+msgid "**`mean_error`** — Mean error per code"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:32
+msgid "**`std_error`** — Standard deviation per code"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:34
+msgid "Use Cases"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:36
+msgid "Identify code-dependent errors (DNL, missing codes)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:37
+msgid "Reveal systematic nonlinearity patterns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:38
+msgid "Validate calibration effectiveness"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:40
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:42
+msgid "[`analyze_error_by_phase`](../api/aout.rst) — Error vs. signal phase"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:43
+msgid "[`analyze_inl_from_sine`](analyze_inl_from_sine.md) — INL/DNL analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:45
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_by_value.md:47
+msgid ""
+"IEEE Std 1241-2010, \"IEEE Standard for Terminology and Test Methods for "
+"ADCs\""
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_envelope_spectrum.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_envelope_spectrum.po
new file mode 100644
index 0000000..725ef9b
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_envelope_spectrum.po
@@ -0,0 +1,180 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:1
+msgid "analyze_error_envelope_spectrum"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:5
+msgid ""
+"`analyze_error_envelope_spectrum` analyzes the envelope spectrum of ADC "
+"errors to detect amplitude modulation (AM) patterns. This reveals signal-"
+"dependent errors that modulate with the input amplitude."
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:7
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:19
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:21
+msgid "**`signal`** (array_like) — Input ADC signal"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:22
+msgid "**`fs`** (float) — Sampling frequency in Hz"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:23
+msgid "**`resolution`** (int, optional) — ADC resolution in bits"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:24
+msgid "**`show_plot`** (bool, default=False) — Display envelope spectrum"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:25
+msgid "**`ax`** (matplotlib axis, optional) — Axis for plotting"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:27
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:29
+msgid "Dictionary containing:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:30
+msgid "**`envelope_spectrum`** — Envelope spectrum magnitude"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:31
+msgid "**`envelope_freq`** — Frequency bins for envelope"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:32
+msgid "**`error`** — Error signal"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:33
+msgid "**`envelope`** — Extracted envelope"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:35
+msgid "Interpretation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md
+msgid "Envelope Spectrum"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md
+msgid "Likely Cause"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md
+msgid "**DC component only**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md
+msgid "Signal-independent error (no AM)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md
+msgid "**Peak at 2×Fin**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md
+msgid "Memory effect, residue amplifier gain error"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md
+msgid "**Peak at Fin**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md
+msgid "Asymmetric nonlinearity"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md
+msgid "**Multiple peaks**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md
+msgid "Complex memory effects"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:44
+msgid "Use Cases"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:46
+msgid "Detect memory effects in pipelined/SAR ADCs"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:47
+msgid "Identify signal-dependent settling errors"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:48
+msgid "Reveal gain errors in residue amplifiers"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:50
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:52
+msgid ""
+"[`analyze_error_autocorr`](analyze_error_autocorr.md) — Time-domain "
+"correlation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:53
+msgid ""
+"[`analyze_error_spectrum`](analyze_error_spectrum.md) — Direct error "
+"spectrum"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:54
+msgid ""
+"[`analyze_decomposition_time`](analyze_decomposition_time.md) — Harmonic "
+"decomposition"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:56
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_envelope_spectrum.md:58
+msgid ""
+"M. Mishali et al., \"Automatic Testing of Pipelined ADCs,\" Proc. IEEE "
+"Int. Test Conf., 2007"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_pdf.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_pdf.po
new file mode 100644
index 0000000..59bc48d
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_pdf.po
@@ -0,0 +1,273 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/analyze_error_pdf.md:1
+msgid "analyze_error_pdf"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:5
+msgid ""
+"`analyze_error_pdf` analyzes the probability distribution (PDF) of ADC "
+"errors by comparing the input signal against a fitted sine wave. This "
+"reveals error characteristics: Gaussian noise, uniform quantization, non-"
+"Gaussian distortion, etc."
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:7
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:19
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:21
+msgid "**`signal`** (array_like) — Input ADC signal (sine wave excitation)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:22
+msgid "**`resolution`** (int, optional) — ADC resolution in bits"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:23
+msgid "**`bins`** (int, default=auto) — Number of histogram bins"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:24
+msgid ""
+"**`show_plot`** (bool, default=False) — Display PDF plot with reference "
+"distributions"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:25
+msgid "**`ax`** (matplotlib axis, optional) — Axis for plotting"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:27
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:29
+msgid "Dictionary containing:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:30
+msgid "**`error`** — Error signal (data - fitted_sine)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:31
+msgid "**`sigma`** — Standard deviation of error (LSB)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:32
+msgid "**`histogram_counts`** — PDF histogram counts"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:33
+msgid "**`histogram_edges`** — PDF bin edges"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:34
+msgid ""
+"**`kl_divergence`** — KL divergence from Gaussian (measure of non-"
+"Gaussianity)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:36
+msgid "Algorithm"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:38
+msgid "1. Fit Sine Wave"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:46
+msgid "2. Compute Error"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:53
+msgid "3. Build Histogram"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:59
+msgid "4. Compare to References"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:61
+msgid "Compare measured PDF against:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:62
+msgid "**Gaussian**: For thermal noise"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:63
+msgid "**Uniform**: For quantization noise"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:64
+msgid "**Other**: For specific distortions"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:66
+msgid "Examples"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:68
+msgid "Example 1: Error PDF Analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:81
+msgid "Example 2: Multiple Non-Idealities"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:97
+msgid "Interpretation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:99
+msgid "Error Distribution Shapes"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md
+msgid "PDF Shape"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md
+msgid "Likely Cause"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md
+msgid "**Gaussian**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md
+msgid "Thermal noise (random, white)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md
+msgid "**Uniform**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md
+msgid "Quantization noise (ideal ADC)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md
+msgid "**Bimodal**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md
+msgid "Missing codes, DNL issues"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md
+msgid "**Heavy tails**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md
+msgid "Impulsive noise, glitches"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md
+msgid "**Asymmetric**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md
+msgid "Systematic offset, drift"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:109
+msgid "KL Divergence"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:111
+msgid "**KL < 0.1**: Very close to Gaussian (thermal noise dominant)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:112
+msgid "**0.1 < KL < 0.5**: Moderately Gaussian"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:113
+msgid "**KL > 0.5**: Non-Gaussian (distortion, deterministic errors)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:115
+msgid "Use Cases"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:117
+msgid "Distinguish thermal noise from quantization noise"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:118
+msgid "Identify non-Gaussian error sources (glitches, interference)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:119
+msgid "Validate ADC noise models"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:120
+msgid "Compare error characteristics across different non-idealities"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:122
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:124
+msgid ""
+"[`analyze_error_autocorr`](analyze_error_autocorr.md) — Temporal "
+"correlation in errors"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:125
+msgid ""
+"[`analyze_error_spectrum`](analyze_error_spectrum.md) — Frequency content"
+" of errors"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:126
+msgid "[`fit_sine_4param`](fit_sine_4param.md) — Sine wave fitting"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:128
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:130
+msgid ""
+"IEEE Std 1241-2010, \"IEEE Standard for Terminology and Test Methods for "
+"ADCs\""
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_pdf.md:131
+msgid ""
+"S. Kullback and R. A. Leibler, \"On Information and Sufficiency,\" Annals"
+" of Mathematical Statistics, 1951"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_spectrum.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_spectrum.po
new file mode 100644
index 0000000..8c887b1
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_error_spectrum.po
@@ -0,0 +1,434 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/analyze_error_spectrum.md:1
+msgid "analyze_error_spectrum"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:5
+msgid ""
+"`analyze_error_spectrum` computes the FFT spectrum of the ADC error "
+"signal (data - fitted sine) to reveal frequency components in the error. "
+"This is distinct from analyzing the signal spectrum itself—here we "
+"analyze only the residual error after removing the ideal sine wave."
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:7
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:24
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:26
+msgid "**`signal`** (array_like) — Input ADC signal (sine wave excitation)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:27
+msgid "**`fs`** (float, default=1) — Sampling frequency in Hz"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:28
+msgid "**`frequency`** (float, optional) — Normalized frequency (0-0.5)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:29
+msgid "If None: auto-detected via FFT"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:30
+msgid "**`show_plot`** (bool, default=True) — Display error spectrum plot"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:31
+msgid "**`ax`** (matplotlib axis, optional) — Axis to plot on"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:32
+msgid "**`title`** (str, optional) — Title for the plot"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:34
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:36
+msgid "Dictionary containing:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:38
+msgid "**Metrics (of error signal):**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:39
+msgid "**`enob`** — Effective Number of Bits"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:40
+msgid "**`sndr_db`** — Signal-to-Noise and Distortion Ratio (dB)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:41
+msgid "**`sfdr_db`** — Spurious-Free Dynamic Range (dB)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:42
+msgid "**`snr_db`** — Signal-to-Noise Ratio (dB)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:43
+msgid "**`thd_db`** — Total Harmonic Distortion (dB)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:44
+msgid "**`sig_pwr_dbfs`** — Signal power (dBFS)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:45
+msgid "**`noise_floor_dbfs`** — Noise floor (dBFS)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:47
+msgid "**Error Data:**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:48
+msgid "**`error_signal`** — Error signal (data - fitted sine)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:50
+msgid "Algorithm"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:68
+msgid "Key Difference from analyze_spectrum"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Function"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "What it Analyzes"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Use Case"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**`analyze_spectrum`**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Original signal spectrum"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Overall ADC performance (ENOB, SNR, harmonics)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**`analyze_error_spectrum`**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Error signal spectrum"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Error characteristics, frequency-dependent errors"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:75
+msgid "Examples"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:77
+msgid "Example 1: Error Spectrum Analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:91
+msgid "Example 2: Compare Signal vs. Error Spectra"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:113
+msgid "Example 3: Identify Frequency-Dependent Errors"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:126
+msgid "Example 4: Batch Analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+#: ../../source/algorithms/analyze_error_spectrum.md:139
+msgid "Interpretation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:141
+msgid "Error Spectrum Shape"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Spectrum Shape"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**Flat (white)**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Random noise (thermal, quantization)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**1/f shape**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Flicker noise, drift"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**Peaks at harmonics**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Nonlinearity (HD2, HD3, etc.)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**Peaks at non-harmonics**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Spurs (power supply, clock coupling)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**High at low freq**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Offset drift, 1/f noise"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:151
+msgid "Common Error Signatures"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Peak Location"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Likely Cause"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**DC (0 Hz)**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Offset drift (should be minimal)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**f_clock**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Clock feedthrough"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**f_supply**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Power supply ripple"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**2×f_in, 3×f_in**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Harmonic distortion"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**f_in ± f_clock**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Sampling artifacts"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:161
+msgid "SFDR of Error"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:163
+msgid "**Error SFDR > 80 dB**: Excellent, noise-limited"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:164
+msgid "**60 < Error SFDR < 80 dB**: Good, some distortion"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:165
+msgid "**Error SFDR < 60 dB**: Significant spurious content"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:167
+msgid "Use Cases"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:169
+msgid "**Distinguish noise from distortion** in error"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:170
+msgid "**Identify interference sources** (spurs in error spectrum)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:171
+msgid "**Validate fitting quality** (DC component should be near zero)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:172
+msgid "**Debug frequency-dependent errors**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:173
+msgid "**Measure noise floor** excluding signal energy"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:175
+msgid "Comparison with Other Error Analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Domain"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Shows"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Frequency"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Error frequency components"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**`analyze_error_pdf`**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Statistical"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Error distribution"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**`analyze_error_autocorr`**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Time"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Temporal correlation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**`analyze_error_envelope_spectrum`**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "AM modulation in error"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "**`analyze_error_by_phase`**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "Phase"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md
+msgid "AM/PM decomposition"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:185
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:187
+msgid "[`analyze_spectrum`](analyze_spectrum.md) — Signal spectrum (not error)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:188
+msgid ""
+"[`analyze_error_envelope_spectrum`](analyze_error_envelope_spectrum.md) —"
+" Error envelope (AM detection)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:189
+msgid "[`analyze_error_pdf`](analyze_error_pdf.md) — Error distribution"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:190
+msgid ""
+"[`fit_sine_4param`](fit_sine_4param.md) — Sine fitting for error "
+"extraction"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:192
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:194
+msgid ""
+"IEEE Std 1241-2010, \"IEEE Standard for Terminology and Test Methods for "
+"ADCs\""
+msgstr ""
+
+#: ../../source/algorithms/analyze_error_spectrum.md:195
+msgid ""
+"B. Razavi, \"Principles of Data Conversion System Design,\" IEEE Press, "
+"1995"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_inl_from_sine.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_inl_from_sine.po
new file mode 100644
index 0000000..86246c2
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_inl_from_sine.po
@@ -0,0 +1,411 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:1
+msgid "analyze_inl_from_sine"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:5
+msgid ""
+"`analyze_inl_from_sine` computes Integral Nonlinearity (INL) and "
+"Differential Nonlinearity (DNL) from sine wave histogram test using the "
+"inverse cosine method. This is the Python implementation following IEEE "
+"Std 1241-2010."
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:7
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:25
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:27
+msgid "**`data`** (array_like) — ADC output signal"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:28
+msgid "Analog: Float values (normalized 0-1 or full-scale voltage)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:29
+msgid "Digital: Integer codes or float representation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:30
+msgid ""
+"**`num_bits`** (int, optional) — ADC resolution in bits. If None, "
+"inferred from data range"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:31
+msgid "**`full_scale`** (float, optional) — Full-scale voltage for quantization"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:32
+msgid "If provided: codes = round(data × 2^num_bits / full_scale)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:33
+msgid "If None: assumes normalized input (0-1 range)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:34
+msgid ""
+"**`clip_percent`** (float, default=0.01) — Fraction of code range to "
+"exclude from edges (0.01 = 1%)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:35
+msgid "Removes unreliable bins near saturation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:36
+msgid "**`show_plot`** (bool, default=True) — Display INL/DNL plots"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:37
+msgid ""
+"**`show_title`** (bool, default=True) — Show auto-generated title with "
+"min/max ranges"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:38
+msgid ""
+"**`col_title`** (str, optional) — Column title above DNL plot (e.g., \"N "
+"= 2^10\")"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:39
+msgid ""
+"**`ax`** (matplotlib axis, optional) — Axis to plot on. If None, uses "
+"current axis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:41
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:43
+msgid "Dictionary containing:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:45
+msgid "**`inl`** — Integral nonlinearity (LSB units)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:46
+msgid "**`dnl`** — Differential nonlinearity (LSB units)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:47
+msgid "**`code`** — Corresponding code values (x-axis)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:49
+msgid "Algorithm"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:51
+msgid "1. Histogram Construction"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:61
+msgid "2. Inverse Cosine Transform"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:63
+msgid "Sine wave PDF is `p(x) ∝ 1/√(1 - x²)`, corresponding CDF:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:70
+msgid ""
+"This maps the nonlinear sine wave distribution to a linear ideal ADC "
+"response."
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:72
+msgid "3. DNL Calculation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:80
+msgid "**Units**: LSB (Least Significant Bit)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:81
+msgid "DNL = 0: Ideal step size"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:82
+msgid "DNL = -1: Missing code"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:83
+msgid "DNL > 0: Code width > 1 LSB"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:85
+msgid "4. INL Calculation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:91
+msgid "**Units**: LSB"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:92
+msgid "INL = 0: Ideal transfer function"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:93
+msgid "INL > 0: Output higher than ideal"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:94
+msgid "INL < 0: Output lower than ideal"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:96
+msgid "Examples"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:98
+msgid "Example 1: Basic Usage"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:112
+msgid "Example 2: Tight Clipping"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:119
+msgid "Example 3: Custom Plotting"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:130
+msgid "Example 4: Batch Analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:141
+msgid "Interpretation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:143
+msgid "DNL Analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "DNL Value"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "Meaning"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "`DNL ≈ 0`"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "Ideal uniform code width"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "`DNL < -0.5`"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "Code width < 0.5 LSB → potential missing code"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "`DNL = -1`"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "Missing code (zero histogram hits)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "`DNL > 0.5`"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "Code width > 1.5 LSB → significant nonlinearity"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:152
+msgid "INL Analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "INL Value"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "ADC Quality"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "`max(|INL|) < 0.5`"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "Excellent (< 0.5 LSB error)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "`max(|INL|) < 1.0`"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "Good (< 1 LSB error)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "`max(|INL|) > 2.0`"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "Poor, needs calibration"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "INL shape: bow"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "Gain/offset error"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "INL shape: S-curve"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "2nd-order nonlinearity"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "INL shape: periodic"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md
+msgid "Cyclic error (e.g., flash ADC)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:163
+msgid "Limitations"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:165
+msgid ""
+"**Sine wave input required**: Assumes sine wave histogram PDF `∝ 1/√(1 - "
+"x²)`"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:166
+msgid "Ramp or triangle inputs require different methods"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:167
+msgid ""
+"**Sufficient samples**: Requires `>> 2^N` samples for N-bit ADC "
+"(typically 10× minimum)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:168
+msgid "For 12-bit ADC: need > 40,000 samples for reliable results"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:169
+msgid ""
+"**Clipping sensitive**: Edge bins unreliable due to saturation → adjust "
+"`clip_percent`"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:170
+msgid ""
+"**Missing codes**: DNL = -1 causes CDF discontinuities, may need special "
+"handling"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:172
+msgid "Common Issues"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:174
+msgid "Low Sample Count"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:183
+msgid "Signal Clipping"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:189
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:191
+msgid "[`fit_sine_4param`](fit_sine_4param.md) — Sine wave parameter extraction"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:192
+msgid ""
+"[`calibrate_weight_sine`](calibrate_weight_sine.md) — Digital weight "
+"calibration to reduce INL/DNL"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:193
+msgid ""
+"[`analyze_spectrum`](analyze_spectrum.md) — Frequency-domain linearity "
+"(SFDR, THD)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:194
+msgid ""
+"[`compute_inl_from_sine`](../api/aout.rst) — Core computation without "
+"plotting"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:196
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:198
+msgid "IEEE Std 1241-2010, Section 5.5, \"Histogram Test Method\""
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:199
+msgid ""
+"J. Doernberg et al., \"Full-Speed Testing of A/D Converters,\" IEEE JSSC,"
+" 1984"
+msgstr ""
+
+#: ../../source/algorithms/analyze_inl_from_sine.md:200
+msgid ""
+"M. F. Wagdy and W. Ng, \"Validity of Uniform Quantization Error Model for"
+" Sinusoidal Signals Without and With Dither,\" IEEE Trans. IM, 1989"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_spectrum.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_spectrum.po
new file mode 100644
index 0000000..b7e5dd2
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_spectrum.po
@@ -0,0 +1,421 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/analyze_spectrum.md:1
+msgid "analyze_spectrum"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:5
+msgid ""
+"`analyze_spectrum` performs FFT-based spectrum analysis for ADC "
+"characterization, computing key metrics including ENOB, SNR, SNDR, SFDR, "
+"THD, and harmonic content. This is the primary tool for frequency-domain "
+"ADC performance evaluation."
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:7
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:28
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:30
+msgid "**`signal`** (array_like) — Input ADC signal (1D array)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:31
+msgid "**`fs`** (float) — Sampling frequency in Hz"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:32
+msgid "**`harmonic`** (int, default=9) — Number of harmonics to analyze (2-20)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:33
+msgid ""
+"**`window`** (str, default='blackman') — Window function: 'rect', 'hann',"
+" 'hamming', 'blackman', 'flattop'"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:34
+msgid "**`nfft`** (int, optional) — FFT length. If None, uses len(signal)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:35
+msgid "**`num_avg`** (int, default=1) — Number of segments for averaging"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:36
+msgid ""
+"**`mode`** (str, default='coherent') — Averaging mode: 'coherent' or "
+"'power'"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:37
+msgid "**`show_plot`** (bool, default=False) — Display interactive spectrum plot"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:38
+msgid "**`ax`** (matplotlib axis, optional) — Axis for plotting"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:40
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:42
+msgid "Dictionary containing:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:44
+msgid "**Metrics:**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:45
+msgid "**`enob`** — Effective Number of Bits"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:46
+msgid "**`snr_db`** — Signal-to-Noise Ratio (dB)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:47
+msgid "**`sndr_db`** — Signal-to-Noise-and-Distortion Ratio (dB)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:48
+msgid "**`sfdr_db`** — Spurious-Free Dynamic Range (dB)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:49
+msgid "**`thd_db`** — Total Harmonic Distortion (dB)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:50
+msgid ""
+"**`sinad_db`** — Signal-to-Noise-and-Distortion (alternative name for "
+"SNDR)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:51
+msgid "**`nsd_dbfs_hz`** — Noise Spectral Density (dBFS/Hz)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:53
+msgid "**Spectrum Data:**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:54
+msgid "**`freq`** — Frequency bins (Hz)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:55
+msgid "**`magnitude_db`** — Spectrum magnitude (dBFS)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:56
+msgid "**`fundamental_bin`** — FFT bin of fundamental frequency"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:57
+msgid "**`fundamental_freq`** — Fundamental frequency (Hz)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:58
+msgid "**`harmonic_bins`** — FFT bins of harmonics (list)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:59
+msgid "**`harmonic_powers`** — Power of each harmonic (dB, list)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:61
+msgid "Algorithm"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:63
+msgid "1. Signal Preprocessing"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:74
+msgid "2. FFT Computation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:82
+msgid "3. Fundamental Detection"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:90
+msgid "4. Harmonic Identification"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:98
+msgid "5. Metric Calculation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:118
+msgid "Examples"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:120
+msgid "Example 1: Basic Spectrum Analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:142
+msgid "Example 2: With Interactive Plotting"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:149
+msgid "Example 3: Windowing Comparison"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:160
+msgid "Example 4: Coherent Averaging"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:168
+msgid "Window Function Selection"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "Window"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "ENBW*"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "Peak Side Lobe"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "Use Case"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "**rect**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "1.0"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "-13 dB"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "Coherent signals only"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "**hann**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "1.5"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "-32 dB"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "General purpose"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "**hamming**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "1.36"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "-43 dB"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "Better side lobe rejection"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "**blackman**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "1.73"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "-58 dB"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "High dynamic range (default)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "**flattop**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "3.77"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "-93 dB"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md
+msgid "Accurate amplitude measurement"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:178
+msgid "*ENBW = Equivalent Noise Bandwidth (bins)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:180
+msgid "Interpretation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:182
+msgid "ENOB (Effective Number of Bits)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:183
+msgid "**ENOB ≈ N-bit ADC**: Ideal performance"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:184
+msgid "**ENOB < N - 2**: Poor performance, investigate noise/distortion"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:185
+msgid "**ENOB > N**: Oversampling or dithering improving effective resolution"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:187
+msgid "SFDR (Spurious-Free Dynamic Range)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:188
+msgid "**SFDR > 80 dB**: Excellent linearity"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:189
+msgid "**60 dB < SFDR < 80 dB**: Good for most applications"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:190
+msgid "**SFDR < 60 dB**: Significant spurs, check for:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:191
+msgid "Power supply coupling"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:192
+msgid "Clock feedthrough"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:193
+msgid "Intermodulation products"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:195
+msgid "THD (Total Harmonic Distortion)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:196
+msgid "**THD < -80 dB**: Very linear"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:197
+msgid "**-60 dB < THD < -80 dB**: Acceptable for most uses"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:198
+msgid "**THD > -60 dB**: Nonlinearity issues"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:200
+msgid "Common Issues"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:202
+msgid "Non-Coherent Sampling"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:213
+msgid "Insufficient FFT Length"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:222
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:224
+msgid ""
+"[`analyze_spectrum_polar`](analyze_spectrum_polar.md) — Polar phase "
+"spectrum analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:225
+msgid ""
+"[`analyze_two_tone_spectrum`](analyze_two_tone_spectrum.md) — Two-tone "
+"IMD testing"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:226
+msgid ""
+"[`find_coherent_frequency`](../api/fundamentals.rst) — Calculate coherent"
+" test frequencies"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:228
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:230
+msgid ""
+"IEEE Std 1241-2010, \"IEEE Standard for Terminology and Test Methods for "
+"ADCs\""
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:231
+msgid ""
+"F. J. Harris, \"On the Use of Windows for Harmonic Analysis with the "
+"DFT,\" Proc. IEEE, 1978"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum.md:232
+msgid "Application Note AN-9675, \"Coherent Sampling Calculator,\" Analog Devices"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_spectrum_polar.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_spectrum_polar.po
new file mode 100644
index 0000000..53dd03a
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_spectrum_polar.po
@@ -0,0 +1,149 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:1
+msgid "analyze_spectrum_polar"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:5
+msgid ""
+"`analyze_spectrum_polar` performs FFT-based spectrum analysis with polar "
+"(phase) visualization. This tool is particularly useful for "
+"distinguishing between noise (random phase) and deterministic distortion "
+"(coherent phase)."
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:7
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:20
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:22
+msgid "**`signal`** (array_like) — Input ADC signal"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:23
+msgid "**`fs`** (float) — Sampling frequency in Hz"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:24
+msgid "**`harmonic`** (int, default=9) — Number of harmonics to analyze"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:25
+msgid "**`window`** (str, default='blackman') — Window function"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:26
+msgid "**`nfft`** (int, optional) — FFT length"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:27
+msgid "**`show_plot`** (bool, default=False) — Display polar plot"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:28
+msgid "**`ax`** (matplotlib axis, optional) — Axis for plotting"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:30
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:32
+msgid "Dictionary containing spectrum metrics (same as `analyze_spectrum`) plus:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:33
+msgid "**`phase`** — Phase spectrum in radians"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:34
+msgid "**`phase_unwrapped`** — Unwrapped phase for easier analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:36
+msgid "Key Features"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:38
+msgid ""
+"**Polar visualization**: Magnitude vs. phase plot reveals noise vs. "
+"distortion"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:39
+msgid ""
+"**Phase coherence**: Deterministic signals have fixed phase, noise has "
+"random phase"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:40
+msgid "**Memory effects**: Phase deviations indicate signal-dependent errors"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:42
+msgid "Use Cases"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:44
+msgid "Distinguish thermal noise from harmonic distortion"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:45
+msgid "Identify memory effects in pipelined ADCs"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:46
+msgid "Analyze settling errors and inter-symbol interference"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:48
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:50
+msgid "[`analyze_spectrum`](analyze_spectrum.md) — Standard spectrum analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:51
+msgid ""
+"[`analyze_two_tone_spectrum`](analyze_two_tone_spectrum.md) — Two-tone "
+"testing"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:53
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/analyze_spectrum_polar.md:55
+msgid ""
+"IEEE Std 1241-2010, \"IEEE Standard for Terminology and Test Methods for "
+"ADCs\""
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_two_tone_spectrum.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_two_tone_spectrum.po
new file mode 100644
index 0000000..bc91f8f
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/analyze_two_tone_spectrum.po
@@ -0,0 +1,237 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:1
+msgid "analyze_two_tone_spectrum"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:5
+msgid ""
+"`analyze_two_tone_spectrum` performs two-tone spectrum analysis for ADC "
+"characterization, measuring intermodulation distortion (IMD2, IMD3) and "
+"two-tone SFDR. This is essential for evaluating ADC linearity with multi-"
+"signal inputs."
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:7
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:19
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:21
+msgid "**`signal`** (array_like) — Input two-tone signal"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:22
+msgid "**`fs`** (float) — Sampling frequency in Hz"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:23
+msgid "**`window`** (str, default='blackman') — Window function"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:24
+msgid "**`nfft`** (int, optional) — FFT length"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:25
+msgid "**`show_plot`** (bool, default=False) — Display spectrum plot"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:26
+msgid "**`ax`** (matplotlib axis, optional) — Axis for plotting"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:28
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:30
+msgid "Dictionary containing:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:32
+msgid "**Two-Tone Metrics:**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:33
+msgid "**`imd2_db`** — 2nd-order intermodulation distortion (dB)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:34
+msgid "**`imd3_db`** — 3rd-order intermodulation distortion (dB)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:35
+msgid "**`imd2_freq`** — IMD2 product frequencies (Hz)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:36
+msgid "**`imd3_freq`** — IMD3 product frequencies (Hz)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:37
+msgid "**`sfdr_two_tone_db`** — Spurious-free dynamic range for two-tone"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:39
+msgid "**Tone Information:**"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:40
+msgid "**`tone1_freq`**, **`tone2_freq`** — Fundamental frequencies"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:41
+msgid "**`tone1_power_db`**, **`tone2_power_db`** — Tone powers"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:43
+msgid "Algorithm"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:45
+msgid "Intermodulation Products"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:47
+msgid "For tones at f₁ and f₂:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:49
+msgid "**IMD2**: Products at f₁±f₂"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:50
+msgid "**IMD3**: Products at 2f₁-f₂ and 2f₂-f₁"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:65
+msgid "Examples"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:67
+msgid "Example 1: Two-Tone Analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:88
+msgid "Interpretation"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:90
+msgid "IMD Performance"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md
+msgid "IMD Level"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md
+msgid "ADC Quality"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md
+msgid "IMD3 < -80 dBc"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md
+msgid "Excellent linearity"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md
+msgid "-60 < IMD3 < -80 dBc"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md
+msgid "Good performance"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md
+msgid "IMD3 > -60 dBc"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md
+msgid "Significant nonlinearity"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:98
+msgid "Common Issues"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:100
+msgid "**IMD2 dominant**: Even-order nonlinearity (differential pair mismatch)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:101
+msgid "**IMD3 dominant**: Odd-order nonlinearity (compression, limiting)"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:102
+msgid "**High IMD products**: Check for:"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:103
+msgid "Insufficient signal amplitude"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:104
+msgid "ADC overload/clipping"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:105
+msgid "Poor power supply rejection"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:107
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:109
+msgid "[`analyze_spectrum`](analyze_spectrum.md) — Single-tone analysis"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:110
+msgid "[`fit_static_nonlin`](../api/aout.rst) — Extract nonlinearity coefficients"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:112
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:114
+msgid ""
+"IEEE Std 1241-2010, \"IEEE Standard for Terminology and Test Methods for "
+"ADCs\""
+msgstr ""
+
+#: ../../source/algorithms/analyze_two_tone_spectrum.md:115
+msgid ""
+"Application Note AN-742, \"Frequency Domain Response of Switched-"
+"Capacitor ADCs,\" Analog Devices"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/calibrate_weight_sine.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/calibrate_weight_sine.po
new file mode 100644
index 0000000..15fc77e
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/calibrate_weight_sine.po
@@ -0,0 +1,1074 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/calibrate_weight_sine.md:1
+msgid "calibrate_weight_sine"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:5
+msgid ""
+"`calibrate_weight_sine` provides comprehensive, production-ready ADC "
+"foreground calibration using sinewave input. This is the full-featured "
+"version supporting automatic frequency search, rank deficiency handling, "
+"harmonic rejection, and multi-dataset calibration."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:7
+msgid "**Key Features:**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:8
+msgid "✅ Automatic frequency search with coarse and fine refinement"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:9
+msgid "✅ Rank deficiency handling for redundant ADC architectures"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:10
+msgid "✅ Harmonic rejection to exclude distortion"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:11
+msgid "✅ Multi-dataset calibration for time-interleaved ADCs"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:12
+msgid "✅ Numerical conditioning for robust convergence"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:13
+msgid "✅ Comprehensive diagnostics (SNDR, ENOB, error signals)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:15
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:37
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:39
+msgid "**`bits`** (ndarray or list of ndarrays) — Binary data matrix"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:40
+msgid "Single dataset: (N samples × M bits) ndarray"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:41
+msgid "Multi-dataset: list of ndarrays for time-interleaved ADCs"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:42
+msgid "Each row is one sample, each column is a bit (MSB first)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:44
+msgid ""
+"**`freq`** (float, array, or None, optional) — Normalized frequency (f_in"
+" / f_s)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:45
+msgid "`None`: Automatic frequency search (default)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:46
+msgid "`float`: Single frequency for all datasets"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:47
+msgid "`array`: Per-dataset frequencies for multi-dataset mode"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:49
+msgid ""
+"**`force_search`** (bool, optional) — Force fine frequency search even "
+"when frequency is provided"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:50
+msgid "Default: `False`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:51
+msgid "Set to `True` to refine provided frequencies"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:53
+msgid ""
+"**`nominal_weights`** (array, optional) — Nominal bit weights (only "
+"effective when rank is deficient)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:54
+msgid "Default: `[2^(M-1), 2^(M-2), ..., 2, 1]`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:55
+msgid "Required for redundant ADCs (e.g., `[128, 128, 64, ...]`)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:57
+msgid ""
+"**`harmonic_order`** (int, optional) — Number of harmonic terms to "
+"exclude in calibration"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:58
+msgid "Default: `1` (fundamental only, no harmonic exclusion)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:59
+msgid "Higher values exclude more harmonics from error term"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:60
+msgid "Example: `harmonic_order=3` excludes 1st, 2nd, 3rd harmonics"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:62
+msgid ""
+"**`learning_rate`** (float, optional) — Adaptive learning rate for "
+"frequency updates"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:63
+msgid "Default: `0.5`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:64
+msgid "Range: `0 < learning_rate < 1`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:65
+msgid "Lower values = more conservative convergence"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:67
+msgid "**`reltol`** (float, optional) — Relative error tolerance for convergence"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:68
+msgid "Default: `1e-12`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:70
+msgid ""
+"**`max_iter`** (int, optional) — Maximum iterations for fine frequency "
+"search"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:71
+msgid "Default: `100`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:73
+msgid "**`verbose`** (int, optional) — Print verbosity level"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:74
+msgid "`0`: Silent (default)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:75
+msgid "`1`: Basic progress"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:76
+msgid "`2`: Detailed diagnostics"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:78
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:80
+msgid "Dictionary with keys:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:82
+msgid ""
+"**`weight`** (ndarray) — Calibrated bit weights, normalized by sinewave "
+"magnitude"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:83
+msgid "Length: M (bit width)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:84
+msgid "Normalized so max weight ≈ 1.0"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:86
+msgid "**`offset`** (float or ndarray) — Calibrated DC offset(s)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:87
+#: ../../source/algorithms/calibrate_weight_sine.md:103
+msgid "Single value for single dataset"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:88
+#: ../../source/algorithms/calibrate_weight_sine.md:104
+msgid "Array for multi-dataset"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:90
+msgid "**`calibrated_signal`** (ndarray or list) — Signal after calibration"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:91
+#: ../../source/algorithms/calibrate_weight_sine.md:95
+msgid "Single array for single dataset"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:92
+#: ../../source/algorithms/calibrate_weight_sine.md:96
+msgid "List of arrays for multi-dataset"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:94
+msgid ""
+"**`ideal`** (ndarray or list) — Best fitted sinewave (excluding harmonics"
+" > H)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:98
+msgid "**`error`** (ndarray or list) — Residue errors after calibration"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:99
+msgid "error = calibrated_signal - ideal"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:100
+msgid "Excludes distortion harmonics"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:102
+msgid ""
+"**`refined_frequency`** (float or ndarray) — Refined frequency from "
+"calibration"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:106
+msgid "**`snr_db`** (float or ndarray) — Signal-to-noise ratio in dB"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:108
+msgid "**`enob`** (float or ndarray) — Effective number of bits"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:109
+msgid "Calculated as: `(snr_db - 1.76) / 6.02`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:111
+msgid "Algorithm"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:113
+msgid "Modular Pipeline (8 Stages)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:121
+msgid "Each stage is implemented as a separate helper function."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:123
+msgid "Mathematical Model"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:125
+msgid "The ADC output with harmonic rejection is modeled as:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:132
+msgid "where:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:133
+msgid "`y(n)` = reconstructed analog signal"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:134
+msgid "`w_i` = weight of bit i (unknown)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:135
+#, python-brace-format
+msgid "`b_i(n) ∈ {0, 1}` = binary value of bit i"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:136
+msgid "`f` = normalized frequency"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:137
+msgid "`H` = harmonic order"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:138
+msgid "`A_k, B_k` = amplitude coefficients for harmonic k"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:139
+msgid "`C` = DC offset"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:141
+msgid "Dual-Basis Least Squares"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:143
+msgid ""
+"Unlike the lite version, the full algorithm tries **both** basis "
+"assumptions:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:145
+msgid "**Cosine Basis** (A_1 = 1):"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:150
+msgid "**Sine Basis** (B_1 = 1):"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:155
+msgid ""
+"The algorithm solves both and selects the one with **lower residual "
+"error**."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:157
+msgid "Rank Deficiency Handling"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:159
+msgid ""
+"For redundant ADCs (e.g., weights `[128, 128, 64, ...]`), the bit matrix "
+"has rank deficiency. The algorithm:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:161
+msgid "**Identifies redundant columns** — Bits with identical patterns"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:162
+#, python-brace-format
+msgid "**Groups identical bits** — `{b_i, b_j}` if `b_i(n) = b_j(n)` for all n"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:163
+msgid "**Solves reduced system** — One representative per group"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:164
+msgid "**Distributes weights** using nominal weights:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:170
+msgid "**Example:**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:171
+msgid "Redundant bits: `[b_4, b_5]` both have pattern `[0,1,1,0,1,...]`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:172
+msgid "Nominal weights: `w_4^nom = 128, w_5^nom = 128`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:173
+msgid "Solved effective weight: `w_eff = 256`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:174
+msgid "Recovered weights: `w_4 = w_5 = 256 × (128/(128+128)) = 128` ✅"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:176
+msgid "**This preserves redundancy rather than collapsing it to zero!**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:178
+msgid "Frequency Search"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:180
+msgid "**Coarse Search** (when `freq=None`):"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:181
+msgid "Reconstruct signal using nominal weights: `y_nom(n) = Σ w_i^nom · b_i(n)`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:182
+msgid "Compute FFT: `Y(k) = FFT(y_nom)`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:183
+msgid "Find peak: `k_peak = argmax |Y(k)|`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:184
+msgid "Initial frequency: `f_0 = k_peak / N`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:186
+msgid "**Fine Search** (iterative refinement):"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:197
+msgid "Examples"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:199
+msgid "Example 1: Basic Calibration (Known Frequency)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:228
+msgid "Example 2: Automatic Frequency Search"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:243
+msgid "Example 3: Redundant ADC Calibration"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:277
+msgid "Example 4: Harmonic Rejection"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:293
+msgid "Example 5: Multi-Dataset Calibration (Time-Interleaved ADC)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:316
+msgid "Example 6: Forced Frequency Refinement"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:334
+msgid "Performance"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:336
+msgid "Computational Complexity"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:338
+msgid "**Time Complexity**: `O(I·N·M² + M³)`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:339
+msgid "I = number of frequency search iterations"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:340
+msgid "N = number of samples"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:341
+msgid "M = bit width"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:343
+msgid "**Space Complexity**: `O(N·M)`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:345
+msgid "**Typical Performance** (12-bit ADC, N=8192, Intel i7):"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:346
+msgid "Known frequency: ~20 ms"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:347
+msgid "Frequency search: ~50-100 ms (depends on convergence)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:348
+msgid "Multi-dataset (4 channels): ~80-150 ms"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:350
+msgid "Accuracy"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:352
+msgid "**Weight Recovery**:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:353
+msgid "Ideal conditions: Error < 10⁻⁶ LSB"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:354
+msgid "With noise (SNR > 60 dB): Error < 10⁻³ LSB"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:355
+msgid "Redundant weights: Fully preserved (both bits active)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:357
+msgid "**Frequency Estimation**:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:358
+msgid "Coarse FFT: Accuracy ≈ 1/N bins"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:359
+msgid "Fine search: Accuracy < 10⁻¹² (relative)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:361
+msgid "**ENOB Improvement**:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:362
+msgid "Binary ADC (no INL): +0.5 to +2 ENOB"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:363
+msgid "Redundant ADC: +2 to +4 ENOB (error correction)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:364
+msgid "Time-interleaved: +3 to +6 ENOB (timing skew correction)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:366
+msgid "Limitations"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:368
+msgid "Input Signal Requirements"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:370
+msgid "**Amplitude**: Input should be > -6 dBFS for stable weight recovery"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:371
+msgid ""
+"**Purity**: Input signal should have low distortion (THD < -60 dB) for "
+"best results"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:372
+msgid ""
+"**Coherency**: For FFT-based frequency estimation, use coherent sampling "
+"when possible"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:374
+msgid "Frequency Constraints"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:376
+msgid "**Nyquist**: `0 < f < 0.5` (normalized)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:377
+msgid "**Avoid DC and Nyquist**: `0.01 < f < 0.49` recommended"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:378
+msgid ""
+"**Multi-tone interference**: Avoid frequencies near `k/M` where k is "
+"small integer"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:380
+msgid "Convergence Issues"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:382
+msgid "Frequency search may fail to converge if:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:383
+#, python-format
+msgid "Initial frequency estimate is very poor (> 10% error)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:384
+msgid "Input amplitude is too low (< -10 dBFS)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:385
+msgid "Learning rate is too aggressive (α > 0.8)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:387
+msgid "**Solutions:**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:388
+msgid "Provide better initial frequency estimate"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:389
+msgid "Reduce `learning_rate` to 0.1-0.3"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:390
+msgid "Increase `max_iter` to 200-500"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:391
+msgid "Check `verbose=2` output for convergence diagnostics"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:393
+msgid "Multi-Dataset Assumptions"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:395
+msgid "Multi-dataset calibration assumes:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:396
+msgid "All channels share same bit weights (valid for time-interleaved ADCs)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:397
+msgid "Independent offset and gain per channel"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:398
+msgid "Small timing skew between channels"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:400
+msgid ""
+"For ADCs with **per-channel weight variation**, use separate single-"
+"dataset calibrations."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:402
+msgid "Comparison with Lite Version"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "Feature"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "Lite Version"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "Full Version"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "**Frequency handling**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "Known frequency only"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "Auto search + refinement"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "**Rank deficiency**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "❌ Collapses redundancy"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "✅ Preserves all weights"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "**Harmonic rejection**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "❌ No"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "✅ Configurable order"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "**Multi-dataset**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "❌ Single only"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "✅ Multiple datasets"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "**Numerical stability**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "Basic lstsq"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "Column scaling + conditioning"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "**Output**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "Weights only (ndarray)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "Full diagnostics (dict)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "**Return values**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "1 (weights)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "7 (weights, offset, signals, SNDR, ENOB, etc.)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "**Code complexity**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "~40 lines"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "~600+ lines (modular)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "**Typical runtime**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "5 ms"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md
+msgid "20-100 ms"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:416
+msgid "When to Use Full Version"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:418
+msgid "✅ **Use full version when:**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:419
+msgid "Unknown or imprecise frequency"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:420
+msgid "Redundant ADC architecture"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:421
+msgid "Need comprehensive diagnostics"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:422
+msgid "Multi-dataset or time-interleaved ADCs"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:423
+msgid "Harmonic rejection required"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:424
+msgid "Production/research environments"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:426
+msgid "❌ **Use lite version when:**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:427
+msgid "Frequency precisely known"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:428
+msgid "Binary weighted ADC (no redundancy)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:429
+msgid "Speed critical (embedded systems)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:430
+msgid "Minimal code footprint needed"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:432
+msgid "Pipeline Details"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:434
+msgid "Stage 1: Input Preparation (`_prepare_input`)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:436
+msgid "**Purpose**: Normalize input to unified format and validate"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:438
+#: ../../source/algorithms/calibrate_weight_sine.md:459
+msgid "**Operations**:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:439
+msgid "Convert single array to list: `[bits]`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:440
+msgid "Validate all arrays have same bit width M"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:441
+msgid "Stack: `bits_stacked = [bits_1; bits_2; ...]`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:442
+msgid "Generate nominal weights if not provided: `w_i^nom = 2^(M-1-i)`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:444
+msgid "Stage 2: Rank Deficiency Patching (`_patch_rank_deficiency`)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:446
+msgid "**Purpose**: Detect and handle redundant bits"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:448
+msgid "**Algorithm**:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:449
+msgid "Compute column norms: `||b_i|| = sqrt(Σ b_i(n)²)`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:450
+msgid "Find identical columns: `||b_i - b_j|| < ε`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:451
+msgid "Group identical bits: `G_1, G_2, ..., G_K` where K = M_eff"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:452
+msgid "Select representatives for each group"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:453
+msgid "Compute weight ratios: `r_i = w_i^nom / Σ w_j^nom` (j in group)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:455
+msgid "Stage 3: Column Scaling (`_scale_columns_for_conditioning`)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:457
+msgid "**Purpose**: Normalize bit columns for numerical stability"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:465
+msgid "Stage 4: Frequency Estimation (`_estimate_frequencies`)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:467
+msgid "**Purpose**: Estimate or validate input frequencies"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:469
+msgid "**Logic**:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:470
+msgid "If `freq=None`: FFT-based coarse estimation for each dataset"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:471
+msgid "If `freq=scalar`: broadcast to all datasets"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:472
+msgid "If `freq=array`: validate length matches number of datasets"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:474
+msgid "Stage 5: Least Squares Solve"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:476
+msgid "**Purpose**: Solve for weights and sinewave parameters"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:478
+msgid "**Known Frequency Path**:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:479
+msgid "Build design matrix A with all harmonics"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:480
+msgid "Try both cosine and sine basis"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:481
+msgid "Solve both and select basis with lower residual"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:483
+msgid "**Frequency Search Path**:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:484
+msgid "Initialize with coarse frequency"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:485
+msgid "Loop until convergence:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:486
+msgid "Solve weights at current frequency"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:487
+msgid "Compute phase error"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:488
+msgid "Update frequency using gradient"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:489
+msgid "Check convergence"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:491
+msgid "Stage 6-8: Recovery and Post-Processing"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:493
+msgid "**Recover column scaling**: Undo normalization"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:494
+msgid ""
+"**Recover rank deficiency**: Distribute effective weights to all physical"
+" bits"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:495
+msgid ""
+"**Post-process**: Assemble results dictionary with SNDR, ENOB, error "
+"signals"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:497
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:499
+msgid ""
+"**IEEE Standard 1057-2017**: \"IEEE Standard for Digitizing Waveform "
+"Recorders\""
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:501
+msgid ""
+"Vogel, C., & Johansson, H. (2006). \"Time-interleaved analog-to-digital "
+"converters: Status and future directions.\" *IEEE Transactions on "
+"Circuits and Systems I*, 53(11), 2386-2394."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:503
+msgid ""
+"Jin, H., & Lee, E. K. F. (1992). \"A digital-background calibration "
+"technique for minimizing timing-error effects in time-interleaved ADCs.\""
+" *IEEE Transactions on Circuits and Systems II*, 47(7), 603-613."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:505
+msgid ""
+"Le Dortz, N., et al. (2014). \"A 1.62GS/s time-interleaved SAR ADC with "
+"digital background mismatch calibration achieving interleaving spurs "
+"below 70dBFS.\" *ISSCC Digest of Technical Papers*, 386-387."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:507
+msgid "MATLAB Signal Processing Toolbox: `sinefitweights` documentation"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:509
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:511
+msgid ""
+"[calibrate_weight_sine_lite](calibrate_weight_sine_lite.md) - Lightweight"
+" version for embedded systems"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:512
+msgid "[analyze_spectrum](analyze_spectrum.md) - Spectral analysis for SNDR/ENOB"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine.md:513
+msgid "[fit_sine_4param](fit_sine_4param.md) - IEEE 1057 sinewave fitting"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/calibrate_weight_sine_lite.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/calibrate_weight_sine_lite.po
new file mode 100644
index 0000000..e8ade43
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/calibrate_weight_sine_lite.po
@@ -0,0 +1,651 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:1
+msgid "calibrate_weight_sine_lite"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:5
+msgid ""
+"`calibrate_weight_sine_lite` provides a minimal, fast implementation of "
+"ADC foreground calibration using a known-frequency sinewave input. This "
+"is a simplified version of the full `calibrate_weight_sine` algorithm, "
+"optimized for speed and code simplicity."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:7
+msgid "**Key Characteristics:**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:8
+msgid "Single known-frequency calibration only (no frequency search)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:9
+msgid "Cosine-basis assumption (no dual-basis optimization)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:10
+msgid "No rank deficiency handling (binary weights only)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:11
+msgid "No harmonic rejection"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:12
+msgid "Returns normalized weights only"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:13
+msgid "Minimal dependencies (NumPy + SciPy only)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:15
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:24
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:26
+msgid "**`bits`** (ndarray) — Binary data matrix (N samples × M bits)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:27
+msgid "Each row is one sample"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:28
+msgid "Each column is a bit (MSB first)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:29
+msgid "Values must be 0 or 1"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:31
+msgid "**`freq`** (float) — Normalized frequency (f_in / f_s)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:32
+msgid "**Must be known precisely**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:33
+msgid "Range: 0 < freq < 0.5"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:35
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:37
+msgid "**`weights`** (ndarray) — Calibrated bit weights normalized to [0, 1]"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:38
+msgid "Length M (bit width)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:39
+msgid "Normalized by sinewave magnitude"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:40
+msgid "Largest weight = 1.0"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:42
+msgid "To get actual ADC weights:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:48
+msgid "Algorithm"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:50
+msgid "Mathematical Model"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:52
+msgid "The ADC output can be modeled as:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:57
+msgid "where:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:58
+msgid "`y(n)` = reconstructed analog signal"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:59
+msgid "`w_i` = weight of bit i (unknown)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:60
+#, python-brace-format
+msgid "`b_i(n) ∈ {0, 1}` = binary value of bit i at sample n"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:61
+msgid "`f` = normalized frequency (f_in/f_s)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:62
+msgid "`A, B` = sinewave amplitude coefficients"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:63
+msgid "`C` = DC offset"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:65
+msgid "Least Squares Formulation"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:67
+msgid "With the **cosine-basis assumption** (A = 1):"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:73
+msgid "In matrix form:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:85
+msgid "Algorithm Steps"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:87
+msgid "**Build Basis Functions**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:95
+msgid "**Construct Design Matrix**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:102
+msgid "**Solve Least Squares**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:107
+msgid "**Extract and Normalize Weights**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:115
+msgid "The normalization accounts for actual sinewave amplitude:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:120
+msgid "**Polarity Correction**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:126
+msgid "Examples"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:128
+msgid "Example 1: Basic Calibration"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:158
+msgid "**Expected Output:**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:164
+msgid "Example 2: With SNDR Calculation"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:186
+msgid "Limitations"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:188
+msgid "1. Known Frequency Required"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:190
+msgid ""
+"The function requires the input frequency to be **precisely known**. "
+"Unlike the full `calibrate_weight_sine`, it does not perform frequency "
+"search or refinement."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:192
+msgid ""
+"**Workaround**: Use `calibrate_weight_sine` with `force_search=True` if "
+"frequency is unknown."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:194
+msgid "2. Binary Weights Only (No Redundancy)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:196
+msgid ""
+"The algorithm **does not handle rank deficiency** or redundant weights. "
+"For ADCs with:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:197
+msgid "Redundant bits (e.g., `[128, 128, 64, 32, ...]`)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:198
+msgid "Identical weights"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:199
+msgid "Linear dependencies between bits"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:201
+msgid "The least squares solution may:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:202
+msgid "Collapse redundant weights to zero"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:203
+msgid "Produce numerically unstable results"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:204
+msgid "Fail to recover the full code range"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:206
+msgid "**Example Failure:**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:218
+msgid "**Why this is wrong:**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:219
+msgid "Original sum: 4222 (can represent 0-4095 with redundancy)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:220
+msgid "Collapsed sum: 4094 (cannot represent code 4095!)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:221
+msgid "Lost error correction capability"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:223
+msgid ""
+"**Workaround**: Use the full `calibrate_weight_sine` which includes "
+"`_patch_rank_deficiency` handling."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:225
+msgid "3. Low Signal Amplitude"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:227
+msgid ""
+"At very low input amplitudes (< -6 dBFS), MSB bits may have limited "
+"activity, leading to:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:228
+msgid "Ill-conditioned least squares matrix"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:229
+msgid "Numerically unstable weights (values in trillions)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:230
+msgid "Poor SNDR estimates"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:232
+msgid "**Example:**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:240
+msgid ""
+"**Recommendation**: Use input signals at or near full scale (0 dBFS to -3"
+" dBFS) for best results."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:242
+msgid "4. No Harmonic Rejection"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:244
+msgid ""
+"The algorithm fits only the **fundamental frequency**, without excluding "
+"harmonics from the error term. This can lead to:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:245
+msgid "Harmonic distortion biasing the weight estimates"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:246
+msgid "Reduced accuracy for ADCs with significant INL/DNL"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:248
+msgid ""
+"**Workaround**: Use `calibrate_weight_sine` with `harmonic_order > 1` to "
+"exclude harmonics."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:250
+msgid "Performance"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:252
+msgid "Computational Complexity"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:254
+msgid "**Time Complexity**: `O(N·M² + M³)`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:255
+msgid "N = number of samples"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:256
+msgid "M = bit width"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:257
+msgid "Dominated by least squares solve (SVD decomposition)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:259
+msgid "**Space Complexity**: `O(N·M)`"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:260
+msgid "Storage for design matrix"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:262
+msgid "**Typical Performance** (12-bit ADC, Intel i7):"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:263
+msgid "N = 2¹² (4096 samples): ~3 ms"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:264
+msgid "N = 2¹³ (8192 samples): ~5 ms"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:265
+msgid "N = 2¹⁶ (65536 samples): ~40 ms"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:267
+msgid "Accuracy"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:269
+msgid "**Weight Recovery** (ideal conditions):"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:270
+msgid "Error < 10⁻⁵ LSB (normalized)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:271
+msgid "Phase-independent performance"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:272
+msgid "ENOB: ~11-12 bits (for 12-bit ADC at 0 dBFS)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:274
+msgid "**Amplitude Requirements**:"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:284
+msgid "Comparison with Full Version"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "Feature"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "Lite Version"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "Full Version"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "**Frequency search**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "❌ No (requires known freq)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "✅ Yes (coarse + fine search)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "**Rank deficiency handling**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "❌ No"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "✅ Yes (via nominal weights)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "**Redundant weights**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "❌ Not supported"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "✅ Fully supported"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "**Harmonic rejection**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "✅ Yes (configurable order)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "**Multi-dataset calibration**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "✅ Yes"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "**Numerical conditioning**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "❌ Basic"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "✅ Column scaling + patching"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "**Return type**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "ndarray (weights only)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "dict (weights + diagnostics)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "**Code size**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "~40 lines"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "~600+ lines (with helpers)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "**Typical runtime** (N=8192)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "~5 ms"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md
+msgid "~20-50 ms"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:298
+msgid "When to Use Lite Version"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:300
+msgid "✅ **Use lite version when:**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:301
+msgid "Frequency is precisely known"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:302
+msgid "Binary weighted ADC (no redundancy)"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:303
+msgid "Speed is critical"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:304
+msgid "Simple embedded deployment"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:305
+msgid "Minimal code footprint needed"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:307
+msgid "❌ **Use full version when:**"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:308
+msgid "Unknown or imprecise frequency"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:309
+msgid "Redundant ADC architecture"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:310
+msgid "Need harmonic rejection"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:311
+msgid "Multi-dataset calibration"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:312
+msgid "Production calibration requiring robustness"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:314
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:316
+msgid ""
+"IEEE Standard 1057-2017: \"IEEE Standard for Digitizing Waveform "
+"Recorders\""
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:318
+msgid ""
+"Vogel, C., & Johansson, H. (2006). \"Time-interleaved analog-to-digital "
+"converters: Status and future directions.\" *IEEE Transactions on "
+"Circuits and Systems I*, 53(11), 2386-2394."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:320
+msgid ""
+"Jin, H., & Lee, E. K. F. (1992). \"A digital-background calibration "
+"technique for minimizing timing-error effects in time-interleaved ADCs.\""
+" *IEEE Transactions on Circuits and Systems II*, 47(7), 603-613."
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:322
+msgid "MATLAB Signal Processing Toolbox: `sinefitweights` documentation"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:324
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:326
+msgid ""
+"[calibrate_weight_sine](calibrate_weight_sine.md) - Full version with "
+"frequency search and rank handling"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:327
+msgid ""
+"[analyze_spectrum](analyze_spectrum.md) - Spectral analysis for SNDR/ENOB"
+" calculation"
+msgstr ""
+
+#: ../../source/algorithms/calibrate_weight_sine_lite.md:328
+msgid "[fit_sine_4param](fit_sine_4param.md) - IEEE 1057 sinewave fitting"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/fit_sine_4param.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/fit_sine_4param.po
new file mode 100644
index 0000000..caa116b
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/fit_sine_4param.po
@@ -0,0 +1,309 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/fit_sine_4param.md:1
+msgid "fit_sine_4param"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:5
+msgid ""
+"`fit_sine_4param` fits a pure sine wave to ADC output using iterative "
+"least-squares with frequency refinement. This implements the IEEE Std "
+"1057/1241 algorithm for precise sinusoidal parameter estimation."
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:7
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:23
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:25
+msgid "**`data`** (array_like) — ADC output signal (1D or 2D array)"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:26
+msgid ""
+"**`frequency_estimate`** (float, optional) — Initial normalized frequency"
+" (0 to 0.5)"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:27
+msgid "If None: auto-detect using FFT peak with parabolic interpolation"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:28
+msgid ""
+"**`max_iterations`** (int, default=1) — Number of iterations for "
+"frequency refinement"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:29
+msgid ""
+"**`tolerance`** (float, default=1e-9) — Convergence threshold for "
+"frequency updates"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:31
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:33
+msgid "Dictionary containing:"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:35
+msgid "**`fitted_signal`** — Reconstructed sine wave"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:36
+msgid "**`residuals`** — data - fitted_signal"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:37
+msgid "**`frequency`** — Refined normalized frequency (0 to 0.5)"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:38
+msgid "**`amplitude`** — Signal amplitude: sqrt(A² + B²)"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:39
+msgid "**`phase`** — Phase in radians: atan2(-B, A)"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:40
+msgid "**`dc_offset`** — DC component"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:41
+msgid "**`rmse`** — Root mean square error of the fit"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:43
+msgid "For 2D input, all scalar values become 1D arrays (one per column)."
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:45
+msgid "Algorithm"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:47
+msgid "1. Frequency Initialization (if not provided)"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:49
+msgid "**FFT-based coarse estimate** with 3-point parabolic interpolation:"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:59
+msgid "2. Iterative Least-Squares Refinement"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:61
+msgid "Model: **y = A·cos(ωt) + B·sin(ωt) + C**"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:63
+msgid "For each iteration:"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:65
+msgid "**Step 1**: Solve augmented least-squares system:"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:69
+msgid "where:"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:70
+msgid "`θ = 2π × freq × (0:N-1)`"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:71
+msgid "`∂/∂freq = derivative of signal w.r.t. frequency`"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:73
+msgid "**Step 2**: Update frequency:"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:78
+msgid "**Step 3**: Check convergence:"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:83
+msgid "3. Parameter Extraction"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:93
+msgid "Examples"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:95
+msgid "Example 1: Auto-Detect Frequency"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:116
+msgid "Example 2: Known Frequency"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:126
+msgid "Example 3: Tight Convergence"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:132
+msgid "Example 4: Visualize Fit Quality"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md
+#: ../../source/algorithms/fit_sine_4param.md:162
+msgid "Interpretation"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md
+msgid "Output"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md
+msgid "`amplitude / max(data)` ≈ 0.5"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md
+msgid "Full-scale sine wave input (peak-to-peak = 1)"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md
+msgid "`abs(dc_offset) << amplitude`"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md
+msgid "Well-centered signal"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md
+msgid "`abs(dc_offset) ≈ amplitude`"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md
+msgid "Large DC offset, check ADC biasing"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md
+msgid "High `rmse`"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md
+msgid "Distortion, harmonics, or noise present"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md
+msgid "`frequency` stable after 1 iteration"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md
+msgid "Good initial estimate"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:172
+msgid "Use Cases"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:174
+msgid "**Error Analysis**: Remove fitted sine to analyze distortion and noise"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:175
+msgid ""
+"**Signal Characterization**: Extract amplitude, frequency, phase for "
+"testing"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:176
+msgid "**Jitter Analysis**: Phase variations indicate timing jitter"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:177
+msgid "**Pre-processing**: For INL/DNL, harmonic decomposition, etc."
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:179
+msgid "Limitations"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:181
+msgid "**Single-tone only**: Assumes pure sine wave; fails with multi-tone inputs"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:182
+msgid "**No distortion modeling**: Harmonics treated as noise in residuals"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:183
+msgid ""
+"**Convergence**: May fail if initial estimate is very far from true "
+"frequency"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:184
+msgid "**Wraparound**: Frequency must be < 0.5 (Nyquist limit)"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:186
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:188
+msgid ""
+"[`analyze_decomposition_time`](analyze_decomposition.md) — Time-domain "
+"harmonic decomposition using fitted sine"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:189
+msgid ""
+"[`analyze_inl_from_sine`](analyze_inl_from_sine.md) — INL/DNL extraction "
+"from sine wave"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:190
+msgid "[`analyze_error_pdf`](analyze_error_pdf.md) — Error distribution analysis"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:192
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:194
+msgid "IEEE Std 1057-2017, \"IEEE Standard for Digitizing Waveform Recorders\""
+msgstr ""
+
+#: ../../source/algorithms/fit_sine_4param.md:195
+msgid ""
+"IEEE Std 1241-2010, \"IEEE Standard for Terminology and Test Methods for "
+"ADCs\""
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/fit_static_nonlin.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/fit_static_nonlin.po
new file mode 100644
index 0000000..b472285
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/fit_static_nonlin.po
@@ -0,0 +1,448 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/fit_static_nonlin.md:1
+msgid "fit_static_nonlin"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:3
+msgid "Overview"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:5
+msgid ""
+"`fit_static_nonlin` extracts static nonlinearity coefficients (k2, k3) "
+"from a distorted sine wave signal. This quantifies the 2nd-order and 3rd-"
+"order nonlinearity of an ADC's transfer function, which are the primary "
+"sources of harmonic distortion."
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:7
+msgid "Syntax"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:22
+msgid "Parameters"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:24
+msgid "**`sig_distorted`** (array_like) — Distorted sine wave signal samples"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:25
+msgid "**`order`** (int) — Polynomial order for fitting (typically 2-3)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:26
+msgid "order=2: Quadratic nonlinearity only (k2)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:27
+msgid "order=3: Quadratic + cubic nonlinearity (k2, k3)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:28
+msgid "order>3: Higher-order terms (advanced use)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:30
+msgid "Returns"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:32
+msgid "Tuple containing:"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:33
+msgid "**`k2_extracted`** (float) — Quadratic nonlinearity coefficient"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:34
+msgid "For ideal ADC: k2 = 0"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:35
+msgid "Represents 2nd-order distortion (HD2)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:36
+msgid "Returns NaN if order < 2"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:38
+msgid "**`k3_extracted`** (float) — Cubic nonlinearity coefficient"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:39
+msgid "For ideal ADC: k3 = 0"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:40
+msgid "Represents 3rd-order distortion (HD3)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:41
+msgid "Returns NaN if order < 3"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:43
+msgid ""
+"**`fitted_sine`** (array) — Fitted ideal sine wave input (reference "
+"signal)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:44
+msgid "Same length as sig_distorted"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:45
+msgid "This is the ideal sine extracted from distorted signal"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:47
+msgid "**`fitted_transfer`** (tuple) — Fitted transfer curve for plotting"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:48
+msgid "(x, y) where x is 1000 smooth input points, y is output"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:49
+msgid "For ideal system: y = x (straight line)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:51
+msgid "Transfer Function Model"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:53
+msgid "The ADC transfer function is modeled as:"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:59
+msgid "where:"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:60
+msgid "**x** = ideal input (zero-mean sine)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:61
+msgid "**y** = actual output (zero-mean)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:62
+msgid "**k2** = 2nd-order nonlinearity coefficient"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:63
+msgid "**k3** = 3rd-order nonlinearity coefficient"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:65
+msgid "Algorithm"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:88
+msgid "Examples"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:90
+msgid "Example 1: Extract Nonlinearity Coefficients"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:109
+msgid "Example 2: Plot Nonlinearity Curve"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:141
+msgid "Example 3: Relate Coefficients to Harmonic Distortion"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:162
+msgid "Example 4: Before/After Calibration"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+#: ../../source/algorithms/fit_static_nonlin.md:179
+msgid "Interpretation"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:181
+msgid "Coefficient Magnitude"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Coefficient"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Typical Range"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "**k2**"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "< 0.001"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Excellent linearity (HD2 < -80 dBc)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "0.001 - 0.01"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Good linearity (HD2: -60 to -80 dBc)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "> 0.01"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Poor linearity (HD2 > -60 dBc)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "**k3**"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "< 0.0001"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Excellent linearity (HD3 < -80 dBc)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "0.0001 - 0.001"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Good linearity (HD3: -60 to -80 dBc)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "> 0.001"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Poor linearity (HD3 > -60 dBc)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:192
+msgid "Coefficient Sign"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Sign"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Physical Meaning"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "**k2 > 0**"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Upward curvature (compression → expansion)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "**k2 < 0**"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Downward curvature (expansion → compression)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "**k3 > 0**"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Positive cubic term (soft saturation)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "**k3 < 0**"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Negative cubic term (hard limiting)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:201
+msgid "Dominant Nonlinearity"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Condition"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "ADC Characteristic"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "**|k2| >> |k3|**"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Even-order dominant (differential pair mismatch)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "**|k3| >> |k2|**"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Odd-order dominant (single-ended nonlinearity)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "**|k2| ≈ |k3|**"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md
+msgid "Mixed nonlinearity"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:209
+msgid "Limitations"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:211
+msgid "**Cannot extract gain error**: Sine fitting absorbs amplitude variations"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:212
+msgid "Gain calibration requires DC sweep or multi-amplitude testing"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:213
+msgid ""
+"**Assumes static nonlinearity**: Dynamic effects (memory, settling) not "
+"captured"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:214
+msgid ""
+"**Single-tone only**: Multi-tone distortion (IMD) requires different "
+"analysis"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:215
+msgid "**Numerical stability**: Order > 10 may cause ill-conditioning"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:217
+msgid "Common Issues"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:219
+msgid "High-Order Fitting (order > 5)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:228
+msgid "Interpreting NaN Results"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:239
+msgid "Use Cases"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:241
+msgid "**Characterize ADC linearity** quantitatively"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:242
+msgid "**Compare designs** (architecture, process, layout)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:243
+msgid "**Validate calibration** (before/after)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:244
+msgid "**Root cause analysis** (k2 vs k3 dominance)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:245
+msgid "**Predict harmonic distortion** from coefficients"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:247
+msgid "See Also"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:249
+msgid ""
+"[`analyze_spectrum`](analyze_spectrum.md) — Measure HD2, HD3 in frequency"
+" domain"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:250
+msgid ""
+"[`analyze_decomposition_time`](analyze_decomposition_time.md) — Time-"
+"domain harmonic extraction"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:251
+msgid ""
+"[`analyze_inl_from_sine`](analyze_inl_from_sine.md) — INL/DNL (code-level"
+" nonlinearity)"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:252
+msgid ""
+"[`calibrate_weight_sine`](calibrate_weight_sine.md) — Calibrate to reduce"
+" k2/k3"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:254
+msgid "References"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:256
+msgid "S. Max, \"Fast Accurate and Complete ADC Testing,\" Proc. IEEE ITC, 1989"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:257
+msgid ""
+"J. Doernberg et al., \"Full-Speed Testing of A/D Converters,\" IEEE JSSC,"
+" 1984"
+msgstr ""
+
+#: ../../source/algorithms/fit_static_nonlin.md:258
+msgid ""
+"IEEE Std 1241-2010, \"IEEE Standard for Terminology and Test Methods for "
+"ADCs\""
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/index.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/index.po
new file mode 100644
index 0000000..d07876d
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/algorithms/index.po
@@ -0,0 +1,48 @@
+# ADCToolbox 中文翻译
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: 2026-03-10 20:52+0800\n"
+"Last-Translator: ADCToolbox Contributors\n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/algorithms/index.rst:2
+msgid "Algorithm Documentation"
+msgstr "算法文档"
+
+#: ../../source/algorithms/index.rst:4
+msgid ""
+"This section provides detailed documentation of the algorithms and theory"
+" behind ADCToolbox."
+msgstr "本节详细介绍 ADCToolbox 中算法的工作原理与理论依据。"
+
+#: ../../source/algorithms/index.rst:12
+msgid "Fundamental Algorithms"
+msgstr "基础算法"
+
+#: ../../source/algorithms/index.rst:20
+msgid "Spectrum Analysis Algorithms"
+msgstr "频谱分析算法"
+
+#: ../../source/algorithms/index.rst:30
+msgid "Analog Error Analysis Algorithms"
+msgstr "模拟误差分析算法"
+
+#: ../../source/algorithms/index.rst:47
+msgid "Digital Calibration Algorithms"
+msgstr "数字校准算法"
+
+#: ../../source/algorithms/index.rst:55
+msgid "Oversampling Algorithms"
+msgstr "过采样算法"
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/api/aout.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/aout.po
new file mode 100644
index 0000000..58d2129
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/aout.po
@@ -0,0 +1,1155 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/api/aout.rst:2
+msgid "Analog Output Analysis (aout)"
+msgstr ""
+
+#: ../../source/api/aout.rst:4
+msgid ""
+"The ``aout`` module provides comprehensive tools for analyzing analog ADC"
+" outputs."
+msgstr ""
+
+#: ../../source/api/aout.rst:9
+msgid "Error Analysis by Value"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_value.analyze_error_by_value:1 of
+msgid "Analyze error binned by value (INL/DNL/Noise)."
+msgstr ""
+
+#: adctoolbox.aout.analyze_decomposition_polar.analyze_decomposition_polar:3
+#: adctoolbox.aout.analyze_decomposition_time.analyze_decomposition_time:3
+#: adctoolbox.aout.analyze_error_by_value.analyze_error_by_value:3 of
+msgid "Combines core computation and optional plotting."
+msgstr ""
+
+#: ../../source/api/aout.rst
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error of
+msgid "Parameters"
+msgstr ""
+
+#: adctoolbox.aout.analyze_decomposition_polar.analyze_decomposition_polar:5
+#: adctoolbox.aout.analyze_decomposition_time.analyze_decomposition_time:5
+#: adctoolbox.aout.analyze_error_by_phase.analyze_error_by_phase:8
+#: adctoolbox.aout.analyze_error_by_value.analyze_error_by_value:5 of
+msgid "Input signal (1D array)."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_value.analyze_error_by_value:7 of
+msgid "Normalized frequency (f/fs). If None, auto-detected."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_value.analyze_error_by_value:9 of
+msgid "Number of bins for analysis (x-axis resolution)."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_value.analyze_error_by_value:11 of
+msgid "Ratio of values to clip from edges."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_value.analyze_error_by_value:13 of
+msgid "Physical range mapping to bin 0 and bin (N-1)."
+msgstr ""
+
+#: adctoolbox.aout.analyze_decomposition_polar.analyze_decomposition_polar:9
+#: adctoolbox.aout.analyze_decomposition_time.analyze_decomposition_time:11
+#: adctoolbox.aout.analyze_error_by_phase.analyze_error_by_phase:16
+#: adctoolbox.aout.analyze_error_by_value.analyze_error_by_value:15 of
+msgid "Whether to display result plot."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_value.analyze_error_by_value:17 of
+msgid "Tuple of (ax1, ax2) to plot on."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_value.analyze_error_by_value:19 of
+msgid "Single axis to plot on (will be split)."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_phase.analyze_error_by_phase:22
+#: adctoolbox.aout.analyze_error_by_value.analyze_error_by_value:21
+#: adctoolbox.aout.plot_rearranged_error_by_phase.plot_rearranged_error_by_phase:9
+#: adctoolbox.aout.plot_rearranged_error_by_value.plot_rearranged_error_by_value:13
+#: of
+msgid "Test setup description for title."
+msgstr ""
+
+#: ../../source/api/aout.rst
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error of
+msgid "Returns"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_value.analyze_error_by_value:24 of
+msgid ""
+"**results** -- Dictionary containing 'error_mean', 'error_rms', "
+"'bin_centers', etc."
+msgstr ""
+
+#: ../../source/api/aout.rst
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error of
+msgid "Return type"
+msgstr ""
+
+#: adctoolbox.aout.rearrange_error_by_value.rearrange_error_by_value:1 of
+msgid ""
+"Compute value-binned error metrics. Maps input signal linearly to [0, "
+"n_bins-1]."
+msgstr ""
+
+#: adctoolbox.aout.plot_rearranged_error_by_value.plot_rearranged_error_by_value:1
+#: of
+msgid "Plot Mean Error (INL) and RMS Error (Noise) vs Bin Index."
+msgstr ""
+
+#: adctoolbox.aout.plot_rearranged_error_by_value.plot_rearranged_error_by_value:3
+#: of
+msgid ""
+"Creates a comprehensive visualization showing: - Top panel: Scatter of "
+"raw error vs bin index with mean error overlay - Bottom panel: RMS error "
+"vs bin index as bar chart"
+msgstr ""
+
+#: adctoolbox.aout.plot_rearranged_error_by_value.plot_rearranged_error_by_value:7
+#: of
+msgid "Dictionary from rearrange_error_by_value()."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_phase.analyze_error_by_phase:18
+#: adctoolbox.aout.plot_decomposition_time.plot_decomposition_time:16
+#: adctoolbox.aout.plot_rearranged_error_by_phase.plot_rearranged_error_by_phase:5
+#: adctoolbox.aout.plot_rearranged_error_by_value.plot_rearranged_error_by_value:9
+#: of
+msgid "Tuple of (ax1, ax2) for top and bottom panels."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_phase.analyze_error_by_phase:20
+#: adctoolbox.aout.plot_rearranged_error_by_phase.plot_rearranged_error_by_phase:7
+#: adctoolbox.aout.plot_rearranged_error_by_value.plot_rearranged_error_by_value:11
+#: of
+msgid "Single axis to split into 2 panels."
+msgstr ""
+
+#: ../../source/api/aout.rst:16
+msgid "Error Analysis by Phase"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_phase.analyze_error_by_phase:1 of
+msgid "Analyze phase error using AM/PM decomposition."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_phase.analyze_error_by_phase:3 of
+msgid ""
+"Uses dual-track parallel design: - Path A (Raw): Fit all N samples → "
+"highest precision AM/PM values + r_squared_raw - Path B (Binned): Compute"
+" binned statistics → visualization - Cross-validation: Path A coeffs "
+"predict Path B trend → r_squared_binned"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_phase.analyze_error_by_phase:10 of
+msgid ""
+"Normalized frequency (f/fs), range (0, 0.5). If None, auto-detected via "
+"FFT."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_phase.analyze_error_by_phase:12
+#: adctoolbox.aout.rearrange_error_by_phase.rearrange_error_by_phase:7 of
+msgid "Number of phase bins for visualization."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_phase.analyze_error_by_phase:14 of
+msgid "Include base noise term in fitting model."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_by_phase.analyze_error_by_phase:25 of
+msgid ""
+"Numerics: am_noise_rms_v, pm_noise_rms_v, pm_noise_rms_rad, "
+"base_noise_rms_v, total_rms_v Validation: r_squared_raw (energy ratio), "
+"r_squared_binned (model confidence) Visualization: bin_error_rms_v, "
+"bin_error_mean_v, phase_bin_centers_rad Metadata: amplitude, dc_offset, "
+"norm_freq, fitted_signal, error, phase"
+msgstr ""
+
+#: adctoolbox.aout.rearrange_error_by_phase.rearrange_error_by_phase:1 of
+msgid "Rearrange error by phase using dual-track AM/PM separation."
+msgstr ""
+
+#: adctoolbox.aout.rearrange_error_by_phase.rearrange_error_by_phase:3 of
+msgid "Input signal, 1D numpy array."
+msgstr ""
+
+#: adctoolbox.aout.rearrange_error_by_phase.rearrange_error_by_phase:5 of
+msgid "Normalized frequency (f/fs), range 0-0.5. If None, auto-detected via FFT."
+msgstr ""
+
+#: adctoolbox.aout.rearrange_error_by_phase.rearrange_error_by_phase:9 of
+msgid "Include base noise floor in fitting model."
+msgstr ""
+
+#: adctoolbox.aout.rearrange_error_by_phase.rearrange_error_by_phase:12 of
+msgid ""
+"Numerics (from raw fitting): am_noise_rms_v, pm_noise_rms_v, "
+"pm_noise_rms_rad, noise_floor_rms_v, total_rms_v Validation (dual "
+"R²): r_squared_raw: AM/PM energy ratio in total noise (typically low,"
+" ~0.05) r_squared_binned: Model fit quality on binned trend "
+"(typically high, ~0.95) Visualization (binned): bin_error_rms_v, "
+"bin_error_mean_v, phase_bin_centers_rad, bin_counts Metadata: "
+"amplitude, dc_offset, norm_freq, fitted_signal, error, phase"
+msgstr ""
+
+#: adctoolbox.aout.rearrange_error_by_phase.rearrange_error_by_phase:14 of
+msgid "Numerics (from raw fitting):"
+msgstr ""
+
+#: adctoolbox.aout.rearrange_error_by_phase.rearrange_error_by_phase:15 of
+msgid ""
+"am_noise_rms_v, pm_noise_rms_v, pm_noise_rms_rad, noise_floor_rms_v, "
+"total_rms_v"
+msgstr ""
+
+#: adctoolbox.aout.rearrange_error_by_phase.rearrange_error_by_phase:17 of
+msgid "Validation (dual R²):"
+msgstr ""
+
+#: adctoolbox.aout.rearrange_error_by_phase.rearrange_error_by_phase:18 of
+msgid ""
+"r_squared_raw: AM/PM energy ratio in total noise (typically low, ~0.05) "
+"r_squared_binned: Model fit quality on binned trend (typically high, "
+"~0.95)"
+msgstr ""
+
+#: adctoolbox.aout.rearrange_error_by_phase.rearrange_error_by_phase:20 of
+msgid "Visualization (binned):"
+msgstr ""
+
+#: adctoolbox.aout.rearrange_error_by_phase.rearrange_error_by_phase:21 of
+msgid "bin_error_rms_v, bin_error_mean_v, phase_bin_centers_rad, bin_counts"
+msgstr ""
+
+#: adctoolbox.aout.rearrange_error_by_phase.rearrange_error_by_phase:22 of
+msgid "Metadata:"
+msgstr ""
+
+#: adctoolbox.aout.rearrange_error_by_phase.rearrange_error_by_phase:23 of
+msgid "amplitude, dc_offset, norm_freq, fitted_signal, error, phase"
+msgstr ""
+
+#: adctoolbox.aout.plot_rearranged_error_by_phase.plot_rearranged_error_by_phase:1
+#: of
+msgid "Plot phase error analysis results."
+msgstr ""
+
+#: adctoolbox.aout.plot_rearranged_error_by_phase.plot_rearranged_error_by_phase:3
+#: of
+msgid "Dictionary from rearrange_error_by_phase()."
+msgstr ""
+
+#: ../../source/api/aout.rst:23
+msgid "Statistical Error Analysis"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_pdf.analyze_error_pdf:1 of
+msgid "Compute and optionally plot error probability density function using KDE."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_pdf.analyze_error_pdf:3 of
+msgid ""
+"This function automatically fits an ideal sine to the signal, computes "
+"the error, and analyzes its probability distribution."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:6
+#: adctoolbox.aout.analyze_error_envelope_spectrum.analyze_error_envelope_spectrum:7
+#: adctoolbox.aout.analyze_error_pdf.analyze_error_pdf:6
+#: adctoolbox.aout.analyze_error_spectrum.analyze_error_spectrum:6 of
+msgid "ADC output signal (1D array)"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_pdf.analyze_error_pdf:8 of
+msgid "ADC resolution in bits"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_pdf.analyze_error_pdf:10 of
+msgid "Full-scale range. If None, inferred from signal range (max - min)"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:8
+#: adctoolbox.aout.analyze_error_envelope_spectrum.analyze_error_envelope_spectrum:11
+#: adctoolbox.aout.analyze_error_pdf.analyze_error_pdf:12
+#: adctoolbox.aout.analyze_error_spectrum.analyze_error_spectrum:10 of
+msgid "Normalized frequency (0-0.5). If None, auto-detected"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_pdf.analyze_error_pdf:14 of
+msgid "If True, plot the PDF on current axes"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:16
+#: adctoolbox.aout.analyze_error_envelope_spectrum.analyze_error_envelope_spectrum:15
+#: adctoolbox.aout.analyze_error_pdf.analyze_error_pdf:16
+#: adctoolbox.aout.analyze_error_spectrum.analyze_error_spectrum:14 of
+msgid "Axes to plot on. If None, uses current axes (plt.gca())"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_envelope_spectrum.analyze_error_envelope_spectrum:17
+#: adctoolbox.aout.analyze_error_pdf.analyze_error_pdf:18
+#: adctoolbox.aout.analyze_error_spectrum.analyze_error_spectrum:16 of
+msgid "Title for the plot. If None, no title is set"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_pdf.analyze_error_pdf:21 of
+msgid ""
+"**result** -- Dictionary containing PDF analysis results: - 'err_lsb': "
+"Error in LSB units (1D array) - 'mu': Mean of error distribution (LSB) - "
+"'sigma': Standard deviation of error distribution (LSB) - "
+"'kl_divergence': KL divergence from Gaussian distribution - 'x': Sample "
+"points for PDF - 'pdf': KDE-estimated PDF values - 'gauss_pdf': Fitted "
+"Gaussian PDF values"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:28
+#: adctoolbox.aout.analyze_error_envelope_spectrum.analyze_error_envelope_spectrum:33
+#: adctoolbox.aout.analyze_error_pdf.analyze_error_pdf:32
+#: adctoolbox.aout.analyze_error_spectrum.analyze_error_spectrum:31
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:38
+#: adctoolbox.aout.plot_decomposition_polar.plot_decomposition_polar:24
+#: adctoolbox.aout.plot_decomposition_time.plot_decomposition_time:25 of
+msgid "Notes"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:29
+#: adctoolbox.aout.analyze_error_envelope_spectrum.analyze_error_envelope_spectrum:34
+#: adctoolbox.aout.analyze_error_pdf.analyze_error_pdf:33
+#: adctoolbox.aout.analyze_error_spectrum.analyze_error_spectrum:32 of
+msgid "Error = signal - ideal_sine (fitted using fit_sine_4param)"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_pdf.analyze_error_pdf:34 of
+msgid "Uses Kernel Density Estimation (KDE) with Silverman's bandwidth rule"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_pdf.analyze_error_pdf:35 of
+msgid "KL divergence measures how different the actual error PDF is from Gaussian"
+msgstr ""
+
+#: ../../source/api/aout.rst:28
+msgid "Spectrum-Based Error Analysis"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_spectrum.analyze_error_spectrum:1 of
+msgid "Compute error spectrum directly from the error signal."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_spectrum.analyze_error_spectrum:3 of
+msgid ""
+"This function fits an ideal sine to the signal, computes the error, and "
+"analyzes the spectrum of the error signal (not envelope)."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_envelope_spectrum.analyze_error_envelope_spectrum:9
+#: adctoolbox.aout.analyze_error_spectrum.analyze_error_spectrum:8 of
+msgid "Sampling frequency in Hz"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_spectrum.analyze_error_spectrum:12 of
+msgid "If True, plot the error spectrum on current axes"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_spectrum.analyze_error_spectrum:19 of
+msgid ""
+"**result** -- Dictionary containing spectrum analysis results: - 'enob': "
+"Effective Number of Bits - 'sndr_db': Signal-to-Noise and Distortion "
+"Ratio (dB) - 'sfdr_db': Spurious-Free Dynamic Range (dB) - 'snr_db': "
+"Signal-to-Noise Ratio (dB) - 'thd_db': Total Harmonic Distortion (dB) - "
+"'sig_pwr_dbfs': Signal power (dBFS) - 'noise_floor_dbfs': Noise floor "
+"(dBFS) - 'error_signal': Error signal (signal - fitted sine)"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_spectrum.analyze_error_spectrum:33 of
+msgid "Analyzes spectrum of error directly (no envelope extraction)"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_spectrum.analyze_error_spectrum:34 of
+msgid "Reveals frequency components in the error signal"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_envelope_spectrum.analyze_error_envelope_spectrum:1
+#: of
+msgid "Compute envelope spectrum using Hilbert transform."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_envelope_spectrum.analyze_error_envelope_spectrum:3
+#: of
+msgid ""
+"This function fits an ideal sine to the signal, computes the error, "
+"extracts the error envelope using Hilbert transform, and analyzes its "
+"spectrum to reveal amplitude modulation patterns."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_envelope_spectrum.analyze_error_envelope_spectrum:13
+#: of
+msgid "If True, plot the envelope spectrum on current axes"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_envelope_spectrum.analyze_error_envelope_spectrum:20
+#: of
+msgid ""
+"**result** -- Dictionary with keys: - 'enob': Effective Number of Bits - "
+"'sndr_db': Signal-to-Noise and Distortion Ratio (dB) - 'sfdr_db': "
+"Spurious-Free Dynamic Range (dB) - 'snr_db': Signal-to-Noise Ratio (dB) -"
+" 'thd_db': Total Harmonic Distortion (dB) - 'sig_pwr_dbfs': Signal power "
+"(dBFS) - 'noise_floor_dbfs': Noise floor (dBFS) - 'error_signal': Error "
+"signal (signal - fitted sine) - 'envelope': Error envelope extracted via "
+"Hilbert transform"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_envelope_spectrum.analyze_error_envelope_spectrum:35
+#: of
+msgid "Envelope = |Hilbert(error)|"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_envelope_spectrum.analyze_error_envelope_spectrum:36
+#: of
+msgid "Analyzes spectrum of envelope to reveal AM patterns"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:1 of
+msgid ""
+"Compute and optionally plot autocorrelation function (ACF) of error "
+"signal."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:3 of
+msgid ""
+"This function fits an ideal sine to the signal, computes the error, and "
+"analyzes its autocorrelation to detect temporal correlation patterns."
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:10 of
+msgid "Maximum lag in samples"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:12 of
+msgid "Normalize ACF so ACF[0] = 1"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:14 of
+msgid "If True, plot the autocorrelation"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:18 of
+msgid "Title for the plot. If None, uses default title"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:21 of
+msgid ""
+"**result** -- Dictionary containing: - 'acf': Autocorrelation values - "
+"'lags': Lag indices (-max_lag to +max_lag) - 'error_signal': Error signal"
+" (signal - fitted sine)"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:30 of
+msgid "ACF reveals temporal correlation in the error signal"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:31 of
+msgid "White noise shows ACF ≈ 0 for all lags except 0"
+msgstr ""
+
+#: adctoolbox.aout.analyze_error_autocorr.analyze_error_autocorr:32 of
+msgid "Correlated errors show non-zero ACF at specific lags"
+msgstr ""
+
+#: ../../source/api/aout.rst:35
+msgid "Harmonic Decomposition"
+msgstr ""
+
+#: adctoolbox.aout.analyze_decomposition_time.analyze_decomposition_time:1 of
+msgid "Analyze harmonic decomposition with time-domain visualization."
+msgstr ""
+
+#: adctoolbox.aout.analyze_decomposition_polar.analyze_decomposition_polar:7
+#: adctoolbox.aout.analyze_decomposition_time.analyze_decomposition_time:7 of
+msgid "Number of harmonics to extract."
+msgstr ""
+
+#: adctoolbox.aout.analyze_decomposition_time.analyze_decomposition_time:9 of
+msgid "Number of cycles to display in the time-domain plot."
+msgstr ""
+
+#: adctoolbox.aout.analyze_decomposition_time.analyze_decomposition_time:13 of
+msgid "Axis to plot on (will be split for multi-panel)."
+msgstr ""
+
+#: adctoolbox.aout.analyze_decomposition_polar.analyze_decomposition_polar:13
+#: adctoolbox.aout.analyze_decomposition_time.analyze_decomposition_time:15
+#: adctoolbox.aout.plot_decomposition_polar.plot_decomposition_polar:17 of
+msgid "Custom title for the plot."
+msgstr ""
+
+#: adctoolbox.aout.analyze_decomposition_polar.analyze_decomposition_polar:16
+#: adctoolbox.aout.analyze_decomposition_time.analyze_decomposition_time:18 of
+msgid ""
+"**results** -- Dictionary containing decomposition results from "
+"decompose_harmonic_error()."
+msgstr ""
+
+#: adctoolbox.aout.analyze_decomposition_polar.analyze_decomposition_polar:1 of
+msgid "Analyze harmonic decomposition with polar visualization."
+msgstr ""
+
+#: adctoolbox.aout.analyze_decomposition_polar.analyze_decomposition_polar:11
+#: of
+msgid "Polar axis to plot on."
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:1 of
+msgid ""
+"Decompose ADC error into harmonic distortion and other errors using "
+"least-squares fitting."
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:3 of
+msgid ""
+"This is a pure calculation function that extracts harmonic components "
+"from ADC signal using least-squares fitting. Works directly in the "
+"signal's original units without normalization."
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:7 of
+msgid ""
+"Input ADC signal, shape (N,) for single run or (M, N) for M runs For "
+"multi-run data, runs are averaged before decomposition"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:10 of
+msgid "Number of harmonics to extract (default: 5)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:13 of
+msgid ""
+"Dictionary containing decomposition results: - 'magnitudes': np.ndarray,"
+" shape (n_harmonics,) Magnitude of each harmonic (1 to n_harmonics) -"
+" 'phases': np.ndarray, shape (n_harmonics,) Phase of each harmonic in"
+" radians (relative to fundamental) - 'magnitudes_db': np.ndarray, shape "
+"(n_harmonics,) Magnitude in dB relative to full scale - "
+"'residual_rms': float RMS power of residual noise - 'noise_db': float"
+" Noise floor in dB relative to full scale - 'fundamental_freq': float"
+" Detected fundamental frequency (normalized, 0 to 1) - "
+"'noise_residual': np.ndarray, shape (N,) Residual signal after "
+"removing all harmonics (centered at 0, no DC) - 'reconstructed_signal': "
+"np.ndarray, shape (N,) Reconstructed signal with all harmonics "
+"(includes DC offset) - 'fundamental_signal': np.ndarray, shape (N,) "
+"Reconstructed fundamental component only (includes DC offset) - "
+"'harmonic_signal': np.ndarray, shape (N,) Reconstructed harmonic "
+"components 2nd to nth (centered at 0, no DC)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:13 of
+msgid "Dictionary containing decomposition results:"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:15 of
+msgid "'magnitudes': np.ndarray, shape (n_harmonics,)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:16 of
+msgid "Magnitude of each harmonic (1 to n_harmonics)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:17 of
+msgid "'phases': np.ndarray, shape (n_harmonics,)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:18 of
+msgid "Phase of each harmonic in radians (relative to fundamental)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:19 of
+msgid "'magnitudes_db': np.ndarray, shape (n_harmonics,)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:20 of
+msgid "Magnitude in dB relative to full scale"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:21 of
+msgid "'residual_rms': float"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:22 of
+msgid "RMS power of residual noise"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:23 of
+msgid "'noise_db': float"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:24 of
+msgid "Noise floor in dB relative to full scale"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:25 of
+msgid "'fundamental_freq': float"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:26 of
+msgid "Detected fundamental frequency (normalized, 0 to 1)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:27 of
+msgid "'noise_residual': np.ndarray, shape (N,)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:28 of
+msgid "Residual signal after removing all harmonics (centered at 0, no DC)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:29 of
+msgid "'reconstructed_signal': np.ndarray, shape (N,)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:30 of
+msgid "Reconstructed signal with all harmonics (includes DC offset)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:31 of
+msgid "'fundamental_signal': np.ndarray, shape (N,)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:32 of
+msgid "Reconstructed fundamental component only (includes DC offset)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:33 of
+msgid "'harmonic_signal': np.ndarray, shape (N,)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:34 of
+msgid "Reconstructed harmonic components 2nd to nth (centered at 0, no DC)"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:39 of
+msgid ""
+"Algorithm: 1. Average multiple runs if provided 2. Normalize signal to "
+"full scale 3. Find fundamental frequency using 4-parameter sine fit 4. "
+"Build sine/cosine basis for harmonics: cos(k*ω*t), sin(k*ω*t) 5. Solve "
+"least squares: W = (A^T A)^(-1) A^T * signal 6. Extract magnitude and "
+"phase for each harmonic (vectorized) 7. Rotate phases relative to "
+"fundamental (vectorized) 8. Calculate residual and noise floor"
+msgstr ""
+
+#: adctoolbox.aout.decompose_harmonic_error.decompose_harmonic_error:49 of
+msgid ""
+"Phase Convention: - Phases are relative to fundamental - Each harmonic "
+"phase = phase_of_harmonic - (phase_of_fundamental * harmonic_order) - "
+"Wrapped to [-π, π]"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_time.plot_decomposition_time:1 of
+msgid "Create a time-domain plot of harmonic decomposition results."
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_time.plot_decomposition_time:3 of
+msgid ""
+"This is a pure visualization function that displays the signal and its "
+"decomposed components (fundamental, harmonics, and other errors)."
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_time.plot_decomposition_time:6 of
+msgid ""
+"Dictionary from decompose_harmonic_error() containing: - "
+"'fundamental_signal': Reconstructed fundamental component - "
+"'harmonic_signal': Harmonic distortion components (2nd through nth) - "
+"'noise_residual': Other errors not captured by harmonics - "
+"'fundamental_freq': Normalized fundamental frequency"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_time.plot_decomposition_time:12 of
+msgid "Original signal data"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_time.plot_decomposition_time:14 of
+msgid "Number of cycles to display in the time-domain plot"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_time.plot_decomposition_time:18 of
+msgid "Single axis to split into 2 panels. If None, uses plt.gca() and splits it."
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_time.plot_decomposition_time:21 of
+msgid "Custom title for the plot"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_time.plot_decomposition_time:26 of
+msgid ""
+"Two-panel layout: top panel shows signal and fitted sinewave, bottom "
+"panel shows decomposed errors"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_time.plot_decomposition_time:27 of
+msgid "Top panel: signal (black 'x' markers) and fundamental sinewave (gray line)"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_time.plot_decomposition_time:28 of
+msgid "Bottom panel: harmonic distortions (red line) and other errors (blue line)"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_time.plot_decomposition_time:29 of
+msgid ""
+"Display range automatically limits to first few periods, centered on "
+"largest error"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_time.plot_decomposition_time:30 of
+msgid "10% margin applied to y-axis limits for better visualization"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_polar.plot_decomposition_polar:1 of
+msgid "Create a polar plot of harmonic decomposition results."
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_polar.plot_decomposition_polar:3 of
+msgid ""
+"This is a pure visualization function that displays harmonics on a polar "
+"plot with a noise circle reference."
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_polar.plot_decomposition_polar:6 of
+msgid ""
+"Dictionary from decompose_harmonic_error() containing: - 'magnitudes': "
+"Magnitude of each harmonic - 'phases': Phase of each harmonic in radians "
+"(relative to fundamental) - 'magnitudes_db': Magnitude in dB relative to "
+"full scale - 'noise_db': Noise floor in dB (for noise circle)"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_polar.plot_decomposition_polar:12 of
+msgid "Number of harmonics to display."
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_polar.plot_decomposition_polar:14 of
+msgid ""
+"Pre-configured Matplotlib Axes object with polar projection. If None, a "
+"new figure and axes will be created."
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_polar.plot_decomposition_polar:20 of
+msgid "The configured polar axes object containing the plot"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_polar.plot_decomposition_polar:25 of
+msgid "Fundamental shown as filled blue circle at phase 0"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_polar.plot_decomposition_polar:26 of
+msgid "Harmonics shown as hollow blue squares"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_polar.plot_decomposition_polar:27 of
+msgid "Noise circle (dashed line) shows residual error level"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_polar.plot_decomposition_polar:28 of
+msgid "Harmonics outside noise circle indicate significant distortion"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_polar.plot_decomposition_polar:29 of
+msgid "Radius in dB with automatic scaling"
+msgstr ""
+
+#: adctoolbox.aout.plot_decomposition_polar.plot_decomposition_polar:30 of
+msgid "Polar axes: theta zero at top, clockwise direction"
+msgstr ""
+
+#: ../../source/api/aout.rst:44
+msgid "INL/DNL Analysis"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:1 of
+msgid "INL/DNL analysis from sine wave excitation with optional plotting."
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:3 of
+msgid ""
+"This function computes INL and DNL from analog or digital signal data, "
+"and optionally plots the results."
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:7 of
+msgid "Parameters:"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:8 of
+msgid "data"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:-1 of
+msgid "array_like"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:9 of
+msgid ""
+"Input signal - either analog voltage or digital codes. - Analog: Float "
+"values in range (normalized 0-1, or full-scale voltage) - Digital: "
+"Integer codes or float representation of codes"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:12 of
+msgid "num_bits"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:-1 of
+msgid "int, optional"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:13 of
+msgid "ADC number of bits. If None, infers from data range."
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:14 of
+msgid "full_scale"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:-1 of
+msgid "float, optional"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:15 of
+msgid ""
+"Full scale voltage for quantization. If provided with analog input, codes"
+" = round(data * 2^num_bits / full_scale). If None, assumes normalized "
+"input (0-1 range)."
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:18 of
+msgid "clip_percent"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:-1 of
+msgid "float, default=0.01"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:19 of
+#, python-format
+msgid "Percentage of codes to clip from edges (0.01 = 1% from each end)"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:20 of
+msgid "create_plot"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:-1 of
+msgid "bool, default=True"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:21 of
+msgid "Plot the INL/DNL curves (True) or just compute (False)"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:22 of
+msgid "show_title"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:23 of
+msgid "Show auto-generated title with min/max ranges"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:24 of
+msgid "col_title"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:-1 of
+msgid "str, optional"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:25
+#: adctoolbox.aout.plot_dnl_inl.plot_dnl_inl:13 of
+msgid "Column title to display above DNL plot (e.g., \"N = 2^10\")"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:26 of
+msgid "ax"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:-1 of
+msgid "matplotlib.axes.Axes, optional"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:27 of
+msgid ""
+"Single axis to split into 2 rows. If None and create_plot=True, uses "
+"current axis (plt.gca())."
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:31 of
+msgid "Returns:"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:32 of
+msgid "dict"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:-1 of
+msgid "Dictionary containing:"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:33 of
+msgid "'inl': INL values in LSB"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:34 of
+msgid "'dnl': DNL values in LSB"
+msgstr ""
+
+#: adctoolbox.aout.analyze_inl_from_sine.analyze_inl_from_sine:35 of
+msgid "'code': Code values (x-axis)"
+msgstr ""
+
+#: adctoolbox.aout.compute_inl_from_sine.compute_inl_from_sine:1 of
+msgid "Calculate ADC INL/DNL."
+msgstr ""
+
+#: adctoolbox.aout.compute_inl_from_sine.compute_inl_from_sine:3 of
+msgid ""
+"Auto-detection logic: 1. If input is Integer type -> Treated as ADC "
+"Codes. 2. If input is Float type:"
+msgstr ""
+
+#: adctoolbox.aout.compute_inl_from_sine.compute_inl_from_sine:6 of
+msgid ""
+"Range > 2.0 -> Treated as ADC Codes (floating point representation of "
+"codes)."
+msgstr ""
+
+#: adctoolbox.aout.compute_inl_from_sine.compute_inl_from_sine:7 of
+msgid ""
+"Range <= 2.0 -> Treated as Normalized Voltage (auto-quantized to "
+"num_bits)."
+msgstr ""
+
+#: adctoolbox.aout.compute_inl_from_sine.compute_inl_from_sine:9 of
+msgid "Input signal (Codes or Voltage)."
+msgstr ""
+
+#: adctoolbox.aout.compute_inl_from_sine.compute_inl_from_sine:11 of
+msgid ""
+"- If Input is Voltage: Target quantization resolution (default 10 if "
+"None). - If Input is Codes: ADC resolution (inferred from data range if "
+"None)."
+msgstr ""
+
+#: adctoolbox.aout.compute_inl_from_sine.compute_inl_from_sine:12 of
+msgid "If Input is Voltage: Target quantization resolution (default 10 if None)."
+msgstr ""
+
+#: adctoolbox.aout.compute_inl_from_sine.compute_inl_from_sine:13 of
+msgid "If Input is Codes: ADC resolution (inferred from data range if None)."
+msgstr ""
+
+#: adctoolbox.aout.compute_inl_from_sine.compute_inl_from_sine:15 of
+msgid ""
+"Full scale voltage range for quantization. If provided with float input, "
+"used for quantization: codes = round(data * 2^num_bits / full_scale). If "
+"None, assumes normalized input (0-1 or -1 to 1)."
+msgstr ""
+
+#: adctoolbox.aout.compute_inl_from_sine.compute_inl_from_sine:19 of
+msgid "Percentage of codes to clip from edges."
+msgstr ""
+
+#: adctoolbox.aout.plot_dnl_inl.plot_dnl_inl:1 of
+msgid "Plot DNL and INL curves in a 2-row subplot layout."
+msgstr ""
+
+#: adctoolbox.aout.plot_dnl_inl.plot_dnl_inl:3 of
+msgid "Code values (x-axis)"
+msgstr ""
+
+#: adctoolbox.aout.plot_dnl_inl.plot_dnl_inl:5 of
+msgid "DNL values in LSB (y-axis)"
+msgstr ""
+
+#: adctoolbox.aout.plot_dnl_inl.plot_dnl_inl:7 of
+msgid "INL values in LSB (y-axis)"
+msgstr ""
+
+#: adctoolbox.aout.plot_dnl_inl.plot_dnl_inl:9 of
+msgid "Number of bits for x-axis limits. If None, uses code range."
+msgstr ""
+
+#: adctoolbox.aout.plot_dnl_inl.plot_dnl_inl:11 of
+msgid "Show subplot titles with DNL/INL min/max ranges"
+msgstr ""
+
+#: adctoolbox.aout.plot_dnl_inl.plot_dnl_inl:15 of
+msgid "Pre-made axes tuple (dnl_ax, inl_ax). If provided, uses these directly."
+msgstr ""
+
+#: adctoolbox.aout.plot_dnl_inl.plot_dnl_inl:17 of
+msgid ""
+"Single axis to split into 2 rows (auto-nested GridSpec). If None and "
+"axes=None, uses current axis."
+msgstr ""
+
+#: adctoolbox.aout.plot_dnl_inl.plot_dnl_inl:19 of
+msgid "Color for DNL plot"
+msgstr ""
+
+#: adctoolbox.aout.plot_dnl_inl.plot_dnl_inl:21 of
+msgid "Color for INL plot"
+msgstr ""
+
+#: adctoolbox.aout.plot_dnl_inl.plot_dnl_inl:24 of
+msgid "**axes** -- The axes objects [dnl_ax, inl_ax]"
+msgstr ""
+
+#: ../../source/api/aout.rst:51
+msgid "Static Nonlinearity Fitting"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:1 of
+msgid "Extract static nonlinearity coefficients from distorted sinewave."
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:3 of
+msgid ""
+"This function extracts 2nd-order (k2) and 3rd-order (k3) static "
+"nonlinearity coefficients from a distorted single-tone signal. It CANNOT "
+"extract gain error since the sine fitting absorbs amplitude into the "
+"reference."
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:7 of
+msgid "Distorted sinewave signal samples, array_like"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:8 of
+msgid ""
+"Polynomial order for fitting (positive integer, typically 2-3) order=2: "
+"Quadratic nonlinearity only (k2) order=3: Quadratic + cubic nonlinearity "
+"(k2, k3)"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:12 of
+msgid ""
+"Quadratic nonlinearity coefficient (scalar) For ideal ADC: "
+"k2 = 0 Represents 2nd-order distortion "
+"Returns NaN if order < 2 k3_extracted: Cubic nonlinearity coefficient "
+"(scalar) For ideal ADC: k3 = 0 Represents "
+"3rd-order distortion Returns NaN if order < 3 fitted_sine: "
+"Fitted ideal sinewave input (reference signal) Vector (N×1),"
+" same length as sig_distorted, in time order This is the "
+"ideal sine wave extracted from the distorted signal fitted_transfer: "
+"Fitted transfer curve for plotting, tuple (x, y) x: 1000"
+" smooth input points from min to max (sorted) y: "
+"polynomial-evaluated output at those points For ideal "
+"system: y=x (straight line)"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:14 of
+msgid "Quadratic nonlinearity coefficient (scalar)"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:15 of
+msgid ""
+"For ideal ADC: k2 = 0 Represents 2nd-order distortion Returns NaN if "
+"order < 2"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:18 of
+msgid "k3_extracted: Cubic nonlinearity coefficient (scalar)"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:19 of
+msgid ""
+"For ideal ADC: k3 = 0 Represents 3rd-order distortion Returns NaN if "
+"order < 3"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:22 of
+msgid "fitted_sine: Fitted ideal sinewave input (reference signal)"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:23 of
+msgid ""
+"Vector (N×1), same length as sig_distorted, in time order This is the "
+"ideal sine wave extracted from the distorted signal"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:25 of
+msgid "fitted_transfer: Fitted transfer curve for plotting, tuple (x, y)"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:26 of
+msgid ""
+"x: 1000 smooth input points from min to max (sorted) y: polynomial-"
+"evaluated output at those points For ideal system: y=x (straight line)"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:31 of
+msgid "Transfer Function Model:"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:32 of
+msgid "y = x + k2*x^2 + k3*x^3 where:"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:34 of
+msgid ""
+"x = ideal input (zero-mean sine) y = actual output (zero-mean) k2, k3 = "
+"nonlinearity coefficients"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:38 of
+msgid "Usage Examples:"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:39 of
+msgid ""
+"# Extract coefficients only sig = "
+"0.5*np.sin(2*np.pi*0.123*np.arange(1000)) + distortion k2, k3 = "
+"extract_static_nonlin(sig, 3)[:2]"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:43 of
+msgid ""
+"# Full extraction with plotting k2, k3, fitted_sine, fitted_transfer = "
+"extract_static_nonlin(sig, 3) import matplotlib.pyplot as plt"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:47 of
+#, python-brace-format
+msgid ""
+"# Plot nonlinearity curve transfer_x, transfer_y = fitted_transfer "
+"plt.plot(transfer_x, transfer_y - transfer_x, 'r-', linewidth=2) "
+"plt.xlabel('Input (V)') plt.ylabel('Nonlinearity Error (V)') "
+"plt.title(f'Static Nonlinearity: k2={k2:.4f}, k3={k3:.4f}') "
+"plt.grid(True)"
+msgstr ""
+
+#: adctoolbox.aout.fit_static_nonlin.fit_static_nonlin:57 of
+msgid ""
+"Gain error CANNOT be extracted from a single sinewave measurement because"
+" the sine fitting absorbs amplitude variations. Use multi-tone or DC "
+"sweep methods to extract gain separately."
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/api/dout.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/dout.po
new file mode 100644
index 0000000..c67796f
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/dout.po
@@ -0,0 +1,289 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/api/dout.rst:2
+msgid "Digital Output Analysis (dout)"
+msgstr ""
+
+#: ../../source/api/dout.rst:4
+msgid ""
+"The ``dout`` module provides tools for analyzing digital ADC outputs and "
+"bit-weighted architectures."
+msgstr ""
+
+#: ../../source/api/dout.rst:9
+msgid "Weight Calibration"
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:1 of
+msgid "FGCalSine — Foreground calibration using a sinewave input"
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:3 of
+msgid ""
+"This function estimates per-bit weights and a DC offset for an ADC by "
+"fitting the weighted sum of raw bit columns to a sine series at a given "
+"(or estimated) normalized frequency Fin/Fs. It optionally performs a "
+"coarse and fine frequency search to refine the input tone frequency."
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:8 of
+msgid ""
+"Implementation uses a unified pipeline where single-dataset calibration "
+"is treated as a special case of multi-dataset calibration (N=1)."
+msgstr ""
+
+#: ../../source/api/dout.rst
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep of
+msgid "Parameters"
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:11 of
+msgid ""
+"Binary data as matrix (N rows by M cols, N is data points, M is "
+"bitwidth). Each row is one sample; each column is a bit/segment. Can also"
+" be a list of arrays for multi-dataset calibration."
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:15 of
+msgid ""
+"Normalized frequency Fin/Fs. Default is None (triggers auto frequency "
+"search). - None: Automatic frequency search - float: Single frequency for"
+" all datasets - array-like: Per-dataset frequencies for multi-dataset "
+"mode"
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:20 of
+msgid ""
+"Force fine frequency search even when frequency is provided. Default is "
+"False. Set to True to refine provided frequencies."
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:23 of
+msgid ""
+"Nominal bit weights (only effective when rank is deficient). Default is "
+"2^(M-1) down to 2^0."
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:26 of
+msgid ""
+"Number of harmonic terms to exclude in calibration. Default is 1 "
+"(fundamental only, no harmonic exclusion). Higher values exclude more "
+"harmonics from the error term."
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:30 of
+msgid "Adaptive learning rate for frequency updates (0..1), default is 0.5."
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:32 of
+msgid "Relative error tolerance for convergence, default is 1e-12."
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:34 of
+msgid "Maximum iterations for fine frequency search, default is 100."
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:36 of
+msgid "Print frequency search progress (1) or not (0), default is 0."
+msgstr ""
+
+#: ../../source/api/dout.rst
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep of
+msgid "Returns"
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:39 of
+msgid ""
+"Dictionary with keys: - weight : ndarray The calibrated weights, "
+"normalized by the magnitude of sinewave. - offset : float The "
+"calibrated DC offset, normalized by the magnitude of sinewave. - "
+"calibrated_signal : ndarray or list of ndarrays The signal after "
+"calibration (single array for single dataset, list of arrays for "
+"multi-dataset). - ideal : ndarray or list of ndarrays The best fitted"
+" sinewave (single array for single dataset, list of arrays for multi-"
+"dataset). - error : ndarray or list of ndarrays The residue errors "
+"after calibration, excluding distortion (single array for single "
+"dataset, list of arrays for multi-dataset). - refined_frequency : float "
+"or ndarray The refined frequency from calibration (float for single "
+"dataset, array for multi-dataset)."
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:39 of
+msgid "Dictionary with keys: - weight : ndarray"
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:41 of
+msgid "The calibrated weights, normalized by the magnitude of sinewave."
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:42 of
+msgid "offset"
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:-1 of
+msgid "float"
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:43 of
+msgid "The calibrated DC offset, normalized by the magnitude of sinewave."
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:44 of
+msgid "calibrated_signal"
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:-1 of
+msgid "ndarray or list of ndarrays"
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:45 of
+msgid ""
+"The signal after calibration (single array for single dataset, list of "
+"arrays for multi-dataset)."
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:47 of
+msgid "ideal"
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:48 of
+msgid ""
+"The best fitted sinewave (single array for single dataset, list of arrays"
+" for multi-dataset)."
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:50 of
+msgid "error"
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:51 of
+msgid ""
+"The residue errors after calibration, excluding distortion (single array "
+"for single dataset, list of arrays for multi-dataset)."
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:53 of
+msgid "refined_frequency"
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:-1 of
+msgid "float or ndarray"
+msgstr ""
+
+#: adctoolbox.calibration.calibrate_weight_sine.calibrate_weight_sine:54 of
+msgid ""
+"The refined frequency from calibration (float for single dataset, array "
+"for multi-dataset)."
+msgstr ""
+
+#: ../../source/api/dout.rst
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep of
+msgid "Return type"
+msgstr ""
+
+#: ../../source/api/dout.rst:16
+msgid "Overflow Detection"
+msgstr ""
+
+#: ../../source/api/dout.rst:21
+msgid "Bit Activity"
+msgstr ""
+
+#: ../../source/api/dout.rst:26
+msgid "ENOB Analysis"
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:1 of
+msgid "Sweep ENOB vs number of bits used for calibration."
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:3 of
+msgid ""
+"Incrementally adds bits (MSB to LSB) and measures ENOB after calibration "
+"to understand diminishing returns and optimal bit count."
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:6 of
+msgid "Binary matrix (N samples x M bits, MSB to LSB order)"
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:8 of
+msgid "Normalized frequency (0-0.5). If None, auto-detect from data"
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:10 of
+msgid "Harmonic order for calibrate_weight_sine"
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:12 of
+msgid "Oversampling ratio for spectrum analysis"
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:14 of
+msgid "Window function: 'boxcar', 'hann', 'hamming'"
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:16 of
+msgid "If True, plot ENOB sweep curve"
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:18 of
+msgid "Axes to plot on. If None, uses current axes (plt.gca())"
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:20 of
+msgid "Title for the plot. If None, uses default title"
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:22 of
+msgid "If True, print progress messages"
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:25 of
+msgid ""
+"- enob_sweep: ENOB for each bit count (length M) - n_bits_vec: Bit counts"
+" from 1 to M"
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:27 of
+msgid "enob_sweep: ENOB for each bit count (length M)"
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:28 of
+msgid "n_bits_vec: Bit counts from 1 to M"
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:32 of
+msgid "Notes"
+msgstr ""
+
+#: adctoolbox.dout.analyze_enob_sweep.analyze_enob_sweep:33 of
+msgid ""
+"What to look for in the plot: - Increasing trend: More bits improve "
+"resolution - Plateau: Additional bits don't help (noise/distortion "
+"limited) - Decrease: Extra bits add noise/calibration errors"
+msgstr ""
+
+#: ../../source/api/dout.rst:31
+msgid "Visualization"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/api/fundamentals.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/fundamentals.po
new file mode 100644
index 0000000..0561a39
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/fundamentals.po
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/api/fundamentals.rst:2
+msgid "Fundamental Utilities (fundamentals)"
+msgstr ""
+
+#: ../../source/api/fundamentals.rst:4
+msgid ""
+"The ``fundamentals`` module provides core utility functions and signal "
+"processing tools used across the toolbox."
+msgstr ""
+
+#: ../../source/api/fundamentals.rst:9
+msgid "Sine Fitting"
+msgstr ""
+
+#: adctoolbox.fundamentals.fit_sine_4param.fit_sine_4param:1 of
+msgid "Fit sine wave: y = A*cos(wt) + B*sin(wt) + C."
+msgstr ""
+
+#: ../../source/api/fundamentals.rst
+#: adctoolbox.fundamentals.frequency.estimate_frequency
+#: adctoolbox.fundamentals.frequency.find_coherent_frequency
+#: adctoolbox.fundamentals.frequency.fold_bin_to_nyquist
+#: adctoolbox.fundamentals.frequency.fold_frequency_to_nyquist
+#: adctoolbox.fundamentals.snr_nsd.amplitudes_to_snr
+#: adctoolbox.fundamentals.snr_nsd.nsd_to_snr
+#: adctoolbox.fundamentals.snr_nsd.snr_to_nsd of
+msgid "Parameters"
+msgstr ""
+
+#: adctoolbox.fundamentals.fit_sine_4param.fit_sine_4param:3 of
+msgid "Input signal (1D or 2D array)."
+msgstr ""
+
+#: adctoolbox.fundamentals.fit_sine_4param.fit_sine_4param:4 of
+msgid "Initial normalized frequency (0 to 0.5). If None, estimated via FFT."
+msgstr ""
+
+#: adctoolbox.fundamentals.fit_sine_4param.fit_sine_4param:5 of
+msgid "Iterations for frequency refinement."
+msgstr ""
+
+#: adctoolbox.fundamentals.fit_sine_4param.fit_sine_4param:6 of
+msgid "Convergence threshold for frequency updates."
+msgstr ""
+
+#: ../../source/api/fundamentals.rst
+#: adctoolbox.fundamentals.frequency.estimate_frequency
+#: adctoolbox.fundamentals.frequency.find_coherent_frequency
+#: adctoolbox.fundamentals.frequency.fold_bin_to_nyquist
+#: adctoolbox.fundamentals.frequency.fold_frequency_to_nyquist
+#: adctoolbox.fundamentals.snr_nsd.amplitudes_to_snr
+#: adctoolbox.fundamentals.snr_nsd.nsd_to_snr
+#: adctoolbox.fundamentals.snr_nsd.snr_to_nsd of
+msgid "Returns"
+msgstr ""
+
+#: adctoolbox.fundamentals.fit_sine_4param.fit_sine_4param:8 of
+msgid ""
+"- fitted_signal: Reconstructed sine wave - residuals: Data - "
+"fitted_signal - frequency: Normalized frequency (0 to 0.5) - "
+"amplitude: sqrt(A² + B²) - phase: atan2(-B, A) in radians - "
+"dc_offset: DC component - rmse: Root mean square error For 2D input,"
+" all values (except fitted_signal, residuals) are 1D arrays."
+msgstr ""
+
+#: adctoolbox.fundamentals.fit_sine_4param.fit_sine_4param:8 of
+msgid "fitted_signal: Reconstructed sine wave"
+msgstr ""
+
+#: adctoolbox.fundamentals.fit_sine_4param.fit_sine_4param:9 of
+msgid "residuals: Data - fitted_signal"
+msgstr ""
+
+#: adctoolbox.fundamentals.fit_sine_4param.fit_sine_4param:10 of
+msgid "frequency: Normalized frequency (0 to 0.5)"
+msgstr ""
+
+#: adctoolbox.fundamentals.fit_sine_4param.fit_sine_4param:11 of
+msgid "amplitude: sqrt(A² + B²)"
+msgstr ""
+
+#: adctoolbox.fundamentals.fit_sine_4param.fit_sine_4param:12 of
+msgid "phase: atan2(-B, A) in radians"
+msgstr ""
+
+#: adctoolbox.fundamentals.fit_sine_4param.fit_sine_4param:13 of
+msgid "dc_offset: DC component"
+msgstr ""
+
+#: adctoolbox.fundamentals.fit_sine_4param.fit_sine_4param:14 of
+msgid "rmse: Root mean square error"
+msgstr ""
+
+#: adctoolbox.fundamentals.fit_sine_4param.fit_sine_4param:16 of
+msgid "For 2D input, all values (except fitted_signal, residuals) are 1D arrays."
+msgstr ""
+
+#: ../../source/api/fundamentals.rst
+#: adctoolbox.fundamentals.frequency.estimate_frequency
+#: adctoolbox.fundamentals.frequency.find_coherent_frequency
+#: adctoolbox.fundamentals.frequency.fold_bin_to_nyquist
+#: adctoolbox.fundamentals.frequency.fold_frequency_to_nyquist
+#: adctoolbox.fundamentals.snr_nsd.nsd_to_snr
+#: adctoolbox.fundamentals.snr_nsd.snr_to_nsd of
+msgid "Return type"
+msgstr ""
+
+#: ../../source/api/fundamentals.rst:14
+msgid "Frequency Utilities"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.find_coherent_frequency:1 of
+msgid "Calculate the precise coherent input frequency and bin index."
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.find_coherent_frequency:3 of
+msgid "Supports Undersampling (Fin > Fs/2)."
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.find_coherent_frequency:5
+#: adctoolbox.fundamentals.frequency.fold_frequency_to_nyquist:8
+#: adctoolbox.fundamentals.metrics.calculate_walden_fom:9 of
+msgid "Sampling frequency (Hz)"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.find_coherent_frequency:7 of
+msgid "Target input frequency (Hz)"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.find_coherent_frequency:9 of
+msgid "FFT size (number of points)"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.find_coherent_frequency:11 of
+msgid "If True, only search for odd bin indices (default: True)"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.find_coherent_frequency:13 of
+msgid "Search radius around the ideal bin (default: 200)"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.find_coherent_frequency:16 of
+msgid "(fin_actual, best_bin) - Coherent frequency and corresponding bin index"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.find_coherent_frequency of
+msgid "Raises"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.find_coherent_frequency:19 of
+msgid "If no valid coherent frequency is found within search radius"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.estimate_frequency:17
+#: adctoolbox.fundamentals.frequency.find_coherent_frequency:22
+#: adctoolbox.fundamentals.frequency.fold_bin_to_nyquist:15
+#: adctoolbox.fundamentals.frequency.fold_frequency_to_nyquist:15
+#: adctoolbox.fundamentals.snr_nsd.amplitudes_to_snr:23
+#: adctoolbox.fundamentals.snr_nsd.nsd_to_snr:28
+#: adctoolbox.fundamentals.snr_nsd.snr_to_nsd:28 of
+msgid "Examples"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.estimate_frequency:1 of
+msgid "Estimate the physical fundamental frequency (Hz) of a signal."
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.estimate_frequency:3 of
+msgid ""
+"This is a wrapper around the robust `fit_sine_4param` algorithm. It "
+"converts the normalized frequency (0 ~ 0.5) returned by fit_sine into "
+"physical frequency (Hz) based on the sampling rate."
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.estimate_frequency:7 of
+msgid "Input signal data. 1D or 2D array."
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.estimate_frequency:9 of
+msgid "Sampling frequency in Hz (default: 1.0)"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.estimate_frequency:12 of
+msgid "Estimated frequency in Hz. (Scalar if input is 1D, Array if input is 2D)"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.fold_frequency_to_nyquist:1 of
+msgid "Calculate the aliased (folded) frequency in the first Nyquist zone."
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.fold_frequency_to_nyquist:3 of
+msgid ""
+"The aliased frequency is the absolute difference between the input "
+"frequency and the nearest integer multiple of the sampling rate."
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.fold_frequency_to_nyquist:6 of
+msgid "Input frequency (Hz). Can be positive or negative."
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.fold_frequency_to_nyquist:11 of
+msgid "Aliased frequency in range [0, Fs/2]"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.fold_bin_to_nyquist:1 of
+msgid "Calculate the aliased bin index in the first Nyquist zone [0, n_fft/2]."
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.fold_bin_to_nyquist:3 of
+msgid ""
+"For real signals, FFT bins above n_fft/2 are mirrored to the first "
+"Nyquist zone. This function handles the wrapping and mirroring."
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.fold_bin_to_nyquist:6 of
+msgid "Bin index (can be fractional, negative, or > n_fft)"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.fold_bin_to_nyquist:8 of
+msgid "Total number of FFT bins"
+msgstr ""
+
+#: adctoolbox.fundamentals.frequency.fold_bin_to_nyquist:11 of
+msgid "Aliased bin index in range [0, n_fft/2]"
+msgstr ""
+
+#: ../../source/api/fundamentals.rst:22
+msgid "Unit Conversions"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.db_to_mag:1 of
+msgid "Convert dB to magnitude ratio: 10^(x/20)"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.mag_to_db:1 of
+msgid "Convert magnitude ratio to dB: 20*log10(x)"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.db_to_power:1 of
+msgid "Convert dB to power ratio: 10^(x/10)"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.power_to_db:1 of
+msgid "Convert power ratio to dB: 10*log10(x)"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.snr_to_enob:1 of
+msgid "Convert SNR/SNDR (dB) to ENOB (bits): (SNR - 1.76) / 6.02"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.enob_to_snr:1 of
+msgid "Convert ENOB (bits) to ideal SNR (dB): ENOB * 6.02 + 1.76"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.lsb_to_volts:1 of
+msgid "Convert LSB count to voltage"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.volts_to_lsb:1 of
+msgid "Convert voltage to LSB count"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.bin_to_freq:1 of
+msgid "Convert FFT bin index to frequency (Hz)"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.freq_to_bin:1 of
+msgid "Convert frequency (Hz) to nearest FFT bin index"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.dbm_to_vrms:1 of
+msgid "Convert dBm to Vrms (assuming load impedance z_load)"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.vrms_to_dbm:1 of
+msgid "Convert Vrms to dBm"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.dbm_to_mw:1 of
+msgid "Convert dBm to mW: mW = 10^(dBm/10)"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.mw_to_dbm:1 of
+msgid "Convert mW to dBm: dBm = 10*log10(mW)"
+msgstr ""
+
+#: adctoolbox.fundamentals.units.sine_amplitude_to_power:1 of
+msgid "Convert sine wave peak amplitude to power."
+msgstr ""
+
+#: adctoolbox.fundamentals.units.sine_amplitude_to_power:3 of
+msgid "For sine wave: Vrms = A / sqrt(2) Power = Vrms^2 / Z = A^2 / (2*Z)"
+msgstr ""
+
+#: ../../source/api/fundamentals.rst:41
+msgid "SNR/NSD Conversion"
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.amplitudes_to_snr:1 of
+msgid ""
+"Calculate Signal-to-Noise Ratio (SNR) in dB from sine wave peak amplitude"
+" and noise RMS."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.amplitudes_to_snr:3 of
+msgid ""
+"This function computes SNR, assuming the signal is a pure sine wave and "
+"the noise is Gaussian (White Noise)."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.amplitudes_to_snr:6 of
+msgid ""
+"SNR is calculated based on the power ratio: SNR (dB) = 10 * log10(P_sig /"
+" P_noise). When oversampling is used, SNR improves by 10*log10(OSR)."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.amplitudes_to_snr:9 of
+msgid "Sine wave peak amplitude (A), in Volts (V)."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.amplitudes_to_snr:11 of
+msgid "Noise RMS amplitude (σ), in Volts (V)."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.amplitudes_to_snr:13 of
+msgid ""
+"Oversampling ratio. SNR improves by 10*log10(OSR) dB. Default is 1 (no "
+"oversampling)."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.amplitudes_to_snr:15 of
+msgid ""
+"If True, returns a tuple containing (snr_db, sig_power, noise_power). "
+"Default is False, returning only snr_db."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.amplitudes_to_snr:19 of
+msgid ""
+"* **snr_db** (*float or ndarray*) -- The calculated SNR in dB. Returns "
+"np.inf if noise_amplitude is zero. * **(snr_db, sig_power, noise_power)**"
+" (*tuple (if return_power=True)*) -- The SNR in dB, Signal Power (V^2), "
+"and Noise Power (V^2), respectively."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.amplitudes_to_snr:19 of
+msgid ""
+"**snr_db** (*float or ndarray*) -- The calculated SNR in dB. Returns "
+"np.inf if noise_amplitude is zero."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.amplitudes_to_snr:20 of
+msgid ""
+"**(snr_db, sig_power, noise_power)** (*tuple (if return_power=True)*) -- "
+"The SNR in dB, Signal Power (V^2), and Noise Power (V^2), respectively."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.snr_to_nsd:1 of
+msgid "Convert Signal-to-Noise Ratio (SNR) to Noise Spectral Density (NSD)."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.snr_to_nsd:3 of
+msgid ""
+"This function converts SNR in dB to NSD in dBFS/Hz, given the sampling "
+"frequency and oversampling ratio. It assumes a full-scale sine wave "
+"signal (0 dBFS) unless specified otherwise."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.snr_to_nsd:7 of
+msgid ""
+"The relationship is derived from: - Signal power: P_signal = "
+"10^(Psignal_dBFS / 10) - Noise power: P_noise = P_signal / 10^(SNR_dB / "
+"10) - Noise bandwidth: BW = fs / (2 * OSR) - NSD = P_noise / BW (linear "
+"scale) - NSD_dBFS/Hz = 10 * log10(NSD)"
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.snr_to_nsd:14 of
+msgid "Signal-to-Noise Ratio in dB."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.nsd_to_snr:16
+#: adctoolbox.fundamentals.snr_nsd.snr_to_nsd:16 of
+msgid "Sampling frequency in Hz."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.nsd_to_snr:18
+#: adctoolbox.fundamentals.snr_nsd.snr_to_nsd:18 of
+msgid ""
+"Oversampling ratio. Default is 1.0 (Nyquist sampling). The noise "
+"bandwidth is fs / (2 * OSR)."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.nsd_to_snr:21
+#: adctoolbox.fundamentals.snr_nsd.snr_to_nsd:21 of
+msgid "Signal power in dBFS. Default is 0.0 dBFS (full-scale signal)."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.snr_to_nsd:24 of
+msgid "**nsd_dbfs_hz** -- Noise Spectral Density in dBFS/Hz."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.nsd_to_snr:1 of
+msgid "Convert Noise Spectral Density (NSD) to Signal-to-Noise Ratio (SNR)."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.nsd_to_snr:3 of
+msgid ""
+"This function converts NSD in dBFS/Hz to SNR in dB, given the sampling "
+"frequency and oversampling ratio. It assumes a full-scale sine wave "
+"signal (0 dBFS) unless specified otherwise."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.nsd_to_snr:7 of
+msgid ""
+"The relationship is derived from: - NSD in linear scale: NSD_linear = "
+"10^(NSD_dBFS/Hz / 10) - Noise bandwidth: BW = fs / (2 * OSR) - Noise "
+"power: P_noise = NSD_linear * BW - Signal power: P_signal = "
+"10^(Psignal_dBFS / 10) - SNR = 10 * log10(P_signal / P_noise)"
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.nsd_to_snr:14 of
+msgid "Noise Spectral Density in dBFS/Hz."
+msgstr ""
+
+#: adctoolbox.fundamentals.snr_nsd.nsd_to_snr:24 of
+msgid "**snr_db** -- Signal-to-Noise Ratio in dB."
+msgstr ""
+
+#: ../../source/api/fundamentals.rst:48
+msgid "Validation"
+msgstr ""
+
+#: adctoolbox.fundamentals.validate.validate_aout_data:1 of
+msgid "Validate analog output data format."
+msgstr ""
+
+#: adctoolbox.fundamentals.validate.validate_aout_data:3 of
+msgid "Checks: Numeric, Real, Finite, Sufficient Length, Signal Variation."
+msgstr ""
+
+#: adctoolbox.fundamentals.validate.validate_dout_data:1 of
+msgid "Validate digital output (bits) data format."
+msgstr ""
+
+#: adctoolbox.fundamentals.validate.validate_dout_data:3 of
+msgid ""
+"Checks: Binary (0/1), Dimensions, Stuck Bits. Expects: (N_samples, "
+"N_bits) matrix."
+msgstr ""
+
+#: ../../source/api/fundamentals.rst:54
+msgid "Figures of Merit"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_walden_fom:1 of
+msgid "Calculate Walden Figure of Merit (FoM_w)."
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_walden_fom:3 of
+msgid "Standard metric for medium-resolution ADCs. Lower is better."
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_walden_fom:6 of
+msgid "Formula: Power / (2^ENOB * Fs)"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_schreier_fom:8
+#: adctoolbox.fundamentals.metrics.calculate_walden_fom:8 of
+msgid "Power consumption (W)"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_walden_fom:10 of
+msgid "Effective number of bits"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_walden_fom:12 of
+msgid "FoM_w in J/conv-step (Joules per conversion step)"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_schreier_fom:1 of
+msgid "Calculate Schreier Figure of Merit (FoM_s)."
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_schreier_fom:3 of
+msgid "Standard metric for high-resolution / Sigma-Delta ADCs. Higher is better."
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_schreier_fom:6 of
+msgid "Formula: SNDR + 10*log10(BW / Power)"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_schreier_fom:9 of
+msgid "Signal-to-Noise and Distortion Ratio (dB)"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_schreier_fom:10 of
+msgid "Signal bandwidth (Hz)"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_schreier_fom:12 of
+msgid "FoM_s in dB"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_thermal_noise_limit:1 of
+msgid "Calculate maximum achievable SNR limited by kT/C noise."
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_thermal_noise_limit:3 of
+msgid ""
+"Thermal noise sets the fundamental limit for switched-capacitor circuits "
+"and sample-and-hold amplifiers."
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_thermal_noise_limit:6 of
+msgid "Sampling capacitance in pF"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_thermal_noise_limit:7 of
+msgid "Full-scale voltage (Vpp), default 1.0V"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_jitter_limit:11
+#: adctoolbox.fundamentals.metrics.calculate_thermal_noise_limit:9 of
+msgid "Maximum SNR in dB"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_thermal_noise_limit:11 of
+msgid "Theory:"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_thermal_noise_limit:12 of
+msgid "Noise power = kT/C"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_thermal_noise_limit:13 of
+msgid "Signal power (sine) = (Vfs/2)^2 / 2 = Vfs^2 / 8"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_thermal_noise_limit:14 of
+msgid "SNR = 10*log10(P_signal / P_noise)"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_jitter_limit:1 of
+msgid "Calculate maximum achievable SNR limited by aperture jitter."
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_jitter_limit:3 of
+msgid ""
+"Sampling jitter creates phase noise that limits SNR, especially at high "
+"input frequencies."
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_jitter_limit:6 of
+msgid "Formula: SNR = -20 * log10(2 * pi * fin * tj)"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_jitter_limit:8 of
+msgid "Input frequency (Hz)"
+msgstr ""
+
+#: adctoolbox.fundamentals.metrics.calculate_jitter_limit:9 of
+msgid "RMS jitter in seconds"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/api/index.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/index.po
new file mode 100644
index 0000000..28e1bf1
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/index.po
@@ -0,0 +1,93 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/api/index.rst:2
+msgid "API Reference"
+msgstr ""
+
+#: ../../source/api/index.rst:4
+msgid ""
+"This section provides detailed documentation for all ADCToolbox modules "
+"and functions."
+msgstr ""
+
+#: ../../source/api/index.rst:17
+msgid "Module Overview"
+msgstr ""
+
+#: ../../source/api/index.rst:19
+msgid ":doc:`fundamentals`"
+msgstr ""
+
+#: ../../source/api/index.rst:20
+msgid ""
+"Fundamental utilities including sine fitting, frequency calculation, unit"
+" conversion, FOM metrics, and validation"
+msgstr ""
+
+#: ../../source/api/index.rst:22
+msgid ":doc:`spectrum`"
+msgstr ""
+
+#: ../../source/api/index.rst:23
+msgid ""
+"Spectrum analysis tools for FFT-based metrics, polar plots, and two-tone "
+"analysis"
+msgstr ""
+
+#: ../../source/api/index.rst:25
+msgid ":doc:`aout`"
+msgstr ""
+
+#: ../../source/api/index.rst:26
+msgid ""
+"Analog output analysis tools for INL/DNL, harmonic decomposition, and "
+"error characterization"
+msgstr ""
+
+#: ../../source/api/index.rst:28
+msgid ":doc:`dout`"
+msgstr ""
+
+#: ../../source/api/index.rst:29
+msgid ""
+"Digital output analysis tools for bit weight calibration, overflow "
+"detection, and ENOB analysis"
+msgstr ""
+
+#: ../../source/api/index.rst:31
+msgid ":doc:`siggen`"
+msgstr ""
+
+#: ../../source/api/index.rst:32
+msgid ""
+"Signal generation utilities for test signal creation with various non-"
+"idealities"
+msgstr ""
+
+#: ../../source/api/index.rst:34
+msgid ":doc:`oversampling`"
+msgstr ""
+
+#: ../../source/api/index.rst:35
+msgid "Oversampling and Delta-Sigma modulator analysis tools"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/api/oversampling.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/oversampling.po
new file mode 100644
index 0000000..5cf44bc
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/oversampling.po
@@ -0,0 +1,75 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/api/oversampling.rst:2
+msgid "Oversampling Analysis (oversampling)"
+msgstr ""
+
+#: ../../source/api/oversampling.rst:4
+msgid ""
+"The ``oversampling`` module provides tools for analyzing oversampling and"
+" Delta-Sigma modulators."
+msgstr ""
+
+#: adctoolbox.oversampling:1 of
+msgid "Oversampling and noise transfer function analysis tools."
+msgstr ""
+
+#: adctoolbox.oversampling.ntf_analyzer.ntf_analyzer:1 of
+msgid "Analyze the performance of NTF (Noise Transfer Function)"
+msgstr ""
+
+#: ../../source/api/oversampling.rst
+msgid "Parameters"
+msgstr ""
+
+#: adctoolbox.oversampling.ntf_analyzer.ntf_analyzer:3 of
+msgid ""
+"The noise transfer function (in z domain) - scipy.signal.TransferFunction"
+" or tuple (num, den)"
+msgstr ""
+
+#: adctoolbox.oversampling.ntf_analyzer.ntf_analyzer:4 of
+msgid "Low bound frequency of signal band (relative to Fs)"
+msgstr ""
+
+#: adctoolbox.oversampling.ntf_analyzer.ntf_analyzer:5 of
+msgid "High bound frequency of signal band (relative to Fs)"
+msgstr ""
+
+#: adctoolbox.oversampling.ntf_analyzer.ntf_analyzer:6 of
+msgid "Optional plotting flag (1 to plot, None or 0 to skip)"
+msgstr ""
+
+#: ../../source/api/oversampling.rst
+msgid "Returns"
+msgstr ""
+
+#: adctoolbox.oversampling.ntf_analyzer.ntf_analyzer:8 of
+msgid ""
+"Integrated noise suppression of NTF in signal band in dB (compared to "
+"NTF=1)"
+msgstr ""
+
+#: ../../source/api/oversampling.rst
+msgid "Return type"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/api/siggen.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/siggen.po
new file mode 100644
index 0000000..b7dff20
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/siggen.po
@@ -0,0 +1,287 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/api/siggen.rst:2
+msgid "Signal Generation (siggen)"
+msgstr ""
+
+#: ../../source/api/siggen.rst:4
+msgid "The ``siggen`` module provides tools for generating test signals."
+msgstr ""
+
+#: adctoolbox.siggen:1 of
+msgid "Signal Generation Module for ADC Testing"
+msgstr ""
+
+#: adctoolbox.siggen:3 of
+msgid ""
+"Provides signal generators and non-ideality appliers for simulating "
+"various ADC imperfections and effects."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator:1 of
+msgid ""
+"Generates ADC test signals with various non-idealities using the Applier "
+"Pattern."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator:3 of
+msgid ""
+"Each method accepts optional input_signal parameter. If None, uses clean "
+"base signal. Methods return signal with non-ideality applied. Supports "
+"chaining multiple effects."
+msgstr ""
+
+#: ../../source/api/siggen.rst
+msgid "Parameters"
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator:6 of
+msgid "Number of samples"
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator:8 of
+msgid "Sampling frequency (Hz)"
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator:10 of
+msgid "Input signal frequency (Hz)"
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator:12 of
+msgid "Input signal amplitude (e.g., 0.49)"
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator:14 of
+msgid "Input signal DC offset (e.g., 0.5)"
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.__init__:1 of
+msgid "Initialize ADC_Signal_Generator with signal parameters."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.get_clean_signal:1 of
+msgid "Return clean sine wave: A*sin(2π*Fin*t) + DC (explicit public interface)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_thermal_noise:1
+#: of
+msgid ""
+"Apply white thermal noise. Params: input_signal (None->clean), noise_rms "
+"(default 50e-6)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_quantization_noise:1
+#: of
+msgid ""
+"Apply quantization noise. Params: quant_range: tuple (v_min, v_max), "
+"e.g., (0, 1) or (-0.5, 0.5)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_jitter:1 of
+msgid "Apply sampling jitter."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_jitter:3 of
+msgid ""
+"Logic: - Case 1 (Source Generation): If input_signal is None, regenerates"
+" from scratch (Perfect Precision). - Case 2 (Chain Processing): If input "
+"is provided, uses Cubic Spline interpolation (Preserves previous errors)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_static_nonlinearity:1
+#: of
+msgid ""
+"Applies static nonlinear distortion to the signal using direct polynomial"
+" coefficients (k2 to k5)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_static_nonlinearity_hd:1
+#: of
+msgid ""
+"Converts specified Harmonic Distortion levels (dBc) to polynomial "
+"coefficients and applies the nonlinearity."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_memory_effect:1
+#: of
+msgid ""
+"Apply memory effect (charge injection). The previous MSB decision leaks "
+"back to the input. Params: input_signal, memory_strength (default 0.009)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_incomplete_sampling:1
+#: of
+msgid ""
+"Apply dynamic nonlinearity (tracking/settling). Models slew-rate and "
+"signal-dependent settling errors. Params: input_signal, T_track, tau_nom "
+"(default 40ps), coeff_k (default 0.15)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_ra_gain_error:1
+#: of
+#, python-format
+msgid ""
+"Apply interstage gain error (2-stage pipeline ADC). Params: input_signal,"
+" relative_gain (default 0.99 = 1% error)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_ra_gain_error_dynamic:1
+#: of
+msgid ""
+"Applies dynamic gain error to the interstage residue amplifier in a "
+"pipeline ADC. G[n] is non-linearly dependent on the previous residue "
+"output magnitude (V_prev_ac^3), modeling HD3 memory effects."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_reference_error:1
+#: of
+msgid "Apply Reference Incomplete Settling error (Vref Memory Effect)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_reference_error:3
+#: of
+msgid ""
+"This simulates the reference voltage dropping due to load current (kick) "
+"and failing to recover fully before the next sample."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_noise_shaping:16
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_reference_error:6
+#: of
+msgid "Params:"
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_reference_error:7
+#: of
+msgid ""
+"input_signal: The input signal. settling_tau: Recovery time constant in "
+"units of samples (e.g., 2.0)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_reference_error:9
+#: of
+msgid "Larger = Slower recovery = Worse settling."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_reference_error:10
+#: of
+msgid ""
+"droop_strength: How much Vref drops proportional to signal amplitude "
+"(0.01 = 1%)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_am_noise:1 of
+msgid "Apply random AM noise (Multiplicative Thermal Noise). Params:"
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_am_noise:3 of
+msgid ""
+"input_signal: The signal to modulate. am_noise_depth: The RMS level of "
+"the noise relative to signal amplitude (default 0.1)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_am_noise:5 of
+msgid ""
+"There is NO frequency parameter here because white noise contains ALL "
+"frequencies."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_am_tone:1 of
+msgid ""
+"Apply AM tone (coherent modulation). Params: input_signal, am_tone_freq "
+"(default 500kHz), am_tone_depth (default 0.05)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_clipping:1 of
+msgid ""
+"Apply hard clipping based on signal's percentile (e.g., 1.0 clips "
+"top/bottom 1%)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_drift:1 of
+msgid ""
+"Apply drift (low-frequency random walk). Params: input_signal, "
+"drift_scale (default 5e-5)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_glitch:1 of
+msgid ""
+"Apply random glitches. Params: input_signal, glitch_prob (default 0.00015"
+" = 0.015%), glitch_amplitude (default 0.1)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_noise_shaping:1
+#: of
+msgid "Apply noise-shaped quantization (1st to 5th order delta-sigma)."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_noise_shaping:3
+#: of
+msgid "Noise Transfer Function: NTF(z) = (1 - z^-1)^order"
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_noise_shaping:5
+#: of
+msgid ""
+"Order characteristics: - 1st order: 20 dB/decade roll-off (common in "
+"basic delta-sigma) - 2nd order: 40 dB/decade roll-off (most common for "
+"oversampling ADCs) - 3rd order: 60 dB/decade roll-off (aggressive "
+"shaping) - 4th order: 80 dB/decade roll-off (maximum practical, stability"
+" concerns) - 5th order: 100 dB/decade roll-off (rarely used, high "
+"stability risk)"
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_noise_shaping:12
+#: of
+msgid ""
+"This method applies actual quantization (using apply_quantization_noise),"
+" then shapes the quantization error spectrum using the NTF filter. Pushes"
+" quantization noise to higher frequencies, improving in-band SNR."
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_noise_shaping:17
+#: of
+msgid ""
+"input_signal: Input signal (None -> clean sine wave) n_bits: Quantizer "
+"resolution (default 10) quant_range: Quantization range (v_min, v_max), "
+"e.g., (0, 1) or (-0.5, 0.5) order: Noise shaping order (1, 2, 3, 4, or 5,"
+" default 1)"
+msgstr ""
+
+#: ../../source/api/siggen.rst
+msgid "Returns"
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_noise_shaping:22
+#: of
+msgid "Signal with noise-shaped quantization noise added"
+msgstr ""
+
+#: ../../source/api/siggen.rst
+msgid "Raises"
+msgstr ""
+
+#: adctoolbox.siggen.nonidealities.ADC_Signal_Generator.apply_noise_shaping:24
+#: of
+msgid "If order is not in [1, 2, 3, 4, 5]"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/api/spectrum.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/spectrum.po
new file mode 100644
index 0000000..f5cfd9d
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/spectrum.po
@@ -0,0 +1,475 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/api/spectrum.rst:2
+msgid "Spectrum Analysis (spectrum)"
+msgstr ""
+
+#: ../../source/api/spectrum.rst:4
+msgid "The ``spectrum`` module provides FFT-based spectrum analysis tools."
+msgstr ""
+
+#: ../../source/api/spectrum.rst:9
+msgid "Single-Tone Spectrum"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:1 of
+msgid ""
+"Spectral analysis and plotting. (Wrapper function for modular core and "
+"plotting)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:3 of
+msgid ""
+"This function first calculates all metrics and then conditionally plots "
+"the spectrum."
+msgstr ""
+
+#: ../../source/api/spectrum.rst
+msgid "Parameters"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:5 of
+msgid "Input data (N,) or (M, N)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:6 of
+msgid "Sampling frequency"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:7 of
+msgid ""
+"Full scale range for normalization. Can be: scalar (direct range), "
+"tuple/list [min, max], or None (auto-detect)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:9 of
+msgid "Window function type ('hann', 'hamming', 'boxcar')"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:10 of
+msgid "Number of side bins around fundamental (None for automatic selection)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:11
+#: adctoolbox.spectrum.analyze_spectrum_polar.analyze_spectrum_polar:8
+#: adctoolbox.spectrum.compute_spectrum.compute_spectrum:16 of
+msgid "Oversampling ratio"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:12 of
+msgid "Number of harmonics for THD calculation"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:13 of
+msgid ""
+"Noise floor calculation method (0=median, 1=trimmed mean, 2=exclude "
+"harmonics)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:14 of
+msgid "Pre-defined signal level in dBFS"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:15
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:12
+#: of
+msgid "Plot the spectrum (True) or not (False)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:16
+#: adctoolbox.spectrum.plot_spectrum.plot_spectrum:6 of
+msgid "Display auto-generated title (True) or not (False)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:17
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:14
+#: adctoolbox.spectrum.plot_spectrum.plot_spectrum:4 of
+msgid "Add labels and annotations (True) or not (False)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:18
+#: adctoolbox.spectrum.plot_spectrum_polar.plot_spectrum_polar:5 of
+msgid "Number of harmonics to mark on the plot"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:19
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:15
+#: of
+msgid ""
+"Optional matplotlib axes object. If None and create_plot=True, a new "
+"figure is created."
+msgstr ""
+
+#: ../../source/api/spectrum.rst
+msgid "Returns"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:21 of
+msgid ""
+"Dictionary with performance metrics: - enob: Effective Number of Bits"
+" - sndr_dbc: Signal-to-Noise and Distortion Ratio (dBc) - "
+"sfdr_dbc: Spurious-Free Dynamic Range (dBc) - snr_dbc: Signal-to-"
+"Noise Ratio (dBc) - thd_dbc: Total Harmonic Distortion (dBc) - "
+"sig_pwr_dbfs: Signal power (dBFS) - noise_floor_dbfs: Noise floor "
+"(dBFS) - nsd_dbfs_hz: Noise Spectral Density (dBFS/Hz)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:23
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:19
+#: of
+msgid "Dictionary with performance metrics:"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:24
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:20
+#: of
+msgid "enob: Effective Number of Bits"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:25 of
+msgid "sndr_dbc: Signal-to-Noise and Distortion Ratio (dBc)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:26 of
+msgid "sfdr_dbc: Spurious-Free Dynamic Range (dBc)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:27 of
+msgid "snr_dbc: Signal-to-Noise Ratio (dBc)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:28 of
+msgid "thd_dbc: Total Harmonic Distortion (dBc)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:29 of
+msgid "sig_pwr_dbfs: Signal power (dBFS)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:30 of
+msgid "noise_floor_dbfs: Noise floor (dBFS)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum.analyze_spectrum:31 of
+msgid "nsd_dbfs_hz: Noise Spectral Density (dBFS/Hz)"
+msgstr ""
+
+#: ../../source/api/spectrum.rst
+msgid "Return type"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_spectrum.compute_spectrum:1 of
+msgid "Calculate spectrum data for ADC analysis."
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum_polar.analyze_spectrum_polar:5
+#: adctoolbox.spectrum.compute_spectrum.compute_spectrum:3 of
+msgid "Input ADC data, shape (N,) or (M, N)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum_polar.analyze_spectrum_polar:10
+#: adctoolbox.spectrum.compute_spectrum.compute_spectrum:5 of
+msgid "Sampling frequency in Hz"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_spectrum.compute_spectrum:7 of
+msgid "Full scale range. If None, uses (max - min)"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_spectrum.compute_spectrum:9 of
+msgid "Window type: 'boxcar', 'hann', 'hamming', etc."
+msgstr ""
+
+#: adctoolbox.spectrum.compute_spectrum.compute_spectrum:11 of
+msgid ""
+"Side bins to exclude around signal. If None, automatically determined "
+"based on: - Coherent signal (error < 0.01): ceil(enbw) - Non-coherent "
+"signal: ceil(2*enbw) + 1 where enbw is the window's equivalent noise "
+"bandwidth factor"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_spectrum.compute_spectrum:18 of
+msgid "Maximum harmonic number for THD (default: 5 means harmonics 2-5)"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_spectrum.compute_spectrum:20 of
+msgid "Noise floor method: 0=median, 1=trimmed mean, 2=exclude harmonics"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_spectrum.compute_spectrum:22 of
+msgid "Override signal power (dBFS)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:11
+#: adctoolbox.spectrum.compute_spectrum.compute_spectrum:24 of
+msgid "If True, performs coherent averaging with phase alignment"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_spectrum.compute_spectrum:26 of
+msgid "High-pass cutoff frequency (Hz)"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_spectrum.compute_spectrum:28 of
+msgid "Verbosity level"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_spectrum.compute_spectrum:31 of
+msgid "Contains 'metrics' and 'plot_data' dictionaries"
+msgstr ""
+
+#: adctoolbox.spectrum.plot_spectrum.plot_spectrum:1 of
+msgid "Pure spectrum plotting using pre-computed analysis results."
+msgstr ""
+
+#: adctoolbox.spectrum.plot_spectrum.plot_spectrum:3 of
+msgid "Dictionary containing 'metrics' and 'plot_data' from compute_spectrum"
+msgstr ""
+
+#: adctoolbox.spectrum.plot_spectrum.plot_spectrum:5 of
+msgid "Number of harmonics to highlight"
+msgstr ""
+
+#: adctoolbox.spectrum.plot_spectrum.plot_spectrum:7 of
+msgid "Optional matplotlib axes object"
+msgstr ""
+
+#: ../../source/api/spectrum.rst:16
+msgid "Polar Spectrum Plots"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum_polar.analyze_spectrum_polar:1 of
+msgid ""
+"Polar phase spectrum analysis and plotting. (Wrapper function for modular"
+" core and plotting)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum_polar.analyze_spectrum_polar:3 of
+msgid ""
+"This function calculates coherent spectrum with phase alignment and "
+"optionally plots it in polar format."
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum_polar.analyze_spectrum_polar:6 of
+msgid "Maximum code level for normalization. If None, uses (max - min)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum_polar.analyze_spectrum_polar:7 of
+msgid "Number of harmonics to mark on polar plot"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum_polar.analyze_spectrum_polar:9 of
+msgid "High-pass cutoff frequency in Hz"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum_polar.analyze_spectrum_polar:11 of
+msgid "Window function type ('boxcar', 'hann', 'hamming')"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum_polar.analyze_spectrum_polar:12 of
+msgid "Plot the polar spectrum (True) or not (False)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum_polar.analyze_spectrum_polar:13 of
+msgid ""
+"Optional matplotlib polar axes object. If None and create_plot=True, uses"
+" current axes."
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum_polar.analyze_spectrum_polar:14
+#: adctoolbox.spectrum.plot_spectrum_polar.plot_spectrum_polar:6 of
+msgid "Fixed radial range in dB. If None, auto-scales."
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_spectrum_polar.analyze_spectrum_polar:16 of
+msgid "Full results dictionary from compute_spectrum with coherent_averaging=True"
+msgstr ""
+
+#: adctoolbox.spectrum.plot_spectrum_polar.plot_spectrum_polar:1 of
+msgid "Pure polar spectrum plotting using pre-computed coherent spectrum results."
+msgstr ""
+
+#: adctoolbox.spectrum.plot_spectrum_polar.plot_spectrum_polar:3 of
+msgid ""
+"Dictionary containing output from "
+"compute_spectrum(coherent_averaging=True)"
+msgstr ""
+
+#: adctoolbox.spectrum.plot_spectrum_polar.plot_spectrum_polar:4 of
+msgid "Display metrics annotations (True) or not (False)"
+msgstr ""
+
+#: adctoolbox.spectrum.plot_spectrum_polar.plot_spectrum_polar:7 of
+msgid "Optional matplotlib polar axes object"
+msgstr ""
+
+#: ../../source/api/spectrum.rst:22
+msgid "Two-Tone Spectrum"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:1 of
+msgid ""
+"Two-tone spectrum analysis with IMD calculation. (Wrapper function for "
+"modular core and plotting)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:3 of
+msgid ""
+"This function calculates IMD metrics and optionally plots the two-tone "
+"spectrum."
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:5
+#: adctoolbox.spectrum.compute_two_tone_spectrum.compute_two_tone_spectrum:6 of
+msgid "ADC output data, shape (M, N) for M runs or (N,) for single run"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:6 of
+msgid "Sampling frequency (Hz)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:7 of
+msgid "Full scale range (max-min) for normalization"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:8 of
+msgid "Number of harmonics to mark on plot"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:9 of
+msgid "Window function type ('hann', 'blackman', 'hamming', 'boxcar')"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:10
+#: of
+msgid "Number of side bins around fundamental"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:13
+#: of
+msgid "Display title (True) or not (False)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:17
+#: of
+msgid ""
+"Dictionary with performance metrics: - enob: Effective Number of Bits"
+" - sndr_db: Signal-to-Noise and Distortion Ratio (dB) - sfdr_db: "
+"Spurious-Free Dynamic Range (dB) - snr_db: Signal-to-Noise Ratio (dB)"
+" - thd_db: Total Harmonic Distortion (dB) - signal_power_1_dbfs: "
+"Power of first tone (dBFS) - signal_power_2_dbfs: Power of second "
+"tone (dBFS) - noise_floor_db: Noise floor (dB) - imd2_dbc: 2nd "
+"order intermodulation distortion (dBc) - imd3_dbc: 3rd order "
+"intermodulation distortion (dBc)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:21
+#: of
+msgid "sndr_db: Signal-to-Noise and Distortion Ratio (dB)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:22
+#: of
+msgid "sfdr_db: Spurious-Free Dynamic Range (dB)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:23
+#: of
+msgid "snr_db: Signal-to-Noise Ratio (dB)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:24
+#: of
+msgid "thd_db: Total Harmonic Distortion (dB)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:25
+#: of
+msgid "signal_power_1_dbfs: Power of first tone (dBFS)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:26
+#: of
+msgid "signal_power_2_dbfs: Power of second tone (dBFS)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:27
+#: of
+msgid "noise_floor_db: Noise floor (dB)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:28
+#: of
+msgid "imd2_dbc: 2nd order intermodulation distortion (dBc)"
+msgstr ""
+
+#: adctoolbox.spectrum.analyze_two_tone_spectrum.analyze_two_tone_spectrum:29
+#: of
+msgid "imd3_dbc: 3rd order intermodulation distortion (dBc)"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_two_tone_spectrum.compute_two_tone_spectrum:1 of
+msgid "Calculate two-tone spectrum data with IMD analysis."
+msgstr ""
+
+#: adctoolbox.spectrum.compute_two_tone_spectrum.compute_two_tone_spectrum:3 of
+msgid ""
+"Pure calculation function - no plotting or side effects. Follows the "
+"modular architecture pattern."
+msgstr ""
+
+#: adctoolbox.spectrum.compute_two_tone_spectrum.compute_two_tone_spectrum:8 of
+msgid "Sampling frequency (Hz), default: 1.0"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_two_tone_spectrum.compute_two_tone_spectrum:10
+#: of
+msgid "Maximum code range, default: max-min of data"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_two_tone_spectrum.compute_two_tone_spectrum:12
+#: of
+msgid "Window type: 'hann', 'blackman', 'hamming', 'boxcar', default: 'hann'"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_two_tone_spectrum.compute_two_tone_spectrum:14
+#: of
+msgid "Side bins to include in signal power, default: 1"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_two_tone_spectrum.compute_two_tone_spectrum:16
+#: of
+msgid "Number of harmonic orders to calculate for IMD products, default: 7"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_two_tone_spectrum.compute_two_tone_spectrum:18
+#: of
+msgid "If True, performs coherent averaging with phase alignment, default: False"
+msgstr ""
+
+#: adctoolbox.spectrum.compute_two_tone_spectrum.compute_two_tone_spectrum:21
+#: of
+msgid ""
+"Dictionary containing: - 'metrics': Performance metrics (enob, sndr, "
+"sfdr, snr, thd, etc.) - 'plot_data': Data for plotting (freq, spec_db, "
+"bin1, bin2, etc.) - 'imd_bins': IMD product bin locations"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/api/toolset.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/toolset.po
new file mode 100644
index 0000000..0105f45
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/api/toolset.po
@@ -0,0 +1,135 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/api/toolset.rst:2
+msgid "Toolsets and Dashboards (toolset)"
+msgstr ""
+
+#: ../../source/api/toolset.rst:4
+msgid ""
+"The ``toolset`` module provides complete analysis toolsets and dashboard "
+"generation capabilities."
+msgstr ""
+
+#: adctoolbox.toolset:1 of
+msgid "Toolset subpackage: Dashboard generation utilities."
+msgstr ""
+
+#: adctoolbox.toolset:3 of
+msgid ""
+"This subpackage provides high-level dashboard functions that combine "
+"multiple analysis tools into comprehensive visualizations."
+msgstr ""
+
+#: adctoolbox.toolset.generate_aout_dashboard.generate_aout_dashboard:1 of
+msgid "Generate comprehensive analysis dashboard with 8 subplots in a 2x4 panel."
+msgstr ""
+
+#: ../../source/api/toolset.rst
+msgid "Parameters"
+msgstr ""
+
+#: adctoolbox.toolset.generate_aout_dashboard.generate_aout_dashboard:3 of
+msgid "Input signal (ADC output or analog signal)"
+msgstr ""
+
+#: adctoolbox.toolset.generate_aout_dashboard.generate_aout_dashboard:5 of
+msgid "Sampling frequency (default: 1.0 for normalized frequency)"
+msgstr ""
+
+#: adctoolbox.toolset.generate_aout_dashboard.generate_aout_dashboard:7 of
+msgid ""
+"Signal frequency in Hz (default: None, auto-estimate) Will be converted "
+"to normalized frequency where needed"
+msgstr ""
+
+#: adctoolbox.toolset.generate_aout_dashboard.generate_aout_dashboard:10
+#: adctoolbox.toolset.generate_dout_dashboard.generate_dout_dashboard:9 of
+msgid "Path to save figure (default: None, don't save)"
+msgstr ""
+
+#: adctoolbox.toolset.generate_aout_dashboard.generate_aout_dashboard:12 of
+msgid "ADC resolution in bits (default: 12)"
+msgstr ""
+
+#: ../../source/api/toolset.rst
+msgid "Returns"
+msgstr ""
+
+#: adctoolbox.toolset.generate_aout_dashboard.generate_aout_dashboard:15 of
+msgid ""
+"* **fig** (*matplotlib.figure.Figure*) -- Figure object containing the "
+"dashboard * **axes** (*ndarray*) -- Array of axes objects (2x4 grid, "
+"flattened)"
+msgstr ""
+
+#: adctoolbox.toolset.generate_aout_dashboard.generate_aout_dashboard:15
+#: adctoolbox.toolset.generate_dout_dashboard.generate_dout_dashboard:14 of
+msgid ""
+"**fig** (*matplotlib.figure.Figure*) -- Figure object containing the "
+"dashboard"
+msgstr ""
+
+#: adctoolbox.toolset.generate_aout_dashboard.generate_aout_dashboard:16 of
+msgid "**axes** (*ndarray*) -- Array of axes objects (2x4 grid, flattened)"
+msgstr ""
+
+#: adctoolbox.toolset.generate_dout_dashboard.generate_dout_dashboard:1 of
+msgid ""
+"Generate comprehensive digital analysis dashboard with 6 subplots in a "
+"2x3 panel."
+msgstr ""
+
+#: adctoolbox.toolset.generate_dout_dashboard.generate_dout_dashboard:3 of
+msgid "Digital bits (N samples x B bits, MSB to LSB order)"
+msgstr ""
+
+#: adctoolbox.toolset.generate_dout_dashboard.generate_dout_dashboard:5 of
+msgid "Normalized frequency (0-0.5). If None, auto-detect from calibration"
+msgstr ""
+
+#: adctoolbox.toolset.generate_dout_dashboard.generate_dout_dashboard:7 of
+msgid "Nominal weights for bits (default: None, uses binary weights)"
+msgstr ""
+
+#: adctoolbox.toolset.generate_dout_dashboard.generate_dout_dashboard:11 of
+msgid "Whether to display figure (default: False)"
+msgstr ""
+
+#: adctoolbox.toolset.generate_dout_dashboard.generate_dout_dashboard:14 of
+msgid ""
+"* **fig** (*matplotlib.figure.Figure*) -- Figure object containing the "
+"dashboard * **axes** (*ndarray*) -- Array of axes objects (2x3 grid, "
+"flattened)"
+msgstr ""
+
+#: adctoolbox.toolset.generate_dout_dashboard.generate_dout_dashboard:15 of
+msgid "**axes** (*ndarray*) -- Array of axes objects (2x3 grid, flattened)"
+msgstr ""
+
+#: ../../source/api/toolset.rst:14
+msgid "Analog Output Toolset"
+msgstr ""
+
+#: ../../source/api/toolset.rst:19
+msgid "Digital Output Toolset"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/changelog.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/changelog.po
new file mode 100644
index 0000000..4375278
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/changelog.po
@@ -0,0 +1,425 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/changelog.rst:2
+msgid "Changelog"
+msgstr ""
+
+#: ../../source/changelog.rst:4
+msgid ""
+"For the complete changelog with detailed version history, see the "
+"`CHANGELOG.md "
+"`_ file "
+"in the repository."
+msgstr ""
+
+#: ../../source/changelog.rst:7
+msgid "Version 0.4.0 (Latest)"
+msgstr ""
+
+#: ../../source/changelog.rst:9 ../../source/changelog.rst:49
+msgid "**Release Date**: 2025-12-18"
+msgstr ""
+
+#: ../../source/changelog.rst:11
+msgid ""
+"**Documentation Release** - Complete Sphinx documentation overhaul with "
+"algorithm guides."
+msgstr ""
+
+#: ../../source/changelog.rst:14
+msgid "Added"
+msgstr ""
+
+#: ../../source/changelog.rst:16 ../../source/changelog.rst:110
+msgid "**Complete Documentation Overhaul**:"
+msgstr ""
+
+#: ../../source/changelog.rst:18
+msgid "15 detailed algorithm documentation pages with Python API"
+msgstr ""
+
+#: ../../source/changelog.rst:19
+msgid "Updated installation guide emphasizing ``adctoolbox-get-examples``"
+msgstr ""
+
+#: ../../source/changelog.rst:20 ../../source/changelog.rst:116
+msgid "Enhanced quickstart guide with learning path"
+msgstr ""
+
+#: ../../source/changelog.rst:21
+msgid "All API reference docs updated to Python snake_case naming"
+msgstr ""
+
+#: ../../source/changelog.rst:24
+msgid "Changed"
+msgstr ""
+
+#: ../../source/changelog.rst:26
+msgid "**Documentation Structure**:"
+msgstr ""
+
+#: ../../source/changelog.rst:28
+msgid "Installation guide shortened, git clone moved to bottom"
+msgstr ""
+
+#: ../../source/changelog.rst:29
+msgid ""
+"Quickstart restructured to start with basic examples (exp_b01, exp_b02, "
+"then exp_s01)"
+msgstr ""
+
+#: ../../source/changelog.rst:30
+msgid "Used actual code from examples instead of synthetic snippets"
+msgstr ""
+
+#: ../../source/changelog.rst:31
+msgid "Emphasized \"Learning with Examples\" throughout documentation"
+msgstr ""
+
+#: ../../source/changelog.rst:34
+msgid "Removed"
+msgstr ""
+
+#: ../../source/changelog.rst:36
+msgid "Deleted 13 obsolete MATLAB-named algorithm documentation files"
+msgstr ""
+
+#: ../../source/changelog.rst:37
+msgid "Removed obsolete ``src/__init__.py`` file"
+msgstr ""
+
+#: ../../source/changelog.rst:40
+msgid "Fixed"
+msgstr ""
+
+#: ../../source/changelog.rst:42
+msgid "Version number synchronization across all files"
+msgstr ""
+
+#: ../../source/changelog.rst:43
+msgid "Dynamic versioning in ``pyproject.toml``"
+msgstr ""
+
+#: ../../source/changelog.rst:44
+msgid "Documentation links and references updated to v0.4.0"
+msgstr ""
+
+#: ../../source/changelog.rst:47
+msgid "Version 0.3.0"
+msgstr ""
+
+#: ../../source/changelog.rst:51
+msgid ""
+"**Major Refactoring Release** - Complete Python architecture "
+"modernization with 45 examples."
+msgstr ""
+
+#: ../../source/changelog.rst:54
+msgid "Breaking Changes"
+msgstr ""
+
+#: ../../source/changelog.rst:56
+msgid ""
+"**API Naming**: All functions converted from MATLAB camelCase to Python "
+"snake_case"
+msgstr ""
+
+#: ../../source/changelog.rst:58
+msgid "``sineFit`` → ``fit_sine_4param``"
+msgstr ""
+
+#: ../../source/changelog.rst:59
+msgid "``INLsine`` → ``analyze_inl_from_sine``"
+msgstr ""
+
+#: ../../source/changelog.rst:60
+msgid "``specPlot`` → ``analyze_spectrum``"
+msgstr ""
+
+#: ../../source/changelog.rst:61
+msgid "``errPDF`` → ``analyze_error_pdf``"
+msgstr ""
+
+#: ../../source/changelog.rst:62
+msgid "``FGCalSine`` → ``calibrate_weight_sine``"
+msgstr ""
+
+#: ../../source/changelog.rst:63
+msgid "And many more..."
+msgstr ""
+
+#: ../../source/changelog.rst:65
+msgid ""
+"**Module Structure**: Consolidated and reorganized for better "
+"maintainability"
+msgstr ""
+
+#: ../../source/changelog.rst:67
+msgid ""
+"``fundamentals``: Sine fitting, frequency utils, unit conversions, FOM "
+"metrics"
+msgstr ""
+
+#: ../../source/changelog.rst:68
+msgid "``spectrum``: Single-tone, two-tone, polar analysis"
+msgstr ""
+
+#: ../../source/changelog.rst:69
+msgid "``aout``: Analog error analysis (10 functions)"
+msgstr ""
+
+#: ../../source/changelog.rst:70
+msgid "``dout``: Digital calibration (3 functions)"
+msgstr ""
+
+#: ../../source/changelog.rst:71
+msgid "``siggen``: Signal generator with non-idealities"
+msgstr ""
+
+#: ../../source/changelog.rst:72
+msgid "``oversampling``: NTF analysis"
+msgstr ""
+
+#: ../../source/changelog.rst:74
+msgid ""
+"**Return Values**: All functions now return dictionaries instead of "
+"tuples for clarity"
+msgstr ""
+
+#: ../../source/changelog.rst:77
+msgid "New Features"
+msgstr ""
+
+#: ../../source/changelog.rst:79
+msgid "**45 Ready-to-Run Examples** (up from 21) across 6 categories:"
+msgstr ""
+
+#: ../../source/changelog.rst:81
+msgid "``01_basic/`` - Fundamentals (2 examples)"
+msgstr ""
+
+#: ../../source/changelog.rst:82
+msgid "``02_spectrum/`` - FFT-Based Analysis (14 examples)"
+msgstr ""
+
+#: ../../source/changelog.rst:83
+msgid "``03_generate_signals/`` - Non-Ideality Modeling (6 examples)"
+msgstr ""
+
+#: ../../source/changelog.rst:84
+msgid "``04_debug_analog/`` - Error Characterization (13 examples)"
+msgstr ""
+
+#: ../../source/changelog.rst:85
+msgid "``05_debug_digital/`` - Calibration & Redundancy (5 examples)"
+msgstr ""
+
+#: ../../source/changelog.rst:86
+msgid "``07_conversions/`` - Conversions (5 examples)"
+msgstr ""
+
+#: ../../source/changelog.rst:88
+msgid "**Enhanced Error Analysis**:"
+msgstr ""
+
+#: ../../source/changelog.rst:90
+msgid "``analyze_error_by_phase``: AM/PM decomposition"
+msgstr ""
+
+#: ../../source/changelog.rst:91
+msgid "``analyze_error_spectrum``: Error frequency analysis"
+msgstr ""
+
+#: ../../source/changelog.rst:92
+msgid "``analyze_decomposition_polar``: Polar harmonic visualization"
+msgstr ""
+
+#: ../../source/changelog.rst:93
+msgid "``fit_static_nonlin``: Extract k2/k3 coefficients"
+msgstr ""
+
+#: ../../source/changelog.rst:95
+msgid "**Expanded Fundamentals Module**:"
+msgstr ""
+
+#: ../../source/changelog.rst:97
+msgid "Comprehensive unit conversions (dB, power, voltage, frequency, NSD)"
+msgstr ""
+
+#: ../../source/changelog.rst:98
+msgid "FOM calculations (Walden, Schreier)"
+msgstr ""
+
+#: ../../source/changelog.rst:99
+msgid "Noise/jitter limit calculations"
+msgstr ""
+
+#: ../../source/changelog.rst:100
+msgid "Data validation utilities"
+msgstr ""
+
+#: ../../source/changelog.rst:102
+msgid "**CLI Improvements**:"
+msgstr ""
+
+#: ../../source/changelog.rst:104
+msgid "``adctoolbox-get-examples``: One-command example deployment"
+msgstr ""
+
+#: ../../source/changelog.rst:105
+msgid "Organized output directory structure"
+msgstr ""
+
+#: ../../source/changelog.rst:108
+msgid "Documentation"
+msgstr ""
+
+#: ../../source/changelog.rst:112
+msgid "All algorithm docs updated to Python API"
+msgstr ""
+
+#: ../../source/changelog.rst:113
+msgid "15 detailed algorithm documentation pages"
+msgstr ""
+
+#: ../../source/changelog.rst:114
+msgid "Removed 13 obsolete MATLAB-named docs"
+msgstr ""
+
+#: ../../source/changelog.rst:115
+msgid "Updated installation guide with emphasis on examples"
+msgstr ""
+
+#: ../../source/changelog.rst:118
+msgid "**New Algorithm Documentation**:"
+msgstr ""
+
+#: ../../source/changelog.rst:120
+msgid "``fit_sine_4param``: IEEE Std 1057/1241 sine fitting"
+msgstr ""
+
+#: ../../source/changelog.rst:121
+msgid "``analyze_inl_from_sine``: INL/DNL from histogram method"
+msgstr ""
+
+#: ../../source/changelog.rst:122
+msgid "``analyze_spectrum``: Comprehensive FFT analysis"
+msgstr ""
+
+#: ../../source/changelog.rst:123
+msgid "``analyze_error_by_phase``: AM/PM error decomposition"
+msgstr ""
+
+#: ../../source/changelog.rst:124
+msgid "``fit_static_nonlin``: Nonlinearity coefficient extraction"
+msgstr ""
+
+#: ../../source/changelog.rst:125
+msgid "And 10 more detailed guides"
+msgstr ""
+
+#: ../../source/changelog.rst:128
+msgid "Improvements"
+msgstr ""
+
+#: ../../source/changelog.rst:130
+msgid ""
+"**Better API Consistency**: All analyze functions follow pattern: "
+"``analyze_*(..., show_plot=True)``"
+msgstr ""
+
+#: ../../source/changelog.rst:131
+msgid "**Clearer Returns**: Dictionary returns with self-documenting keys"
+msgstr ""
+
+#: ../../source/changelog.rst:132
+msgid ""
+"**Enhanced Plotting**: Optional plotting with ``show_plot`` parameter, "
+"custom axes support"
+msgstr ""
+
+#: ../../source/changelog.rst:133
+msgid "**Validation**: Input validation with clear error messages"
+msgstr ""
+
+#: ../../source/changelog.rst:134
+msgid "**Type Hints**: Added to core functions for better IDE support"
+msgstr ""
+
+#: ../../source/changelog.rst:137
+msgid "Bug Fixes"
+msgstr ""
+
+#: ../../source/changelog.rst:139
+msgid "Fixed frequency estimation edge cases in ``fit_sine_4param``"
+msgstr ""
+
+#: ../../source/changelog.rst:140
+msgid "Corrected INL/DNL clipping behavior in ``analyze_inl_from_sine``"
+msgstr ""
+
+#: ../../source/changelog.rst:141
+msgid "Improved numerical stability in weight calibration"
+msgstr ""
+
+#: ../../source/changelog.rst:144
+msgid "Version 0.2.4"
+msgstr ""
+
+#: ../../source/changelog.rst:146
+msgid "Legacy release with MATLAB-style naming conventions."
+msgstr ""
+
+#: ../../source/changelog.rst:149
+msgid "Features"
+msgstr ""
+
+#: ../../source/changelog.rst:151
+msgid "21 ready-to-run examples"
+msgstr ""
+
+#: ../../source/changelog.rst:152
+msgid "Analog output analysis (9 diagnostic tools)"
+msgstr ""
+
+#: ../../source/changelog.rst:153
+msgid "Digital output analysis (6 tools)"
+msgstr ""
+
+#: ../../source/changelog.rst:154
+msgid "Dual MATLAB and Python implementations"
+msgstr ""
+
+#: ../../source/changelog.rst:155
+msgid "Full documentation"
+msgstr ""
+
+#: ../../source/changelog.rst:158
+msgid "Previous Versions"
+msgstr ""
+
+#: ../../source/changelog.rst:160
+msgid ""
+"For historical version information, please refer to the `CHANGELOG.md "
+"`_ file."
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_02_spectrum.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_02_spectrum.po
new file mode 100644
index 0000000..555c29a
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_02_spectrum.po
@@ -0,0 +1,291 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/examples/expected_output_02_spectrum.rst:2
+msgid "Expected Output: 02_spectrum"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:4
+msgid ""
+"This document shows the expected console output and example figures from "
+"all examples in `python/src/adctoolbox/examples/02_spectrum/`."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:7
+msgid "Summary"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:9
+msgid "All examples in `02_spectrum` demonstrate spectrum analysis capabilities:"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:11
+msgid ""
+"**exp_s01-s03**: Basic spectrum analysis (simplest, interactive, save "
+"figure)"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:12
+msgid "**exp_s04**: Dynamic range sweep"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:13
+msgid "**exp_s05**: Harmonic spur annotation"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:14
+msgid "**exp_s06**: FFT length and OSR sweep"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:15
+msgid "**exp_s07**: Power vs coherent averaging"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:16
+msgid ""
+"**exp_s08**: Windowing functions comparison (Kaiser, Blackman-Harris, "
+"Hann, Hamming)"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:17
+msgid "**exp_s10**: Polar spectrum - thermal noise vs harmonic distortion"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:18
+msgid "**exp_s11**: Polar spectrum - static nonlinearity vs memory effect"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:19
+msgid "**exp_s12**: Polar spectrum - coherent averaging improvement"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:20
+msgid "**exp_s21**: Two-tone spectrum analysis with IMD products"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:21
+msgid "**exp_s22**: Two-tone IMD comparison (weak vs strong nonlinearity)"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:22
+msgid "**exp_s23**: Two-tone coherent averaging"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:24
+msgid "**Total Examples**: 14"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:29
+msgid "exp_s01_analyze_spectrum_simplest.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:31
+msgid "**Description**: Simplest example - analyze spectrum with minimal code."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:41
+msgid "exp_s02_analyze_spectrum_interactive.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:43
+msgid "**Description**: Interactive example - displays plot window."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:56
+msgid "exp_s03_analyze_spectrum_savefig.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:58
+msgid "**Description**: Save figure to file instead of displaying."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:80
+msgid "Basic spectrum analysis"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:85
+msgid "Basic FFT spectrum analysis with all key metrics"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:89
+msgid "exp_s04_sweep_dynamic_range.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:91
+msgid "**Description**: Sweep signal amplitude to characterize dynamic range."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:120
+msgid "Dynamic range sweep"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:125
+msgid "FFT metrics across input signal amplitudes (dynamic range sweep)"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:129
+msgid "exp_s05_annotating_spur.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:131
+msgid ""
+"**Description**: Annotate spur frequencies and demonstrate harmonic "
+"aliasing."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:151
+msgid "Spur annotation"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:156
+msgid "Spectrum with annotated fundamental, harmonics, and spurs"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:160
+msgid "exp_s06_sweeping_fft_and_osr.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:162
+msgid "**Description**: Compare FFT length vs OSR for improving spectrum quality."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:210
+msgid "exp_s07_spectrum_averaging.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:212
+msgid "**Description**: Compare power averaging vs coherent averaging."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:265
+msgid "Spectrum averaging comparison"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:270
+msgid "Power averaging vs coherent averaging for noise reduction"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:274
+msgid "exp_s08_windowing_deep_dive.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:276
+msgid "**Description**: Deep dive into window functions for different scenarios."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:348
+msgid ""
+"**Note**: Kaiser window shows SNR=150dB in short FFT scenario - this is a"
+" known edge case with very short FFT and wide windows."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:351
+msgid "Window function comparison - spectral leakage"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:356
+msgid "Comparing spectral leakage across different window functions"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:360
+msgid "exp_s10_polar_noise_and_harmonics.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:362
+msgid ""
+"**Description**: Polar plot comparison of thermal noise vs harmonic "
+"distortion."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:384
+msgid "Polar spectrum - noise vs harmonics"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:389
+msgid "Polar spectrum comparing thermal noise and harmonic distortion"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:393
+msgid "exp_s11_polar_memory_effect.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:395
+msgid "**Description**: Polar plot showing static vs dynamic nonlinearity."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:423
+msgid "exp_s12_polar_coherent_averaging.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:425
+msgid "**Description**: Polar plot demonstrating coherent averaging improvement."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:444
+msgid "Polar spectrum - coherent averaging improvement"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:449
+msgid "Polar spectrum demonstrating coherent averaging improvement"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:453
+msgid "exp_s21_analyze_two_tone_spectrum.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:455
+msgid "**Description**: Analyze two-tone spectrum with IMD products."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:470
+msgid "Two-tone spectrum analysis with IMD"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:475
+msgid "Two-tone spectrum showing fundamental tones and IMD products"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:479
+msgid "exp_s22_two_tone_imd_comparison.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:481
+msgid "**Description**: Compare weak vs strong nonlinearity effects on IMD."
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:497
+msgid "Two-tone IMD comparison"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:502
+msgid "Comparing IMD products with weak vs strong nonlinearity"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:506
+msgid "exp_s23_two_tone_spectrum_averaging.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_02_spectrum.rst:508
+msgid ""
+"**Description**: Two-tone coherent averaging (previously had documented "
+"bug, now fixed)."
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_03_generate_signals.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_03_generate_signals.po
new file mode 100644
index 0000000..e5d4e37
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_03_generate_signals.po
@@ -0,0 +1,139 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:2
+msgid "Expected Output: 03_generate_signals"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:4
+msgid ""
+"This document shows the expected console output and example figures from "
+"all examples in `python/src/adctoolbox/examples/03_generate_signals/`."
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:7
+msgid "Summary"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:9
+msgid ""
+"All examples in `03_generate_signals` demonstrate various signal "
+"generation capabilities:"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:11
+msgid "**exp_g01**: Thermal noise effects on signal quality (4 test cases)"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:12
+msgid "**exp_g03**: Quantization noise scaling (2-16 bits, 8 test cases)"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:13
+msgid "**exp_g04**: Jitter-induced SNR degradation (0.2-32 GHz, 8 test cases)"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:14
+msgid "**exp_g05**: Static nonlinearity harmonic distortion (4 sign combinations)"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:15
+msgid "**exp_g06**: Isolated nonlinearity effects (8 different types)"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:16
+msgid "**exp_g07**: Interference effects on spectrum (8 interference types)"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:18
+msgid ""
+"**Total Examples**: 6 **Total Test Cases**: 40 different signal "
+"conditions analyzed"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:24
+msgid "exp_g01_generate_signal_demo.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:26
+msgid "**Description**: Demonstrate thermal noise effect on signal spectrum."
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:54
+msgid "exp_g03_sweep_quant_bits.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:56
+msgid ""
+"**Description**: Sweep quantization bits to analyze how noise floor "
+"changes with ADC resolution."
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:79
+msgid "Quantization noise vs resolution"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:84
+msgid "SNR degradation due to quantization noise (2-16 bit resolution sweep)"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:88
+msgid "exp_g04_sweep_jitter_fin.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:90
+msgid ""
+"**Description**: Sweep input frequency to analyze sampling jitter impact "
+"on SNR."
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:112
+msgid "exp_g05_sweep_static_nonlin.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:114
+msgid ""
+"**Description**: Sweep static nonlinearity coefficients to analyze "
+"harmonic distortion."
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:130
+msgid "exp_g06_sweep_dynamic_nonlin.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:132
+msgid "**Description**: Compare isolated nonlinearity effects on ADC spectrum."
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:154
+msgid "exp_g07_sweep_interferences.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:156
+msgid ""
+"**Description**: Sweep different interference types to show effects on "
+"ADC spectrum."
+msgstr ""
+
+#: ../../source/examples/expected_output_03_generate_signals.rst:179
+msgid "---"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_04_debug_analog.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_04_debug_analog.po
new file mode 100644
index 0000000..c3158b0
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_04_debug_analog.po
@@ -0,0 +1,186 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:2
+msgid "Expected Output: 04_debug_analog"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:4
+msgid ""
+"This document shows the expected console output and example figures from "
+"all examples in `python/src/adctoolbox/examples/04_debug_analog/`."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:7
+msgid "Summary"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:9
+msgid ""
+"All examples in `04_debug_analog` demonstrate analog output analysis "
+"capabilities:"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:11
+msgid "**Total Examples**: 15"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:13
+msgid ""
+"**Categories**: - **Sine Fitting**: exp_a01 (4-parameter fitting) - "
+"**Error Analysis**: exp_a02-a04 (by value, by phase, jitter calculation) "
+"- **Harmonic Decomposition**: exp_a11-a12 (time domain and polar) - "
+"**Statistical Analysis**: exp_a21-a25 (PDF, spectrum, autocorrelation, "
+"envelope, comparison) - **Nonlinearity**: exp_a31-a32 (static "
+"nonlinearity fitting, INL/DNL) - **Phase Plane**: exp_a41-a42 (standard "
+"and error phase plane)"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:24
+msgid "exp_a01_fit_sine_4param.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:26
+msgid "**Description**: Basic 4-parameter sine fitting with noise."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:44
+msgid "exp_a02_analyze_error_by_value.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:46
+msgid "**Description**: Analyze ADC errors binned by input signal level."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:55
+msgid "exp_a03_analyze_error_by_phase.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:57
+msgid "**Description**: Decompose noise into AM/PM components vs signal phase."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:163
+msgid "exp_a04_jitter_calculation.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:165
+msgid "**Description**: Calculate jitter from spectrum analysis."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:197
+msgid "exp_a11_decompose_harmonics.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:199
+msgid "**Description**: Decompose signal into harmonics in time domain."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:208
+msgid "exp_a12_decompose_harmonics_polar.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:210
+msgid "**Description**: Decompose harmonics with polar phase visualization."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:219
+msgid "exp_a21_analyze_error_pdf.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:221
+msgid ""
+"**Description**: Analyze error probability density functions for various "
+"non-idealities."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:252
+msgid "exp_a22_analyze_error_spectrum.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:254
+msgid "**Description**: Analyze error spectrum for various non-idealities."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:264
+msgid "exp_a23_analyze_error_autocorrelation.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:266
+msgid "**Description**: Analyze error autocorrelation for various non-idealities."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:297
+msgid "exp_a24_analyze_error_envelope_spectrum.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:299
+msgid ""
+"**Description**: Analyze error envelope spectrum for various non-"
+"idealities."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:309
+msgid "exp_a25_spectra.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:311
+msgid "**Description**: Compare spectra across various non-idealities."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:342
+msgid "exp_a31_fit_static_nonlin.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:344
+msgid "**Description**: Fit static nonlinearity coefficients from sine wave."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:359
+msgid "exp_a32_inl_from_sine_sweep_length.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:361
+msgid "**Description**: Sweep data length for INL/DNL extraction from sine wave."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:377
+msgid "exp_a41_analyze_phase_plane.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:379
+msgid "**Description**: Analyze phase plane plots for various non-idealities."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:410
+msgid "exp_a42_analyze_error_phase_plane.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:412
+msgid ""
+"**Description**: Analyze error phase plane (1000x more sensitive for "
+"detecting harmonics)."
+msgstr ""
+
+#: ../../source/examples/expected_output_04_debug_analog.rst:452
+msgid "---"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_05_debug_digital.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_05_debug_digital.po
new file mode 100644
index 0000000..b693aa5
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_05_debug_digital.po
@@ -0,0 +1,119 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:2
+msgid "Expected Output: 05_debug_digital"
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:4
+msgid ""
+"This document shows the expected console output and example figures from "
+"all examples in `python/src/adctoolbox/examples/05_debug_digital/`."
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:7
+msgid "Summary"
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:9
+msgid ""
+"All examples in `05_debug_digital` demonstrate digital output analysis "
+"capabilities:"
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:11
+msgid "**Total Examples**: 7"
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:13
+msgid ""
+"**Categories**: - **Weight Calibration**: exp_d01-d03 (lite, full, "
+"redundancy comparison) - **Digital Debugging**: exp_d11-d14 (bit "
+"activity, ENOB sweep, weight scaling, overflow check)"
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:17
+msgid ""
+"**Key Features**: - Foreground calibration using sine waves - Redundancy "
+"analysis for pipeline ADCs - Bit-level activity monitoring - Weight and "
+"radix calculations - Overflow detection"
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:27
+msgid "exp_d01_cal_weight_sine_lite.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:29
+msgid "**Description**: Lightweight weight calibration using sine wave."
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:56
+msgid "exp_d02_cal_weight_sine.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:58
+msgid "**Description**: Full weight calibration with detailed analysis."
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:73
+msgid "exp_d03_redundancy_comparison.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:75
+msgid "**Description**: Compare calibration with and without redundancy."
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:89
+msgid "exp_d11_bit_activity.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:91
+msgid "**Description**: Check bit activity for digital debugging."
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:104
+msgid "exp_d12_sweep_bit_enob.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:106
+msgid "**Description**: Sweep bit count to find optimal ENOB."
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:117
+msgid "exp_d13_weight_scaling.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:119
+msgid "**Description**: Analyze weight scaling and radix calculations."
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:130
+msgid "exp_d14_overflow_check.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:132
+msgid "**Description**: Check for overflow in digital output codes."
+msgstr ""
+
+#: ../../source/examples/expected_output_05_debug_digital.rst:143
+msgid "---"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_06_use_toolsets.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_06_use_toolsets.po
new file mode 100644
index 0000000..71da263
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_06_use_toolsets.po
@@ -0,0 +1,154 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:2
+msgid "Expected Output: 06_use_toolsets"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:4
+msgid ""
+"This document shows the expected console output and example figures from "
+"all examples in `python/src/adctoolbox/examples/06_use_toolsets/`."
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:7
+msgid "Summary"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:9
+msgid ""
+"All examples in `06_use_toolsets` demonstrate comprehensive dashboard "
+"generation:"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:11
+msgid "**Total Examples**: 4"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:13
+msgid ""
+"**Categories**: - **Analog Output Dashboards**: exp_t01-t02 (single and "
+"batch, 12 tools per dashboard) - **Digital Output Dashboards**: "
+"exp_t03-t04 (single and batch, 6 tools per dashboard)"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:17
+msgid ""
+"**Analog Dashboard (12 Tools)**: 1. Spectrum 2. Spectrum Polar 3. Error "
+"by Value 4. Error by Phase 5. Decomposition Time 6. Decomposition Polar "
+"7. Error PDF 8. Error Autocorrelation 9. Error Spectrum 10. Error "
+"Envelope Spectrum 11. Phase Plane 12. Error Phase Plane"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:31
+msgid ""
+"**Digital Dashboard (6 Tools)**: 1. Spectrum: Nominal Weights 2. "
+"Spectrum: Calibrated Weights 3. Bit Activity 4. Overflow Check 5. ENOB "
+"Bit Sweep 6. Weight Radix"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:39
+msgid ""
+"**Key Features**: - Comprehensive all-in-one debugging dashboards - Batch"
+" processing for multiple test cases - 15 analog non-ideality types "
+"analyzed - 7 digital configuration types analyzed"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:48
+msgid "exp_t01_aout_dashboard_single.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:50
+msgid ""
+"**Description**: Generate a single comprehensive 12-tool analog output "
+"dashboard."
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:60
+msgid "exp_t02_aout_dashboard_batch.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:62
+msgid ""
+"**Description**: Generate batch of 15 comprehensive dashboards for "
+"different non-idealities."
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:121
+msgid "**Example Dashboard Figures:**"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:123
+msgid "Dashboard - Thermal Noise Analysis"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:128
+msgid "Thermal Noise: Comprehensive 12-tool analysis dashboard"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:130
+msgid "Dashboard - Jitter Noise Analysis"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:135
+msgid "Jitter Noise: Phase noise and timing jitter effects"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:137
+msgid "Dashboard - Static HD3 Distortion"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:142
+msgid "Static HD3 (-70 dBc): Third harmonic distortion analysis"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:144
+msgid "Dashboard - RA Dynamic Gain"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:149
+msgid "RA Dynamic Gain: Residue amplifier dynamic gain variation"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:153
+msgid "exp_t03_dout_dashboard_single.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:155
+msgid ""
+"**Description**: Generate a single comprehensive 6-tool digital output "
+"dashboard."
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:165
+msgid "exp_t04_dout_dashboard_batch.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:167
+msgid ""
+"**Description**: Generate batch of 7 digital output dashboards for "
+"different configurations."
+msgstr ""
+
+#: ../../source/examples/expected_output_06_use_toolsets.rst:210
+msgid "---"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_07_conversions.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_07_conversions.po
new file mode 100644
index 0000000..9c6bd3a
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/expected_output_07_conversions.po
@@ -0,0 +1,123 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/examples/expected_output_07_conversions.rst:2
+msgid "Expected Output: 07_conversions"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:4
+msgid ""
+"This document shows the expected console output and example figures from "
+"all examples in `python/src/adctoolbox/examples/07_conversions/`."
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:7
+msgid "Summary"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:9
+msgid ""
+"All examples in `07_conversions` demonstrate unit conversions and metric "
+"calculations:"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:11
+msgid "**exp_c01**: Aliasing and Nyquist zone calculations"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:12
+msgid ""
+"**exp_c02**: Comprehensive unit conversions (9 conversion categories with"
+" round-trip validation)"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:13
+msgid ""
+"**exp_c03**: ADC figure of merit calculations (Walden FOM, Schreier FOM, "
+"performance limits)"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:14
+msgid "**exp_c04**: Signal/noise amplitude to SNR conversions"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:15
+msgid "**exp_c05**: Noise spectral density (NSD) and SNR conversions"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:17
+msgid "**Total Examples**: 5"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:22
+msgid "exp_c01_aliasing_nyquist_zones.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:24
+msgid "**Description**: Demonstrate aliasing and Nyquist zone calculations."
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:33
+msgid "Aliasing within Nyquist zones"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:38
+msgid "Frequency aliasing visualization across multiple Nyquist zones"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:42
+msgid "exp_c02_unit_conversions.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:44
+msgid "**Description**: Comprehensive unit conversion utilities for ADC testing."
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:173
+msgid "exp_c03_calculate_fom.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:175
+msgid ""
+"**Description**: Calculate ADC figures of merit (Walden FOM, Schreier "
+"FOM, jitter-limited SNR, thermal noise-limited SNR)."
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:208
+msgid "exp_c04_amplitudes_to_snr.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:210
+msgid "**Description**: Convert signal/noise amplitudes to SNR metrics."
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:231
+msgid "exp_c05_convert_nsd_snr.py"
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:233
+msgid "**Description**: Convert between NSD and SNR metrics."
+msgstr ""
+
+#: ../../source/examples/expected_output_07_conversions.rst:242
+msgid "---"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/index.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/index.po
new file mode 100644
index 0000000..28f9202
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/examples/index.po
@@ -0,0 +1,105 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/examples/index.rst:46
+msgid "Expected Outputs by Category"
+msgstr ""
+
+#: ../../source/examples/index.rst:2
+msgid "Examples"
+msgstr ""
+
+#: ../../source/examples/index.rst:4
+msgid ""
+"ADCToolbox includes 51 ready-to-run examples organized into 6 categories."
+" This page demonstrates common use cases and analysis workflows."
+msgstr ""
+
+#: ../../source/examples/index.rst:7
+msgid "Getting the Examples"
+msgstr ""
+
+#: ../../source/examples/index.rst:9
+msgid "To copy all examples to your workspace:"
+msgstr ""
+
+#: ../../source/examples/index.rst:15
+msgid ""
+"This creates an ``adctoolbox_examples/`` directory with all examples "
+"organized by category."
+msgstr ""
+
+#: ../../source/examples/index.rst:18
+msgid "Running Examples"
+msgstr ""
+
+#: ../../source/examples/index.rst:20
+msgid ""
+"Navigate to the examples directory and run any example. Examples are "
+"organized by category:"
+msgstr ""
+
+#: ../../source/examples/index.rst:29
+msgid ""
+"All examples save their outputs (plots, data files) to an ``output/`` "
+"subdirectory within each category folder."
+msgstr ""
+
+#: ../../source/examples/index.rst:31
+msgid "**Category Folders:**"
+msgstr ""
+
+#: ../../source/examples/index.rst:33
+msgid "``02_spectrum/`` - Spectrum analysis examples"
+msgstr ""
+
+#: ../../source/examples/index.rst:34
+msgid "``03_generate_signals/`` - Signal generation examples"
+msgstr ""
+
+#: ../../source/examples/index.rst:35
+msgid "``04_debug_analog/`` - Analog output analysis examples"
+msgstr ""
+
+#: ../../source/examples/index.rst:36
+msgid "``05_debug_digital/`` - Digital output analysis examples"
+msgstr ""
+
+#: ../../source/examples/index.rst:37
+msgid "``06_use_toolsets/`` - Comprehensive dashboard examples"
+msgstr ""
+
+#: ../../source/examples/index.rst:38
+msgid "``07_conversions/`` - Conversion and metric calculation examples"
+msgstr ""
+
+#: ../../source/examples/index.rst:41
+msgid "Expected Outputs"
+msgstr ""
+
+#: ../../source/examples/index.rst:43
+msgid ""
+"For reference, the expected outputs from each example category are "
+"documented below. These documentation files show the console output, "
+"figures, and validation results you should expect when running each "
+"example."
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/index.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/index.po
new file mode 100644
index 0000000..9de0266
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/index.po
@@ -0,0 +1,102 @@
+# ADCToolbox 中文翻译
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: 2026-03-10 20:52+0800\n"
+"Last-Translator: ADCToolbox Contributors\n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/index.rst:8
+msgid "Contents:"
+msgstr "目录:"
+
+#: ../../source/index.rst:2
+msgid "ADCToolbox Documentation"
+msgstr "ADCToolbox 文档"
+
+#: ../../source/index.rst:4
+msgid ""
+"ADCToolbox is a comprehensive toolbox for ADC (Analog-to-Digital "
+"Converter) characterization and analysis, providing advanced tools for "
+"both analog output and digital output analysis."
+msgstr ""
+"ADCToolbox 是一个用于 ADC(模数转换器)表征与分析的综合工具箱,"
+"提供面向模拟输出和数字输出分析的高级工具。"
+
+#: ../../source/index.rst:21
+msgid "Features"
+msgstr "功能特性"
+
+#: ../../source/index.rst:23
+msgid ""
+"**Spectrum Analysis**: FFT-based analysis with ENOB, SNR, SFDR, THD, "
+"windowing, averaging, and polar visualization"
+msgstr ""
+"**频谱分析**:基于 FFT 的分析,支持 ENOB、SNR、SFDR、THD、"
+"加窗、平均和极坐标可视化"
+
+#: ../../source/index.rst:24
+msgid ""
+"**Signal Generation**: Thermal noise, jitter, quantization, "
+"static/dynamic nonlinearity, and interference modeling"
+msgstr ""
+"**信号生成**:热噪声、抖动、量化、静态/动态非线性及干扰建模"
+
+#: ../../source/index.rst:25
+msgid ""
+"**Analog Error Analysis**: Time-domain, frequency-domain, and statistical"
+" error characterization (PDF, autocorrelation, envelope spectrum)"
+msgstr ""
+"**模拟误差分析**:时域、频域和统计误差表征(概率密度函数、自相关、包络频谱)"
+
+#: ../../source/index.rst:26
+msgid ""
+"**Digital Calibration**: Bit-weighted ADC calibration and redundancy "
+"analysis"
+msgstr ""
+"**数字校准**:位权重 ADC 校准与冗余分析"
+
+#: ../../source/index.rst:27
+msgid ""
+"**Fundamental Utilities**: Sine fitting, frequency calculation, unit "
+"conversion, and FOM metrics"
+msgstr ""
+"**基础工具**:正弦拟合、频率计算、单位换算和品质因数指标"
+
+#: ../../source/index.rst:28
+msgid ""
+"**Oversampling Analysis**: Delta-Sigma modulator characterization, NTF "
+"analysis"
+msgstr ""
+"**过采样分析**:Delta-Sigma 调制器表征与噪声传递函数(NTF)分析"
+
+#: ../../source/index.rst:29
+msgid "**Comprehensive Examples**: 45 ready-to-run examples across 6 categories"
+msgstr "**丰富示例**:6 个类别共 45 个即用示例"
+
+#: ../../source/index.rst:32
+msgid "Quick Links"
+msgstr "快速链接"
+
+#: ../../source/index.rst:34
+msgid ":ref:`genindex`"
+msgstr ":ref:`genindex`"
+
+#: ../../source/index.rst:35
+msgid ":ref:`modindex`"
+msgstr ":ref:`modindex`"
+
+#: ../../source/index.rst:36
+msgid ":ref:`search`"
+msgstr ":ref:`search`"
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/installation.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/installation.po
new file mode 100644
index 0000000..7944da8
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/installation.po
@@ -0,0 +1,58 @@
+# ADCToolbox 中文翻译
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: 2026-03-10 20:52+0800\n"
+"Last-Translator: ADCToolbox Contributors\n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/installation.rst:2
+msgid "Installation"
+msgstr "安装"
+
+#: ../../source/installation.rst:4
+msgid "Install ADCToolbox from PyPI:"
+msgstr "从 PyPI 安装 ADCToolbox:"
+
+#: ../../source/installation.rst:11
+msgid "Upgrade"
+msgstr "升级"
+
+#: ../../source/installation.rst:13
+msgid "To upgrade an existing installation:"
+msgstr "升级已有安装:"
+
+#: ../../source/installation.rst:19
+msgid "To verify the installed version:"
+msgstr "验证已安装版本:"
+
+#: ../../source/installation.rst:26
+msgid "Requirements"
+msgstr "依赖要求"
+
+#: ../../source/installation.rst:28
+msgid "Python >= 3.10"
+msgstr "Python >= 3.10"
+
+#: ../../source/installation.rst:29
+msgid "NumPy >= 1.23.0"
+msgstr "NumPy >= 1.23.0"
+
+#: ../../source/installation.rst:30
+msgid "Matplotlib >= 3.6.0"
+msgstr "Matplotlib >= 3.6.0"
+
+#: ../../source/installation.rst:31
+msgid "SciPy >= 1.9.0"
+msgstr "SciPy >= 1.9.0"
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/python_matlab_parity.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/python_matlab_parity.po
new file mode 100644
index 0000000..ed17a3d
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/python_matlab_parity.po
@@ -0,0 +1,499 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/python_matlab_parity.rst:2
+msgid "Python vs MATLAB Parity"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:4
+msgid ""
+"This page tracks the functional parity between the Python ``adctoolbox`` "
+"package and the original MATLAB implementation. The goal is to keep both "
+"versions feature-equivalent."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:8
+msgid "Last updated: 2026-03-10"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:11
+msgid "Function Mapping"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:13
+msgid ""
+"The table below maps every MATLAB core function to its Python equivalent."
+" Legacy/deprecated MATLAB wrappers (e.g., ``sineFit`` → ``sinfit``) are "
+"omitted; only the current MATLAB name is listed."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:21
+#: ../../source/python_matlab_parity.rst:169
+msgid "MATLAB"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:22
+#: ../../source/python_matlab_parity.rst:170
+msgid "Python"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:23
+msgid "Status"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:24
+msgid "``plotspec``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:25
+msgid "``analyze_spectrum``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:26
+#: ../../source/python_matlab_parity.rst:29
+#: ../../source/python_matlab_parity.rst:32
+#: ../../source/python_matlab_parity.rst:35
+#: ../../source/python_matlab_parity.rst:38
+#: ../../source/python_matlab_parity.rst:41
+#: ../../source/python_matlab_parity.rst:44
+#: ../../source/python_matlab_parity.rst:47
+#: ../../source/python_matlab_parity.rst:50
+#: ../../source/python_matlab_parity.rst:53
+#: ../../source/python_matlab_parity.rst:56
+#: ../../source/python_matlab_parity.rst:59
+#: ../../source/python_matlab_parity.rst:62
+#: ../../source/python_matlab_parity.rst:65
+msgid "Matched"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:27
+msgid "``plotphase``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:28
+msgid "``analyze_spectrum_polar``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:30
+msgid "``sinfit``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:31
+msgid "``fit_sine_4param``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:33
+msgid "``findbin``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:34
+msgid "``find_coherent_frequency``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:36
+msgid "``findfreq``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:37
+msgid "``estimate_frequency``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:39
+msgid "``alias``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:40
+msgid "``fold_frequency_to_nyquist``, ``fold_bin_to_nyquist``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:42
+msgid "``tomdec``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:43
+msgid "``analyze_decomposition_time``, ``analyze_decomposition_polar``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:45
+msgid "``errsin``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:46
+msgid "``analyze_error_by_phase``, ``analyze_error_by_value``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:48
+msgid "``inlsin``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:49
+msgid "``analyze_inl_from_sine``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:51
+msgid "``wcalsin``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:52
+msgid "``calibrate_weight_sine``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:54
+msgid "``bitchk``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:55
+msgid "``analyze_overflow``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:57
+msgid "``plotwgt``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:58
+msgid "``analyze_weight_radix``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:60
+msgid "``ntfperf``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:61
+msgid "``ntf_analyzer``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:63
+msgid "``adcpanel``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:64
+msgid "``toolset/generate_aout_dashboard``, ``toolset/generate_dout_dashboard``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:66
+msgid "``cdacwgt``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:67
+#: ../../source/python_matlab_parity.rst:70
+#: ../../source/python_matlab_parity.rst:73
+#: ../../source/python_matlab_parity.rst:76
+msgid "*not implemented*"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:68
+#: ../../source/python_matlab_parity.rst:71
+#: ../../source/python_matlab_parity.rst:74
+#: ../../source/python_matlab_parity.rst:77
+msgid "**MATLAB only**"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:69
+msgid "``ifilter``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:72
+msgid "``perfosr``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:75
+msgid "``plotres``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:80
+msgid "MATLAB-Only Functions"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:82
+msgid "The following four MATLAB functions have **no Python equivalent** yet:"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:84
+msgid "``cdacwgt(cd, cb, cp)``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:85
+msgid ""
+"Calculate bit weights for a multi-segment capacitive DAC (CDAC) with "
+"bridge capacitors and parasitic capacitances. Returns normalized weights "
+"and total capacitance."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:89
+msgid "``ifilter(sigin, passband)``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:90
+msgid ""
+"Ideal FFT-based brickwall filter. Retains only the specified frequency "
+"bands from an input signal. Operates column-wise on matrices."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:93
+msgid "``perfosr(sig, ...)``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:94
+msgid ""
+"Sweep ADC performance (SNDR, SFDR, ENOB) versus oversampling ratio (OSR)."
+" Separates ideal signal from error via sine fitting, then re-evaluates "
+"metrics at narrowing bandwidths."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:98
+msgid "``plotres(sig, bits, ...)``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:99
+msgid ""
+"Plot partial-sum residuals of an ADC bit matrix. Scatter-plots residuals "
+"between bit stages to reveal correlations, nonlinearity patterns, and "
+"redundancy."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:104
+msgid "Python-Only Functions"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:106
+msgid ""
+"The following functions exist **only in the Python package** and have no "
+"MATLAB counterpart."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:110
+msgid "Spectrum"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:112
+msgid ""
+"``analyze_two_tone_spectrum`` — Two-tone FFT analysis with IMD2/IMD3 "
+"metrics."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:115
+msgid "Analog Error Analysis"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:117
+msgid "``analyze_error_pdf`` — Error probability density function via KDE."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:118
+msgid ""
+"``analyze_error_spectrum`` — Error spectrum computed from fitting "
+"residual."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:119
+msgid ""
+"``analyze_error_autocorr`` — Autocorrelation function (ACF) of error "
+"signal."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:120
+msgid ""
+"``analyze_error_envelope_spectrum`` — Envelope spectrum via Hilbert "
+"transform to reveal AM modulation patterns."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:122
+msgid ""
+"``fit_static_nonlin`` — Extract static nonlinearity coefficients (k2, k3)"
+" from a distorted sinewave."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:126
+msgid "Digital Output Analysis"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:128
+msgid ""
+"``analyze_bit_activity`` — Percentage of 1's per bit (DC offset / "
+"clipping detection)."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:130
+msgid "``analyze_enob_sweep`` — ENOB vs. number of calibration bits."
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:133
+msgid "Unit Conversions & Metrics"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:135
+msgid "These are small utilities that MATLAB users typically write inline:"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:137
+msgid "``db_to_mag``, ``mag_to_db``, ``db_to_power``, ``power_to_db``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:138
+msgid "``snr_to_enob``, ``enob_to_snr``, ``snr_to_nsd``, ``nsd_to_snr``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:139
+msgid "``lsb_to_volts``, ``volts_to_lsb``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:140
+msgid "``dbm_to_vrms``, ``vrms_to_dbm``, ``dbm_to_mw``, ``mw_to_dbm``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:141
+msgid "``sine_amplitude_to_power``, ``amplitudes_to_snr``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:142
+msgid "``bin_to_freq``, ``freq_to_bin``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:143
+msgid "``calculate_walden_fom``, ``calculate_schreier_fom``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:144
+msgid "``calculate_thermal_noise_limit``, ``calculate_jitter_limit``"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:147
+msgid "Signal Generation"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:149
+msgid ""
+"The Python ``siggen`` module provides a ``Nonidealities`` class for "
+"building realistic ADC test signals with chainable impairments. This has "
+"no MATLAB equivalent:"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:153
+msgid "Thermal noise, clock jitter, quantization noise"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:154
+msgid "Static nonlinearity (polynomial or harmonic-dB specification)"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:155
+msgid "Memory effect, incomplete sampling / settling"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:156
+msgid "Residue amplifier gain error (static and dynamic)"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:157
+msgid "Reference error (settling + droop)"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:158
+msgid "AM noise, AM tone, clipping, drift, glitch injection"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:159
+msgid "First-order noise shaping"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:162
+msgid "Summary"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:168
+msgid "Category"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:171
+msgid "Core analysis functions"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:172
+msgid "18"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:173
+msgid "43"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:174
+msgid "Matched across both"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:175
+#: ../../source/python_matlab_parity.rst:176
+msgid "14"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:177
+msgid "MATLAB-only"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:178
+msgid "4"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:179
+#: ../../source/python_matlab_parity.rst:181
+msgid "—"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:180
+msgid "Python-only"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:182
+msgid "29"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:183
+msgid "Signal generation module"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:184
+#: ../../source/python_matlab_parity.rst:190
+msgid "No"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:185
+msgid "Yes (``siggen``)"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:186
+msgid "Unit conversion utilities"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:187
+msgid "No (inline)"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:188
+msgid "Yes (20 functions)"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:189
+msgid "Two-tone analysis"
+msgstr ""
+
+#: ../../source/python_matlab_parity.rst:191
+msgid "Yes"
+msgstr ""
+
diff --git a/python/docs/source/locale/zh_CN/LC_MESSAGES/quickstart.po b/python/docs/source/locale/zh_CN/LC_MESSAGES/quickstart.po
new file mode 100644
index 0000000..17aff5b
--- /dev/null
+++ b/python/docs/source/locale/zh_CN/LC_MESSAGES/quickstart.po
@@ -0,0 +1,106 @@
+# ADCToolbox 中文翻译
+# Copyright (C) 2025, ADCToolbox Contributors
+# This file is distributed under the same license as the ADCToolbox package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ADCToolbox 0.5.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-03-10 20:52+0800\n"
+"PO-Revision-Date: 2026-03-10 20:52+0800\n"
+"Last-Translator: ADCToolbox Contributors\n"
+"Language: zh_CN\n"
+"Language-Team: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../source/quickstart.rst:2
+msgid "Quick Start Guide"
+msgstr "快速入门指南"
+
+#: ../../source/quickstart.rst:4
+msgid "This guide will help you get started with ADCToolbox quickly."
+msgstr "本指南帮助您快速上手 ADCToolbox。"
+
+#: ../../source/quickstart.rst:7
+msgid "Spectrum Analysis"
+msgstr "频谱分析"
+
+#: ../../source/quickstart.rst:9
+msgid "Analyze an ADC output spectrum:"
+msgstr "分析 ADC 输出频谱:"
+
+#: ../../source/quickstart.rst:42
+msgid "Expected output::"
+msgstr "预期输出::"
+
+#: ../../source/quickstart.rst:54
+msgid "Using Toolsets"
+msgstr "使用工具集"
+
+#: ../../source/quickstart.rst:57
+msgid "Analog Output Dashboard"
+msgstr "模拟输出仪表盘"
+
+#: ../../source/quickstart.rst:59
+msgid ""
+"Generate a comprehensive 12-panel diagnostic dashboard for analog ADC "
+"output:"
+msgstr "为模拟 ADC 输出生成包含 12 个面板的综合诊断仪表盘:"
+
+#: ../../source/quickstart.rst:89
+msgid ""
+"This generates a 3x4 panel dashboard with 12 diagnostic plots including "
+"spectrum analysis, error characterization (PDF, autocorrelation, "
+"spectrum), polar plots, and phase plane analysis."
+msgstr ""
+"生成一个 3×4 面板仪表盘,包含 12 个诊断图,涵盖频谱分析、"
+"误差表征(概率密度函数、自相关、频谱)、极坐标图和相平面分析。"
+
+#: ../../source/quickstart.rst:97
+msgid "Digital Output Dashboard"
+msgstr "数字输出仪表盘"
+
+#: ../../source/quickstart.rst:99
+msgid ""
+"Generate a comprehensive 6-panel diagnostic dashboard for digital ADC "
+"bits:"
+msgstr "为数字 ADC 位生成包含 6 个面板的综合诊断仪表盘:"
+
+#: ../../source/quickstart.rst:131
+msgid ""
+"This generates a 2x3 panel dashboard with 6 diagnostic plots including "
+"spectrum before/after calibration, bit activity, overflow detection, ENOB"
+" sweep, and weight radix visualization."
+msgstr ""
+"生成一个 2×3 面板仪表盘,包含 6 个诊断图,涵盖校准前后频谱、"
+"位活动、溢出检测、ENOB 扫描和位权重基数可视化。"
+
+#: ../../source/quickstart.rst:139
+msgid "Explore More Examples"
+msgstr "探索更多示例"
+
+#: ../../source/quickstart.rst:141
+msgid "**The best way to learn ADCToolbox is through the ready-to-run examples.**"
+msgstr "**学习 ADCToolbox 的最佳方式是运行即用示例。**"
+
+#: ../../source/quickstart.rst:143
+msgid "Download all examples in one command:"
+msgstr "一条命令下载所有示例:"
+
+#: ../../source/quickstart.rst:152
+msgid "Run your first examples:"
+msgstr "运行您的第一个示例:"
+
+#: ../../source/quickstart.rst:162
+msgid "All outputs are saved to the ``output/`` directory within each category."
+msgstr "所有输出保存到各类别的 ``output/`` 目录中。"
+
+#: ../../source/quickstart.rst:164
+msgid ""
+"Please refer to the :doc:`examples/index` for detailed instructions and "
+"expected outputs."
+msgstr "详细说明和预期输出请参阅 :doc:`examples/index`。"
diff --git a/python/docs/source/python_matlab_parity.rst b/python/docs/source/python_matlab_parity.rst
new file mode 100644
index 0000000..9007dca
--- /dev/null
+++ b/python/docs/source/python_matlab_parity.rst
@@ -0,0 +1,191 @@
+Python vs MATLAB Parity
+=======================
+
+This page tracks the functional parity between the Python ``adctoolbox`` package
+and the original MATLAB implementation. The goal is to keep both versions
+feature-equivalent.
+
+Last updated: 2026-03-10
+
+Function Mapping
+----------------
+
+The table below maps every MATLAB core function to its Python equivalent.
+Legacy/deprecated MATLAB wrappers (e.g., ``sineFit`` → ``sinfit``) are omitted;
+only the current MATLAB name is listed.
+
+.. list-table::
+ :header-rows: 1
+ :widths: 20 30 10
+
+ * - MATLAB
+ - Python
+ - Status
+ * - ``plotspec``
+ - ``analyze_spectrum``
+ - Matched
+ * - ``plotphase``
+ - ``analyze_spectrum_polar``
+ - Matched
+ * - ``sinfit``
+ - ``fit_sine_4param``
+ - Matched
+ * - ``findbin``
+ - ``find_coherent_frequency``
+ - Matched
+ * - ``findfreq``
+ - ``estimate_frequency``
+ - Matched
+ * - ``alias``
+ - ``fold_frequency_to_nyquist``, ``fold_bin_to_nyquist``
+ - Matched
+ * - ``tomdec``
+ - ``analyze_decomposition_time``, ``analyze_decomposition_polar``
+ - Matched
+ * - ``errsin``
+ - ``analyze_error_by_phase``, ``analyze_error_by_value``
+ - Matched
+ * - ``inlsin``
+ - ``analyze_inl_from_sine``
+ - Matched
+ * - ``wcalsin``
+ - ``calibrate_weight_sine``
+ - Matched
+ * - ``bitchk``
+ - ``analyze_overflow``
+ - Matched
+ * - ``plotwgt``
+ - ``analyze_weight_radix``
+ - Matched
+ * - ``ntfperf``
+ - ``ntf_analyzer``
+ - Matched
+ * - ``adcpanel``
+ - ``toolset/generate_aout_dashboard``, ``toolset/generate_dout_dashboard``
+ - Matched
+ * - ``cdacwgt``
+ - *not implemented*
+ - **MATLAB only**
+ * - ``ifilter``
+ - *not implemented*
+ - **MATLAB only**
+ * - ``perfosr``
+ - *not implemented*
+ - **MATLAB only**
+ * - ``plotres``
+ - *not implemented*
+ - **MATLAB only**
+
+MATLAB-Only Functions
+---------------------
+
+The following four MATLAB functions have **no Python equivalent** yet:
+
+``cdacwgt(cd, cb, cp)``
+ Calculate bit weights for a multi-segment capacitive DAC (CDAC) with bridge
+ capacitors and parasitic capacitances. Returns normalized weights and total
+ capacitance.
+
+``ifilter(sigin, passband)``
+ Ideal FFT-based brickwall filter. Retains only the specified frequency bands
+ from an input signal. Operates column-wise on matrices.
+
+``perfosr(sig, ...)``
+ Sweep ADC performance (SNDR, SFDR, ENOB) versus oversampling ratio (OSR).
+ Separates ideal signal from error via sine fitting, then re-evaluates metrics
+ at narrowing bandwidths.
+
+``plotres(sig, bits, ...)``
+ Plot partial-sum residuals of an ADC bit matrix. Scatter-plots residuals
+ between bit stages to reveal correlations, nonlinearity patterns, and
+ redundancy.
+
+Python-Only Functions
+---------------------
+
+The following functions exist **only in the Python package** and have no
+MATLAB counterpart.
+
+Spectrum
+^^^^^^^^
+
+- ``analyze_two_tone_spectrum`` — Two-tone FFT analysis with IMD2/IMD3 metrics.
+
+Analog Error Analysis
+^^^^^^^^^^^^^^^^^^^^^
+
+- ``analyze_error_pdf`` — Error probability density function via KDE.
+- ``analyze_error_spectrum`` — Error spectrum computed from fitting residual.
+- ``analyze_error_autocorr`` — Autocorrelation function (ACF) of error signal.
+- ``analyze_error_envelope_spectrum`` — Envelope spectrum via Hilbert transform
+ to reveal AM modulation patterns.
+- ``fit_static_nonlin`` — Extract static nonlinearity coefficients (k2, k3) from
+ a distorted sinewave.
+
+Digital Output Analysis
+^^^^^^^^^^^^^^^^^^^^^^^
+
+- ``analyze_bit_activity`` — Percentage of 1's per bit (DC offset / clipping
+ detection).
+- ``analyze_enob_sweep`` — ENOB vs. number of calibration bits.
+
+Unit Conversions & Metrics
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+These are small utilities that MATLAB users typically write inline:
+
+- ``db_to_mag``, ``mag_to_db``, ``db_to_power``, ``power_to_db``
+- ``snr_to_enob``, ``enob_to_snr``, ``snr_to_nsd``, ``nsd_to_snr``
+- ``lsb_to_volts``, ``volts_to_lsb``
+- ``dbm_to_vrms``, ``vrms_to_dbm``, ``dbm_to_mw``, ``mw_to_dbm``
+- ``sine_amplitude_to_power``, ``amplitudes_to_snr``
+- ``bin_to_freq``, ``freq_to_bin``
+- ``calculate_walden_fom``, ``calculate_schreier_fom``
+- ``calculate_thermal_noise_limit``, ``calculate_jitter_limit``
+
+Signal Generation
+^^^^^^^^^^^^^^^^^
+
+The Python ``siggen`` module provides a ``Nonidealities`` class for building
+realistic ADC test signals with chainable impairments. This has no MATLAB
+equivalent:
+
+- Thermal noise, clock jitter, quantization noise
+- Static nonlinearity (polynomial or harmonic-dB specification)
+- Memory effect, incomplete sampling / settling
+- Residue amplifier gain error (static and dynamic)
+- Reference error (settling + droop)
+- AM noise, AM tone, clipping, drift, glitch injection
+- First-order noise shaping
+
+Summary
+-------
+
+.. list-table::
+ :header-rows: 1
+ :widths: 30 10 10
+
+ * - Category
+ - MATLAB
+ - Python
+ * - Core analysis functions
+ - 18
+ - 43
+ * - Matched across both
+ - 14
+ - 14
+ * - MATLAB-only
+ - 4
+ - —
+ * - Python-only
+ - —
+ - 29
+ * - Signal generation module
+ - No
+ - Yes (``siggen``)
+ * - Unit conversion utilities
+ - No (inline)
+ - Yes (20 functions)
+ * - Two-tone analysis
+ - No
+ - Yes
diff --git a/python/pyproject.toml b/python/pyproject.toml
index 70909c0..3393d35 100644
--- a/python/pyproject.toml
+++ b/python/pyproject.toml
@@ -24,6 +24,7 @@ docs = [
"sphinx-rtd-theme>=2.0.0",
"sphinx-autodoc-typehints>=1.24.0",
"myst-parser>=2.0.0",
+ "sphinx-intl",
]
[tool.setuptools]