当前位置:首页 > EDA > 电子设计自动化
[导读]在软件无线电(SDR)和雷达接收机中,数字下变频(DDC)是连接高速ADC与基带处理的关键桥梁。其核心任务是将高频宽带信号搬移到基带,并降低数据率。本文将详解如何利用NCO(数控振荡器)生成正交载波,并结合CORDIC(坐标旋转数字计算机)算法,在FPGA中实现高效、高精度的数字混频。



在软件无线电(SDR)和雷达接收机中,数字下变频(DDC)是连接高速ADC与基带处理的关键桥梁。其核心任务是将高频宽带信号搬移到基带,并降低数据率。本文将详解如何利用NCO(数控振荡器)生成正交载波,并结合CORDIC(坐标旋转数字计算机)算法,在FPGA中实现高效、高精度的数字混频。


一、DDC架构:NCO + 混频器 + CORDIC


典型的数字下变频链路如下:

ADC → DDC → CIC/FIR抽取滤波 → 基带数据


其中,DDC的核心由两部分组成:

1.  NCO(Numerically Controlled Oscillator):生成高精度、正交的数字本振信号(sinωt 和 cosωt)。

2.  混频器(Mixer):将ADC输入信号与NCO输出相乘,实现频谱搬移。

3.  CORDIC(可选但推荐):当NCO直接输出sin/cos查找表时,CORDIC可用于相位微调或在资源受限时进行坐标变换。


二、NCO设计:相位累加器与查找表


NCO是DDC的“心脏”,其频率精度和杂散性能直接决定DDC质量。


1. 相位累加器原理


NCO通过一个频率控制字(FTW)不断累加相位。

• FTW(Frequency Tuning Word):FTW = (Desired_Frequency * 2^N) / Sampling_Frequency


• 相位:phase_acc = (phase_acc + FTW) mod 2^N


2. Verilog实现(简化版)


module nco_generator #(

   parameter PHASE_WIDTH = 32,

   parameter OUTPUT_WIDTH = 16

)(

   input  wire        clk,

   input  wire        rst_n,

   input  wire [PHASE_WIDTH-1:0] ftw, // 频率控制字

   output wire [OUTPUT_WIDTH-1:0] sin_out,

   output wire [OUTPUT_WIDTH-1:0] cos_out

);

   reg [PHASE_WIDTH-1:0] phase_acc;

   

   // 相位累加器

   always @(posedge clk or negedge rst_n) begin

       if (!rst_n) begin

           phase_acc <= {PHASE_WIDTH{1'b0}};

       end else begin

           phase_acc <= phase_acc + ftw;

       end

   end


   // 查找表(LUT)实现 sin/cos

   // 实际工程中通常使用ROM或Altera/Xilinx的IP核

   // 此处仅为逻辑示意

   assign sin_out = lookup_sin(phase_acc[PHASE_WIDTH-1:PHASE_WIDTH-16]);

   assign cos_out = lookup_cos(phase_acc[PHASE_WIDTH-1:PHASE_WIDTH-16]);


endmodule


关键点:为了获得纯净的频谱,NCO的LUT深度通常很大(如2^12或2^14),且需要使用相位抖动(Dithering)技术来抑制相位截断带来的杂散。


三、CORDIC算法:替代乘法器的混频方案


传统的DDC混频需要两个高速乘法器(I = ADC  cos, Q = ADC  sin)。在极高采样率下,乘法器资源消耗巨大。CORDIC算法通过迭代移位和加减法来实现旋转,仅需一个加法器和移位器。


1. CORDIC在DDC中的角色


CORDIC可以接收ADC数据和NCO的相位信息,直接计算出I/Q分量,或者在NCO之后作为坐标旋转模块,修正本振的相位误差。


2. CORDIC迭代核心(Verilog伪代码)


// CORDIC迭代核心(旋转模式)

// x_{i+1} = x_i - d_i * (y_i >> i)

// y_{i+1} = y_i + d_i * (x_i >> i)

// z_{i+1} = z_i - d_i * atan_lut[i]

// d_i = sign(z_i)


reg signed [31:0] x, y, z;

reg signed [31:0] atan_lut [0:15]; // 预存atan(2^-i)


always @(posedge clk) begin

   if (i < ITERATIONS) begin

       // 根据z的符号决定旋转方向

       if (z[31]) begin // z < 0

           x <= x + (y >>> i);

           y <= y - (x >>> i);

           z <= z + atan_lut[i];

       end else begin

           x <= x - (y >>> i);

           y <= y + (x >>> i);

           z <= z - atan_lut[i];

       end

       i <= i + 1;

   end

end


优势:相比直接乘法,CORDIC在FPGA中消耗的DSP Slice更少,且易于流水线化,适合超宽带DDC设计。


四、NCO与CORDIC的配合策略


1. 方案一:经典混频(NCO + 乘法器)


• 流程:NCO输出sin/cos → 分别与ADC数据相乘 → 得到I/Q。


• 适用:中频采样率(<500MSPS),FPGA资源丰富。


2. 方案二:CORDIC直接解调(推荐高性能)


• 流程:NCO仅输出相位 → ADC数据与相位一起送入CORDIC核 → CORDIC直接输出I/Q。


• 优势:省去两个大型乘法器,时序收敛更容易。


• 注意:需要将ADC数据看作直角坐标系的一个点(X=ADC, Y=0),然后通过CORDIC旋转-θ(NCO相位)来得到基带信号。


五、调试与避坑指南


1.  频谱泄露:DDC后的I/Q信号若不经滤波直接观察,会有直流偏移。务必在DDC后级联CIC或FIR滤波器。

2.  NCO杂散:如果NCO的LUT深度不够,会在输出频谱上看到明显的杂散点。解决方法是增加LUT深度或使用相位抖动。

3.  CORDIC增益:CORDIC迭代会产生一个固定的增益(K ≈ 1.64676)。在后级处理中,必须乘以1/K进行归一化,否则信号幅度会衰减。

4.  位宽增长:CORDIC迭代过程中,数据位宽会逐渐增加,需要在迭代中途或结束时进行截位,以匹配后续滤波器输入位宽。


六、结语


在FPGA中实现高性能DDC,关键在于NCO的频率纯度与混频结构的资源效率。对于追求极致性能的系统,采用“NCO生成相位 + CORDIC进行坐标旋转”的方案,可以在不牺牲SFDR(无杂散动态范围)的前提下,显著降低FPGA的资源占用,是实现宽带数字下变频的理想选择。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在FPGA上构建RISC-V SoC时,从复位向量到串口打印“Hello World”的启动流程,是验证软核能否“自主呼吸”的关键。本文将基于常见的PicoRV32或VexRiscv软核,详解从硬件复位到软件驱动的完整链...

关键字: RISC-V FPGA

在FPGA高速数据流设计中,AXI4-Stream(AXIS)是连接DMA、DSP和视频IP的“血管”。但很多工程师只关注TDATA和TLAST,却忽略了TKEEP信号,导致在非对齐数据传输时出现数据错位、CRC校验失败...

关键字: FPGA AXI4-Stream协议

在FPGA开发中,Vivado HLS(High-Level Synthesis)是将C/C++算法转化为硬件IP核的利器。然而,未经优化的C代码综合后往往性能低下。流水线(Pipelining)是打破顺序执行瓶颈、将吞...

关键字: Vivado HLS C++ FPGA

在异构计算与高速数据采集领域,PCIe Gen3 x4 提供了接近 4GB/s 的理论带宽,是连接 FPGA 与 CPU 的“高速公路”。对于大多数开发者而言,XDMA(DMA/Bridge Subsystem for...

关键字: FPGA PCIe 异构计算

在FPGA开发中,时钟域交叉(CDC)是导致亚稳态和数据错乱的“头号杀手”。当信号从clk_a跨越到异步的clk_b时,若处理不当,轻则数据跳变,重则系统死锁。本文将对比4种最核心的CDC方案,帮你从“能用”进阶到“可靠...

关键字: FPGA CDC 时钟域交叉

在工业伺服驱动与多轴运动控制系统中,EtherCAT凭借其纳秒级同步精度成为主流。为了兼顾协议处理效率与复杂控制算法的实时性,“FPGA(ESC)+ MCU(应用)”的双核架构已成为高性能从站设计的标准范式。本文将深入探...

关键字: 工业总线协议 EtherCAT FPGA

在本教程中,我将展示如何创建并使用适用于 Zynq Ultrascale+ XCZU4EV 中 GTH 传输器的示例项目。

关键字: 处理器 收发器 FPGA

另一个重要的学习要点是理解 Zynq 设备的系统级行为。由于该设计依赖于处理系统来提供时钟,因此必须对处理系统进行初始化,以便可编程逻辑能够正常运行。

关键字: LED FPGA AUP-ZU3

为回馈广大开发者长期以来的支持,米尔电子将在本次展会现场举办福利活动,限时免费赠送15套MYD-YM90G开发板。诚邀各位行业伙伴与技术爱好者前往展台了解详情并参与领取。

关键字: FPGA 开发板

在FPGA设计流程中,布局布线阶段往往是决定设计成败的关键环节。特别是对于Xilinx UltraScale+这类高端器件,资源密度高、时钟网络复杂、时序要求严格,传统的实现策略往往难以满足高性能需求。Vivado De...

关键字: Xilinx UltraScale+ Smart Exploration FPGA
关闭