您描述的操作是数字接收机中的一种高效实现方案,其核心目的是 利用CORDIC算法直接完成数字下变频(DDC)中的复数混频(频率搬移)和相位旋转功能。将DDC的频率控制字配置作为CORDIC旋转的初始角度是整个设计的关键。
以下是这种操作的目的、作用和工作原理的详细解释:
核心目的:实现高效、精确的数字下变频(DDC)
- DDC的任务是将射频(RF)或中频(IF)的数字化信号(I/Q数据)的中心频率搬移到零频(基带),以便进行后续的低通滤波和低速率处理(如解调)。
- 传统DDC使用数字混频器(乘法器)将输入I/Q信号与数字本振(NCO生成的正弦/余弦)相乘来实现频谱搬移。
- 本方案的精髓在于:它用CORDIC算法替代了传统的复数乘法器来实现混频和相位旋转。
CORDIC 的角色:复数旋转器
- CORDIC 算法最擅长的就是计算向量旋转(或相位旋转)。
- 将一个复数
I_in + jQ_in
乘以一个单位复数e^(jθ) = cosθ + jsinθ
的效果,等价于 将原始复数向量(I_in, Q_in)
在复平面上旋转角度θ
。 - 复数乘法 (I_in + jQ_in) * (cosθ + jsinθ) 等价于将向量 (I_in, Q_in) 旋转角度 θ。
因此,CORDIC 可以直接用来实现复数混频器,替代传统的乘法器结构。输入是 (I_in, Q_in),旋转角度 θ 由 NCO 提供(即相位累加器的当前输出值 Φ),输出就是下变频后的基带信号 (I_out, Q_out)。
* 这正是混频所需的操作! 如果 θ
是随时间线性递增的角度(θ[n] = 2π * f_lo * n * Ts
,其中 f_lo
是目标下变频的本振频率,Ts
是采样周期),那么CORDIC的连续旋转操作就实现了输入信号频谱在频率轴上平移 -f_lo
的效果。
- 频率控制字作为初始角度的意义:驱动相位旋转
- 频率控制字(FTW) 是控制数字下变频目标频率(本振频率
f_lo
)的关键参数。它决定了NCO(数字控制振荡器)相位累加器的步进步长。 - 相位累加器 是NCO的核心。每个时钟周期,它在其当前相位值上累加一次FTW:
Φ[n+1] = (Φ[n] + FTW) mod 2^N
。 - 相位累加器的输出
Φ[n]
就是当前时刻n
的本振相位值(以数字量表示,范围0
到2π
)。
- 频率控制字(FTW) 是控制数字下变频目标频率(本振频率
此处,需要详细解释一下:
在数字接收机(特别是使用直接数字频率合成/DDFS或数控振荡器/NCO的系统中),频率控制字(FTW - Frequency Tuning Word)累加到相位累加器的过程,本质上就是通过积分(累加)将频率信息转换为相位信息。这是数字信号处理中生成正弦/余弦波(本振信号)的核心原理。
以下是详细解释:
频率与相位的数学关系(核心基础):
- 一个理想的余弦波信号可以表示为:
s(t) = cos(θ(t))
- 其中
θ(t)
就是相位,它是时间的函数。 - 瞬时角频率
ω(t)
定义为相位对时间的导数:
ω(t) = dθ(t)/dt
- 反过来,相位
θ(t)
就是瞬时角频率ω(t)
对时间的积分:
θ(t) = ∫ ω(τ) dτ + θ₀
(从 0 积分到 t,θ₀
是初始相位)
- 一个理想的余弦波信号可以表示为:
离散化(数字域实现):
- 在数字系统中,时间是离散的,以系统时钟周期
T_clk = 1 / f_clk
为最小单位。 - 我们需要在每个时钟周期
n
计算出一个相位值θ[n]
,用于查表(查找正弦/余弦表 ROM)生成当前时刻的本振信号样本s[n] = cos(θ[n])
。 - 如果我们想要一个恒定的输出频率
f_out
,那么对应的恒定角频率就是ω_out = 2π * f_out
。 - 根据相位是频率积分的原理,在连续时间中,相位随时间线性增长:
θ(t) = ω_out * t + θ₀
。 - 在离散时间中,相位在每个时钟周期的增量
Δθ
是恒定的(因为频率恒定):
Δθ = ω_out * T_clk = 2π * f_out * T_clk = 2π * f_out / f_clk
- 在数字系统中,时间是离散的,以系统时钟周期
频率控制字(FTW)的角色:
- FTW 就是离散化的相位增量
Δθ
。 它代表了每个时钟周期相位需要增加多少才能产生目标频率f_out
。 - 计算 FTW 的公式通常是:
FTW = Δθ * (2^N / 2π)
(其中N
是相位累加器的位数)
或者更直接地:
FTW = (f_out * 2^N) / f_clk
- 为什么这样设计?
Δθ
通常是一个小于2π
的无理小数(弧度制)。直接用浮点数表示和累加效率低,硬件实现复杂。- 相位累加器是一个
N
位宽的寄存器。2^N
代表了相位的一个完整周期 (2π
弧度)。 - 通过将
Δθ
乘以2^N / 2π
,我们将Δθ
映射成了一个整数FTW
。这个FTW
表示的是每个时钟周期,相位在[0, 2^N - 1]
范围内(对应[0, 2π)
弧度)需要增加的步进量。 - 例如,如果
FTW = 1
,那么相位每周期增加1
,需要2^N
个周期才能完成一个完整的2π
弧度周期,对应的输出频率就是f_clk / 2^N
(最低频率分辨率)。如果FTW = K
,输出频率就是f_out = (K * f_clk) / 2^N
。
- FTW 就是离散化的相位增量
相位累加器的工作:
- 相位累加器是一个
N
位宽的寄存器。 - 每个时钟周期
n
,它执行的操作是:
Phase_Accumulator[n] = Phase_Accumulator[n-1] + FTW
- 这个累加操作
Σ FTW
正是对Δθ
的离散积分! Phase_Accumulator[n]
的当前值(通常取其高M
位作为索引,M
是 ROM 地址线宽度)直接代表了当前时刻 (n * T_clk
) 的瞬时相位值θ[n]
(模2π
,因为累加器溢出就相当于相位超过2π
后回到0
)。- 这个相位值
θ[n]
被送到正弦/余弦查找表 ROM。ROM 存储了[0, 2π)
范围内不同相位对应的正弦波和余弦波幅度值。 - ROM 根据输入的相位值
θ[n]
输出对应的幅度值cos(θ[n])
和/或sin(θ[n])
,这就是当前时钟周期产生的本振信号样本。
- 相位累加器是一个
总结:为什么说“累加 FTW 就是当前相位值”?
- 物理/数学本质: 相位是频率的积分。要得到某个频率信号在特定时刻的相位,必须对频率进行积分(累加)。
- 数字实现:
FTW
是目标频率f_out
对应的离散相位增量Δθ
(以整数形式编码表示)。- 相位累加器 (
Σ FTW
) 执行的就是对离散相位增量Δθ
的累加(积分) 操作。 - 累加器在每个时钟周期
n
的输出值Phase_Accumulator[n]
直接对应 当前时刻(n * T_clk)
的瞬时相位值θ(t)
(模2π
)。
因此,数字接收机中每个时钟周期累加一次 FTW
的过程,就是通过离散积分将频率控制信息 (FTW
/f_out
) 实时地、精确地转换成当前时刻所需的本振相位值 θ[n]
的关键步骤。这个相位值是最终生成所需本振频率信号的基础。
* 将 Φ[n]
直接作为CORDIC旋转器的目标旋转角度 θ
输入:
这就是描述的“配置输入的数字下变频(DDC)的频率控制字作为cordic旋转的初始角度”的本质。更准确地说,是将当前时刻NCO相位累加器的输出值 Φ[n]
作为CORDIC此刻要旋转的角度 θ
。频率控制字(FTW)是用来不断更新 Φ[n]
的,而 Φ[n]
本身才是当前时刻的相位角度。
14次CORDIC迭代的作用:逼近目标旋转角度
- CORDIC算法通过一系列预先定义的、角度不断减半的微小旋转(
arctan(1), arctan(1/2), arctan(1/4), ..., arctan(1/8192)
)来逼近任意目标旋转角度θ
。 - 每次迭代完成一次简单的移位和加法操作。
- 14次迭代 提供了非常高的旋转角度精度(通常能达到优于0.01°的精度)。迭代次数越多,精度越高,但计算延迟也越大。14次是精度和延迟的一个常用平衡点。
- CORDIC算法通过一系列预先定义的、角度不断减半的微小旋转(
CORDIC的输出:下变频后的基带I/Q信号
- 输入: RF/IF 采样得到的原始复信号
(I_in[n], Q_in[n])
。 - 操作: CORDIC 使用当前时刻NCO计算出的相位
θ[n] = Φ[n]
作为旋转目标,对这个输入向量进行(14次迭代逼近的)旋转。 - 输出: 旋转后的复信号
(I_out[n], Q_out[n])
。 - 输出的物理意义:
- 如果
θ[n]
的增量速率精确对应期望下变频的频率f_lo
,那么(I_out[n], Q_out[n])
就是输入信号频谱被搬移了-f_lo
后的结果。换句话说,原本中心在f_c
的信号,其中心频率被搬移到了f_c - f_lo
。目标通常是f_c - f_lo = 0
(零中频)。 (I_out[n], Q_out[n])
就是数字下变频后得到的基带(或低中频)I/Q信号。
- 如果
- 输入: RF/IF 采样得到的原始复信号
总结目的与作用:
- 实现核心DDC功能: 直接利用CORDIC的向量旋转能力完成复数混频(频率搬移),是DDC的核心步骤。
- 高效性: CORDIC仅用移位器和加法器实现复杂的三角函数计算和乘法操作,节省了大量硬件资源(尤其是乘法器),特别适合FPGA/ASIC实现。
- 高精度: 14次迭代提供了足够高的旋转角度精度,保证了下变频的准确性和信号保真度(低失真、低相位噪声)。
- 相位同步: 将NCO实时生成的相位
Φ[n]
直接作为CORDIC的角度输入,确保了混频本振的相位与输入信号在时间上严格同步,避免了因处理延迟造成的相位误差(这是实现高性能正交下变频的关键)。 - 简化架构: 将NCO(相位生成)和混频器(复数乘法/旋转)的功能通过CORDIC算法优雅地结合在一起,简化了DDC的硬件结构。
- 输出结果: CORDIC的输出
(I_out, Q_out)
就是经过数字下变频(频率搬移到基带附近)后的基带I/Q信号对。这个信号可以直接进行低通滤波(滤除搬移后产生的高频镜像分量和带外噪声),然后进行抽取(降低采样率)和后续的解调等基带处理。
简而言之: 这种配置利用CORDIC算法,将RF输入的I/Q数据,根据由DDC频率控制字驱动的、实时生成的NCO相位,进行高精度复数旋转(混频),其输出就是中心频率被搬移到零频(或低中频)的基带I/Q信号。这是一种资源高效、精度高且同步性好的DDC实现方案。
以下讲解以下:
将一个复数 I_in + jQ_in 乘以一个单位复数 e^(jθ) = cosθ + jsinθ 的效果,等价于 将原始复数向量 (I_in, Q_in) 在复平面上旋转角度 θ; 这句话的原理是什么
将复数
乘以单位复数
等价于在复平面上将向量
旋转角度 theta,其数学原理源于复数的极坐标表示和欧拉公式。以下是详细证明:
1. 复数的极坐标表示
2. 复数乘法的几何意义
3. 直角坐标下的代数证明
4. 几何示意图
^ Q
| z_out = (I_out, Q_out)
| /
| /
| /
| / : rotated by θ
| /
| /
| /
| / φ+θ
z_in |/
(I_in, Q_in) / ------> I
/ | φ
/ |
/ |
/ |