夜雨聆风学习资料网

ARTICLE · 946019

数字 AGC(自动增益控制)模块设计文档

数字 AGC(自动增益控制)模块设计文档

数字 AGC(自动增益控制)模块设计文档

1 概述

本模块为 IQ 信号处理链的前端数字自动增益控制(AGC),将动态范围较大的 ADC 输出压缩到稳定的有效位范围,为下游电平检测提供一致的输入电平。

| 项目 | 内容 |

|------|------|

| 输入 | 16-bit signed IQ 数据(I/Q 双路) |

| 输入有效位范围 | 6 ~ 14 位 |

| 输出 | 16-bit signed IQ 数据(I/Q 双路) |

| 输出有效位范围 | 9 ~ 13 位(死区) |

| 控制结构 | 闭环(测输出→调增益) |

| 增益实现 | 桶式移位(粗调)+ 分数增益乘法(细调) |

| 语言 / 工具 | VHDL / Vivado 2018.3 + MATLAB R2023b |

2 设计需求

- 输入 IQ 信号幅度随 ADC 前端条件在 6~14 位有效位之间波动;

- 需通过 AGC 使输出稳定在 9~13 位有效位,避免弱信号精度不足、强信号削波;

- I/Q 两路必须共用同一增益,保持复信号相位不失真;

- 闭环收敛:自动、无振荡,响应速度可控。

3 有效位 ↔ 幅度对照

16-bit signed 数据:有效位 = MSB(幅度) + 1(含符号位):

| 有效位 | 峰值幅度范围 | 对应 dBFS |

| 6 位(输入下限) | 32 ~ 63 | ~ -60 dB |

| 9 位(输出下限) | 256 ~ 511 | ~ -42 dB |

| 11 位(目标) | 1024 ~ 2047 | ~ -30 dB |

| 13 位(输出上限) | 4096 ~ 8191 | ~ -18 dB |

| 14 位(输入上限) | 8192 ~ 16383 | ~ -12 dB |

4 系统架构

- **前向数据通路**(固定 2 周期延迟):桶式移位→分数增益乘法。

- **反馈环**(慢环,不阻塞数据流):αβ幅度估计→滑动平均→每窗口触发一次增益更新。

5 增益模型

G = 2^shift × frac/256

| 分量 | 类型 | 范围 | 说明 |

| `shift` | 6-bit signed | -16 ~ +15 | 粗调,6 dB/位,闭环自动 |

| `frac` | 9-bit unsigned(Q1.8) | 256 ~ 511 | 细调,256=1.0,可配置固定 |

6 关键算法

6.1 桶式移位器(算术移位 + 饱和)

- `shift > 0`:`data << shift`,饱和到±32767。

- `shift < 0`:`data >> |shift|`(算术右移,保持符号)。

6.2 分数增益乘法器

out = (scaled × frac) >> 8-- 饱和到 16-bit signed

16-bit × 10-bit = 26-bit signed,`>>8`后饱和到 16-bit。最大 32767×511 < 2^24,不溢出。

6.3 增益更新(一步到位比例式控制)

每窗口 `avg_valid` 脉冲触发一次:

eff_bits = MSB(avg_mag) + 1

eff_bits > 13 : shift -= (eff_bits - 11)# 衰减到目标

eff_bits < 9: shift += (11 - eff_bits)# 放大到目标

否则: 保持(死区)

7 模块划分

| 文件 | 作用 | 状态 |

| `iq_agc.vhd` | AGC 顶层(移位+乘法+状态机) | 新 |

| `iq_magnitude_approx.vhd` | αβ幅度估计(复用,不改) | 已有 |

| `iq_level_detector.vhd` | 顶层(集成 AGC + dBFS LUT + 告警) | 修改 |

| `iq_agc_tb.vhd` | AGC 单元测试 | 新 |

| `iq_level_detector_tb.vhd` | 集成测试(AGC 开) | 新 |

| `iq_level_detector_tb_bypass.vhd` | 集成测试(AGC 关,直通) | 新 |

| `iq_agc_sim.m` | MATLAB 算法验证 | 新 |

8 接口定义(iq_agc)

generic

| 参数 | 默认值 | 说明 |

|------|--------|------|

| `AVG_SHIFT` | 10 | 滑动窗口 = 2^AVG_SHIFT 样本 |

| `LOW_BITS` | 9 | 死区下限(有效位) |

| `HIGH_BITS` | 13 | 死区上限(有效位) |

| `TARGET_BITS` | 11 | 目标有效位(死区中心) |

| `INIT_SHIFT` | 0 | 初始粗调移位 |

| `INIT_FRAC` | 256 | 初始分数增益(1.0) |

port

| 信号 | 方向 | 类型 | 说明 |

|------|------|------|------|

| `clk` / `rst_n` | in | std_logic | 时钟/复位(低有效) |

| `i_data` / `q_data` | in | signed(15:0) | 输入 IQ |

| `data_valid` | in | std_logic | 输入有效 |

| `i_out` / `q_out` | out | signed(15:0) | 输出 IQ |

| `out_valid` | out | std_logic | 输出有效 |

| `gain_shift` | out | signed(5:0) | 调试:当前粗调移位 |

| `gain_frac` | out | unsigned(8:0) | 调试:当前分数增益 |

9 集成到 iq_level_detector

顶层新增 generic:

| 参数 | 默认 | 说明 |

|------|------|------|

| `ENABLE_AGC` | true | AGC 开关 |

| `AGC_AVG_SHIFT` | 10 | AGC 窗口 |

| `AGC_LOW/HIGH/TARGET_BITS` | 9/13/11 | AGC 死区与目标 |

数据流:`i_data/q_data → [AGC] →幅度估计→滑动平均→ dBFS LUT →电平输出`。

`ENABLE_AGC = false` 时自动直通,保持原行为。

10 dBFS LUT 与告警门限(匹配 AGC)

- **dBFS LUT**:预计算 256 条目常量表(Q4.4 定点,12-bit signed),范围 -96 ~ +6 dBFS,`avg_mag(15:8)` 索引。

- **告警门限**(线性幅度,匹配 9/13 位边界):

- `OVERLOAD_THRESH = 8192`(超过 13 位→告警)

- `UNDERLOAD_THRESH = 256`(低于 9 位→告警)

11 验证结果

11.1 MATLAB 算法验证(5 阶段全 PASS)

| 阶段 | 输入幅度 | 稳态输出幅度 | 有效位 | 结果 |

|------|---------|-------------|--------|------|

| 弱信号 | 32 | 2014 | 11 位 | PASS |

| 强信号 | 8192 | 2015 | 11 位 | PASS |

| 界内 | 1000 | 1968 | 11 位 | PASS |

| 阶跃→强 | 8192 | 2015 | 11 位 | PASS |

| 阶跃→弱 | 32 | 2014 | 11 位 | PASS |

11.2 VHDL 仿真(xvhdl/xelab/xsim)

11.2.1 **AGC 单元测试**:

| 阶段 | 输入幅度 | gain_shift | 结果 |

|------|---------|-----------|------|

| 弱信号 | 32 | +6 | 放大 64× ✓ |

| 强信号 | 8192 | -3 | 衰减 8× ✓ |

| 界内 | 1000 | +1 | 基本保持✓ |

| 阶跃→强 | 8192 | -2 | 衰减✓ |

| 阶跃→弱 | 32 | +5 | 放大✓ |

11.2.2 **集成测试(AGC 开)**:

| 阶段 | 输入 | level_magnitude | level_dbfs | 告警 |

|------|------|----------------|-----------|------|

| 弱信号 | 32 | 2021(11位) | -24.6 dB | 无 |

| 强信号 | 8192 | 1011(10位) | -31.3 dB | 无 |

11.2.3 **集成测试(AGC 关,直通)**:

| 阶段 | 输入 | level_magnitude | level_dbfs | 告警 |

|------|------|----------------|-----------|------|

| 强信号 | 8192 | 8091(14位) | -12.1 dB | 无 |

| 弱信号 | 32 | 31(6位) | -96 dB | underload=1 |

数字 AGC(自动增益控制)模块设计文档.rar

数字 AGC(自动增益控制)-matlab.rar

数字 AGC(自动增益控制)-VHDL-prj.rar

相关学习资料