🧱 一、下变频(DDC)总体结构
典型的 FPGA 下变频链路:
高速 ADC 数据 → 直数字本振 NCO → 数控混频 → CIC 滤波(大抽 decimation) → 可选:补偿 FIR → 后级处理
📌 二、ADC 数据下变频原理(Mixing)
高速 ADC 采样通常在几十 MHz~数百 MHz。为了在 FPGA 中方便处理,需要把信号从 射频/中频 下变频到基带(I/Q)。
1. NCO(Direct Digital Synthesizer)
NCO 产生本振信号:
cos(2πfLOn/Fs),sin(2πfLOn/Fs)
FPGA 中由:
- 相位累加器(Phase Accumulator)
- 相位到幅度查找表(LUT)或 CORDIC
构成。
2. 数控混频(Multiplier)
输入为 ADC 实数信号 (x[n]),混频后得到:
I[n]=x[n]cos(ωLOn)
Q[n]=x[n]sin(ωLOn)
混频结构图(示意图)
┌────────┐
ADC x[n] →──→│ Mult x Cos ───────→ I branch
└────────┘
┌────────┐
│ Mult x Sin ───────→ Q branch
└────────┘
↑ ↑
│ │
Sin Cos
←─── NCO (Phase Accumulator) ───→
🚰 三、CIC 滤波实现原理(用于大抽 decimation)
CIC(Cascaded Integrator Comb)非常适合 FPGA 做大抽 decimation,不需要系数乘法器,硬件代价极低。
1. CIC 结构图(R 倍抽取)
CIC 包含:
- N 级积分器 Integrator
- 抽取 Decimate by R
- N 级梳状滤波器 Comb
图示如下:
┌─────────┐ (Integrator1)
I/Q →──→│ Integr1 │→
├─────────┤
│ Integr2 │→
├─────────┤ ┌──────────┐ (after decimation)
│ ... │→──R→│ Comb1 │→
├─────────┤ ├──────────┤
│ IntegrN │→ │ Comb2 │→
└─────────┘ └──────────┘
2. 积分器(Integrator)
递推公式:
y[n]=y[n−1]+x[n]
每个采样都要累加 → 时钟频率等于 ADC 采样率。
3. 抽取(Decimation)
每 R 个采样只取 1 个进入 Comb。
4. 梳状滤波器(Comb)
差分公式:
y[n]=x[n]−x[n−M]
通常延时 M=1(最简单)。
5. CIC 数据位宽增长
CIC 内部位宽增长公式:
Bout=Bin+N⋅log2(R)
例:
输入 16bit,N=3,R=32
→ 增长: (3 × 5 = 15)bit
输出需至少 31bit。
🌞 四、Xilinx FPGA 中的 DDC + CIC 实现方式
你可以用两种方式:
方式 A:使用官方 IP(强烈推荐)
1. 下变频:使用 DDC Compiler 或 DDS + Multiplier
Vivado 提供:
- Xilinx DDS Compiler
- Xilinx Multiplier (DSP48)
- Complex Multiplier IP
搭起来就可以得到 I/Q 基带信号。
2. CIC 滤波:使用 CIC Compiler IP
Vivado 的 CIC Compiler 支持:
- Integrator/Comb 级数配置
- 抽取倍数 R
- 输入输出位宽
- Automatic bit growth
- 接口可选 AXI-Stream
图示(示意图):
I/Q stream ----> [ CIC Compiler ] ------> Decimated I/Q stream
方式 B:手写 RTL 实现(适合 FPGA 工程师)
1. NCO 实现
verilog
reg [31:0] phase_acc;
always @(posedge clk) begin
phase_acc <= phase_acc + phase_step; // 控制输出频率
end
wire [15:0] cos_lut = cos_rom[phase_acc[31:20]];
wire [15:0] sin_lut = sin_rom[phase_acc[31:20]];
2. 混频实现(占用 DSP48)
verilog
assign I = adc_data * cos_lut;
assign Q = adc_data * sin_lut;
3. CIC 积分器实现
verilog
reg signed [47:0] integrator1;
always @(posedge clk) begin
integrator1 <= integrator1 + I;
end
多级 integrator 串联即可。
4. 抽取(使用计数器)
verilog
reg [5:0] deci_cnt;
always @(posedge clk) begin
if(deci_cnt == R-1) begin
deci_cnt <= 0;
I_deci <= integratorN;
end else
deci_cnt <= deci_cnt + 1;
end
5. Comb 实现
verilog
reg signed [47:0] comb_delay;
always @(posedge clk_decimated) begin
comb_out <= I_deci - comb_delay;
comb_delay <= I_deci;
end
📘 五、完整下变频链路图
┌──────────┐
ADC Data ─────→ │ NCO │ ───┐
└──────────┘ │cos
│
┌──────────┐ │
ADC Data ─────→ │ Multiplier │──┼──► I (Baseband)
└──────────┘ │
│sin
┌──────────┐ │
ADC Data ─────→ │ Multiplier │──┘──► Q (Baseband)
└──────────┘
┌─────────────────────────────┐
│ CIC Decimation │
│ (N integrators -> R deci -> Comb)
└─────────────────────────────┘
↓
Decimated I/Q Signal
🎯 六、参数设计建议(工程经验)
| 项目 | 建议值 |
|---|---|
| CIC 级数 N | 3~5(常用 3) |
| 抽取倍数 R | 根据带宽,例如 32/64 |
| NCO LUT 位宽 | 10~12 bit |
| Mixer 输出位宽 | ≥ 16+12=28 bit |
| CIC 输出位宽 | 自动 bit growth 后截位 |