复数的处理

复数的处理

复数 VVV 定义为在 (x,y)(x,y)(x,y)-平面中实数对的有序集合。在这方面,复数可以被视为原点 (0,0)(0,0)(0,0) 上的向量。从这个角度看,复数的加法类似于 (x,y)(x,y)(x,y)-平面中向量的加法。

然而,乘法对于复数是良好定义的,而对于向量则不是——两个向量的点积是标量,而不是向量,而两个向量在平面上的叉积是一个在该平面之外的向量。另一方面,复数的乘积是一个复数——这是一个非常有用的性质。

复平面上 xxx 或实轴表示为 III(表示同相),yyy 或虚轴表示为 QQQ(表示正交),如图1.21所示。

复数 VVV 在此 IQIQIQ 平面中,其 VIV_IVIVQV_QVQ 分别是它的 IIIQQQ 分量。根据图1.21,我们有:

VI=∣V∣cos⁡∠VV_I = |V| \cos \angle VVI=VcosV

VQ=∣V∣sin⁡∠VV_Q = |V| \sin \angle VVQ=VsinV

image

图1.21:在 IQIQIQ 平面中的复数 VVV

其中 ∣V∣|V|V∠V\angle VV 分别是 VVV 相对于 III 轴的大小和角度。

幅度和相位

在复数的极坐标表示中,IQIQIQ 平面中复数 VVV 的幅度定义如方程所示为:

∣V∣=VI2+VQ2|V| = \sqrt{V_I^2 + V_Q^2}V=VI2+VQ2

我们使用了性质 cos⁡2θ+sin⁡2θ=1\cos^2\theta + \sin^2\theta = 1cos2θ+sin2θ=1。定义相位 ∠V\angle VV 稍微复杂一些。我们可以定义它为 tan⁡−1(VQ/VI)\tan^{-1}(V_Q / V_I)tan1(VQ/VI),但这样做的问题在于:

$$\tan^{-1}\left(\frac{+V_Q}{+V_I}\right) = \tan^{-1}\left(\frac{-V_Q}{-V_I}\right) \rightarrow \text{在}[0, +\pi/2],象限I$$$$\tan^{-1}\left(\frac{-V_Q}{+V_I}\right) = \tan^{-1}\left(\frac{+V_Q}{-V_I}\right) \rightarrow \text{在}[0, -\pi/2],象限IV$$

我们无法区分 VVV 位于象限I还是象限III。同样,VVV 位于象限II还是象限IV也无法区分。另一方面,图1.21告诉我们,VVV 可以位于任何象限,并且其相位应位于 [−π,π][- \pi, \pi][π,π] 范围内,如下所述:

  • 象限I∠V\angle VV 应位于 [0,π/2][0, \pi/2][0,π/2]tan⁡−1(VQ/VI)\tan^{-1}(V_Q/V_I)tan1(VQ/VI) 已足够。

  • 象限II∠V\angle VV 应位于 [π/2,π][\pi/2, \pi][π/2,π]tan⁡−1(VQ/VI)\tan^{-1}(V_Q/V_I)tan1(VQ/VI) 在象限IV,需要加上 π\piπ 的调整。

  • 象限III∠V\angle VV 应位于 [−π/2,−π][- \pi/2, - \pi][π/2,π]tan⁡−1(VQ/VI)\tan^{-1}(V_Q/V_I)tan1(VQ/VI) 在象限I,需要加上 π\piπ 的调整。

  • 象限 IV∠V\angle VV 应位于 [0,−π/2][0, -\pi/2][0,π/2]tan⁡−1(VQ/VI)\tan^{-1}(V_Q/V_I)tan1(VQ/VI) 已足够。

同样,从图1.22中可以看出:

  • 情况 1:当 VI<0V_I < 0VI<0VQ=0V_Q = 0VQ=0 时,VVV 的相位应为 π\piπ 而不是 0。
  • 情况 2:当 VI=0V_I = 0VI=0VQ>0V_Q > 0VQ>0 时,VVV 的相位应为 +π/2+\pi/2+π/2
  • 情况 3:当 VI=0V_I = 0VI=0VQ<0V_Q < 0VQ<0 时,VVV 的相位应为 −π/2-\pi/2π/2

image

图1.22:tan⁡−1(⋅)\tan^{-1}(·)tan1() 不能处理的几个其他情况

考虑到所有四个象限,∠V\angle VV 定义为 tan⁡−1(VQ/VI)\tan^{-1}(V_Q/V_I)tan1(VQ/VI) 的形式,如下所示:

$$\angle V = \begin{cases} \tan^{-1}\left(\frac{V_Q}{V_I}\right) & V_I > 0 \\ \tan^{-1}\left(\frac{V_Q}{V_I}\right) + \pi & V_I < 0 \text{ 且 } V_Q \geq 0 \\ \tan^{-1}\left(\frac{V_Q}{V_I}\right) - \pi & V_I < 0 \text{ 且 } V_Q < 0 \\ +\pi/2 & V_I = 0 \text{ 且 } V_Q > 0 \\ -\pi/2 & V_I = 0 \text{ 且 } V_Q < 0 \\ \end{cases}$$

加法和乘法运算

加法W=U+VW = U + VW=U+V 意味着:

I→WI=UI+VII \rightarrow W_I = U_I + V_IIWI=UI+VI

Q→WQ=UQ+VQQ \rightarrow W_Q = U_Q + V_QQWQ=UQ+VQ

注意,复数加法实际上包含两个实数加法,分别对应 IIIQQQ,如图1.23所示。

image

图 1.23:一次复数相加会产生两个实数相加,分别用于 IIIQQQ。此外,一次复数相乘会产生4次实数相乘和2次实数相加。

乘法: W=UVW = UVW=UV 意味着

∣W∣=∣U∣⋅∣V∣|W| = |U| \cdot |V|W=UV

∠W=∠U+∠V\angle W = \angle U + \angle VW=U+V

(物理意义可以理解为旋转)

在 IQ 形式中导致

$$\begin{aligned} I \rightarrow & \quad W_I = U_I V_I - U_Q V_Q \\ Q \rightarrow & \quad W_Q = U_Q V_I + U_I V_Q \\ \end{aligned}$$

复数乘法规则可以写成:

复数乘法:

$$\begin{aligned} I: & \quad I \cdot I - Q \cdot Q \\ Q: & \quad I \cdot Q + I \cdot Q \\ \end{aligned}$$

上面的加法规则非常合理:I 分量都加在一起以及两个 QQQ 分量。在公式中的乘法规则看起来有点奇怪:III 是两个对齐轴项的乘积之差(即 I⋅I−Q⋅QI \cdot I - Q \cdot QIIQQ),而 QQQ 是两个交叉轴项的乘积之和(即 Q⋅I+I⋅QQ \cdot I + I \cdot QQI+IQ)。

为了理解复数相乘是如何合理的,请考虑

UI=∣U∣cos⁡ΔU和UQ=∣U∣sin⁡ΔUU_I = |U| \cos \Delta U \quad \text{和} \quad U_Q = |U| \sin \Delta UUI=UcosΔUUQ=UsinΔU

VI=∣V∣cos⁡ΔV和VQ=∣V∣sin⁡ΔVV_I = |V| \cos \Delta V \quad \text{和} \quad V_Q = |V| \sin \Delta VVI=VcosΔVVQ=VsinΔV

将这些值代入公式中,

$$\begin{aligned} I &\rightarrow W_I = |U| \cos \Delta U \cdot |V| \cos \Delta V - |U| \sin \Delta U \cdot |V| \sin \Delta V \\ Q &\rightarrow W_Q = |U| \sin \Delta U \cdot |V| \cos \Delta V + |U| \cos \Delta U \cdot |V| \sin \Delta V \\ \end{aligned}$$

这导致

$$\begin{aligned} I &\rightarrow W_I = |U||V|(\cos \Delta U \cdot \cos \Delta V - \sin \Delta U \cdot \sin \Delta V) \\ Q &\rightarrow W_Q = |U||V|(\sin \Delta U \cdot \cos \Delta V + \cos \Delta U \cdot \sin \Delta V) \\ \end{aligned}$$

使用恒等式 cos⁡Acos⁡B−sin⁡Asin⁡B=cos⁡(A+B)\cos A \cos B - \sin A \sin B = \cos(A + B)cosAcosBsinAsinB=cos(A+B)sin⁡Acos⁡B+cos⁡Asin⁡B=sin⁡(A+B)\sin A \cos B + \cos A \sin B = \sin(A + B)sinAcosB+cosAsinB=sin(A+B)

$$\begin{aligned} I &\rightarrow W_I = |U||V| \cos(\Delta U + \Delta V) \\ Q &\rightarrow W_Q = |U||V| \sin(\Delta U + \Delta V) \\ \end{aligned}$$

这与公式等价。因此,复数的乘法就是将它们的模数相乘并将它们的相位相加。

(学习过复数的直接忽略就行)

将复数提升到 MMM 次幂

公式 (1.11) 中复数乘法定义的另一个结果是,将复数 VVV 提升到一个幂次,例如 2,生成

$$\begin{aligned} |W| &= |V| \cdot |V| = |V|^2 \\ \angle W &= \angle V + \angle V = 2 \cdot \angle V \end{aligned}$$

对于一般的幂 MMM

$$\begin{aligned} |W| &= |V|^M \\ \angle W &= M \cdot \angle V \\ \end{aligned}$$

(公式1.15)

我们可以得出结论,在 IQ 平面中,将复数提升到某个幂次会提高它的模数到该幂次,同时将相位乘以该幂次。

相位旋转

在 IQ 平面中,通过相位 θ\thetaθ 旋转复数看起来在复数符号中非常简单,但在 IQ 形式中有些复杂。旋转意味着保持模数不变并将 θ\thetaθ 添加到该复数的相位中,如图 1.24 所示。

首先,我们将复数 VVV 乘以模数为 1 且相位为 θ\thetaθ 的复数 UUU。使用 ∣U∣=1|U| = 1U=1ΔU=θ\Delta U = \thetaΔU=θ

UI=cos⁡θ和UQ=sin⁡θU_I = \cos \theta \quad \text{和} \quad U_Q = \sin \thetaUI=cosθUQ=sinθ

image

图1.24:旋转意味着在不改变幅度的情况下,将 θ\thetaθ 添加到角度上。

将复数的乘法规则(公式1.13)代入,

I→WI=VI⋅cos⁡θ−VQ⋅sin⁡θ(1.16)I \rightarrow W_I = V_I \cdot \cos \theta - V_Q \cdot \sin \theta \quad (1.16)IWI=VIcosθVQsinθ(1.16)

Q→WQ=VQ⋅cos⁡θ+VI⋅sin⁡θQ \rightarrow W_Q = V_Q \cdot \cos \theta + V_I \cdot \sin \thetaQWQ=VQcosθ+VIsinθ

使用 VI=∣V∣cos⁡ΔVV_I = |V| \cos \Delta VVI=VcosΔVVQ=∣V∣sin⁡ΔVV_Q = |V| \sin \Delta VVQ=VsinΔV

I→WI=∣V∣(cos⁡ΔV⋅cos⁡θ−sin⁡ΔV⋅sin⁡θ)I \rightarrow W_I = |V|(\cos \Delta V \cdot \cos \theta - \sin \Delta V \cdot \sin \theta)IWI=V(cosΔVcosθsinΔVsinθ)

Q→WQ=∣V∣(sin⁡ΔV⋅cos⁡θ+cos⁡ΔV⋅sin⁡θ)Q \rightarrow W_Q = |V|(\sin \Delta V \cdot \cos \theta + \cos \Delta V \cdot \sin \theta)QWQ=V(sinΔVcosθ+cosΔVsinθ)

再次使用恒等式 cos⁡Acos⁡B−sin⁡Asin⁡B=cos⁡(A+B)\cos A \cos B - \sin A \sin B = \cos(A + B)cosAcosBsinAsinB=cos(A+B)sin⁡Acos⁡B+cos⁡Asin⁡B=sin⁡(A+B)\sin A \cos B + \cos A \sin B = \sin(A + B)sinAcosB+cosAsinB=sin(A+B)

I→WI=∣V∣cos⁡(ΔV+θ)I \rightarrow W_I = |V| \cos (\Delta V + \theta)IWI=Vcos(ΔV+θ)

Q→WQ=∣V∣sin⁡(ΔV+θ)(1.17)Q \rightarrow W_Q = |V| \sin (\Delta V + \theta) \quad (1.17)QWQ=Vsin(ΔV+θ)(1.17)

这保持了幅度不变,并将角度 θ\thetaθ 添加到现有的角度上。

从公式 (1.16) 和公式 (1.17) 可以推导出相位旋转的快速规则。对于复数 VVV 和角度 +θ+\theta+θ(即逆时针旋转),相位旋转规则 规定:

逆时针旋转 θ\thetaθ

I⋅cos⁡θ−Q⋅sin⁡θ(1.18)I \cdot \cos \theta - Q \cdot \sin \theta \quad \text{(1.18)}IcosθQsinθ(1.18)

Q⋅cos⁡θ+I⋅sin⁡θQ \cdot \cos \theta + I \cdot \sin \thetaQcosθ+Isinθ

这被认为与乘法规则 I⋅I−Q⋅QI \cdot I - Q \cdot QIIQQQ⋅I+I⋅QQ \cdot I + I \cdot QQI+IQ 相同。类似地,对于复数 VVV 和角度 −θ-\thetaθ(即顺时针旋转):

顺时针旋转 θ\thetaθ

I⋅cos⁡θ+Q⋅sin⁡θ(1.19)I \cdot \cos \theta + Q \cdot \sin \theta \quad \text{(1.19)}Icosθ+Qsinθ(1.19)

Q⋅cos⁡θ−I⋅sin⁡θQ \cdot \cos \theta - I \cdot \sin \thetaQcosθIsinθ

上面的相位旋转规则很重要,因为我们在这篇文章中没有使用复数符号。这意味着我们可以快速地识别出一个方程是否通过某个角度旋转了一个复数。上面的两个方程有助于实现这一目的,我们将在后面看到它的许多应用,例如在载波相位同步期间。

复共轭

复数 V∗V^*V 的共轭只改变了 QQQ 分量的符号。它定义为:

I→{V∗}I=VII \quad \rightarrow \quad \{V^*\}_I = V_II{V}I=VI
Q↑{V∗}Q=−VQQ \quad \uparrow \quad \{V^*\}_Q = -V_QQ{V}Q=VQ
(1.20)\text{(1.20)}(1.20)

由于幅度是 IIIQQQ 分量平方和的结果,因此它保持不变。另一方面,QQQ 除以 III 是相位,因此共轭导致相位符号的改变。因此,复数共轭的另一种定义是:

∣V∗∣=∣V∣|V^*| = |V|V=V
∠V∗=−∠V\angle V^* = -\angle VV=V
(1.21)\text{(1.21)}(1.21)

复数共轭的一个重要意义在于,将复数乘以其复共轭可以抵消相位并产生其幅度平方。利用上述关系,在方程(1.11)的乘法规则中可以得出

∣V⋅V∗∣=∣V∣2=VI2+VQ2|V \cdot V^*| = |V|^2 = V_I^2 + V_Q^2VV=V2=VI2+VQ2
∠(V⋅V∗)=0\angle (V \cdot V^*) = 0(VV)=0
(1.22)\text{(1.22)}(1.22)

定义信号共轭的另一个有趣的结果是以下恒等式集:

I→{V+V∗}=VI+VII \quad \rightarrow \quad \{V + V^*\} = V_I + V_II{V+V}=VI+VI
Q↑{V+V∗}=VQ−VQQ \quad \uparrow \quad \{V + V^*\} = V_Q - V_QQ{V+V}=VQVQ

从而生成以下重要结果:

I→VI=12{V+V∗}I \quad \rightarrow \quad V_I = \frac{1}{2}\{V + V^*\}IVI=21{V+V}
Q↑0=12{V+V∗}Q \quad \uparrow \quad 0 = \frac{1}{2}\{V + V^*\}Q0=21{V+V}
(1.23)\text{(1.23)}(1.23)

同样,

I→0=12{V−V∗}I \quad \rightarrow \quad 0 = \frac{1}{2}\{V - V^*\}I0=21{VV}
Q↑VQ=12{V−V∗}Q \quad \uparrow \quad V_Q = \frac{1}{2}\{V - V^*\}QVQ=21{VV}
(1.24)\text{(1.24)}(1.24)

在Vivado中使用FIR Compiler核心进行复数信号处理是一个常见的需求,特别是在通信系统中,例如数字下变频器(Digital Down Converter, DDC)等应用。FIR Compiler核心支持对复数信号的处理,通常用于对I(In-phase)和Q(Quadrature)两路信号进行同步滤波。 ### 复数信号处理的基本方法 复数信号由实部(I)和虚部(Q)组成,FIR Compiler核心通过将复数信号拆分为两个独立的实数信号流进行处理,分别对I和Q路进行滤波。由于FIR Compiler支持多数据流处理,因此可以将I和Q作为两个独立的数据流输入到同一个滤波器结构中,使用相同的滤波器配置进行处理[^1]。 ### FIR Compiler配置步骤 1. **选择复数信号处理模式** 在FIR Compiler的配置界面中,需要启用复数信号处理模式。该模式允许将输入信号定义为复数类型,并自动将滤波器应用于实部和虚部。 2. **设置输入数据格式** 输入数据可以选择为实数或复数形式。对于复数信号,通常将I和Q分别作为输入的两个通道。用户需要指定数据宽度和符号属性。 3. **配置滤波器系数** 在系数设置部分,需要为滤波器提供对应的系数。这些系数将同时应用于I和Q路的滤波操作。 4. **设置采样率变化** 如果应用场景中需要进行抽取(Decimation)或插值(Interpolation),可以在FIR Compiler中配置相应的速率变化参数。 5. **优化资源使用** Vivado提供了多种优化选项,包括资源共享(Resource Sharing)和并行化处理(Pipelining)。这些选项可以显著少FPGA资源的占用,同时提高滤波器的处理效率。 ### 示例代码:复数信号处理的Verilog模块接口 以下是一个简单的Verilog模块接口示例,展示如何将I和Q信号作为输入,并通过FIR Compiler核心进行处理: ```verilog module complex_fir_filter ( input wire clk, input wire rst, input wire [15:0] i_in, // In-phase input input wire [15:0] q_in, // Quadrature input output reg [15:0] i_out, // In-phase output output reg [15:0] q_out // Quadrature output ); // Internal signals for FIR Compiler wire [15:0] fir_i_out; wire [15:0] fir_q_out; // FIR Compiler core for In-phase component fir_compiler_0 fir_i ( .aclk(clk), .s_axis_data_tvalid(1'b1), .s_axis_data_tdata(i_in), .m_axis_data_tvalid(), .m_axis_data_tdata(fir_i_out) ); // FIR Compiler core for Quadrature component fir_compiler_0 fir_q ( .aclk(clk), .s_axis_data_tvalid(1'b1), .s_axis_data_tdata(q_in), .m_axis_data_tvalid(), .m_axis_data_tdata(fir_q_out) ); always @(posedge clk or posedge rst) begin if (rst) begin i_out <= 16'd0; q_out <= 16'd0; end else begin i_out <= fir_i_out; q_out <= fir_q_out; end end endmodule ``` ### 资源优化与性能考虑 - **资源共享**:FIR Compiler支持多通道资源共享,可以显著少硬件资源的使用。例如,在I和Q两路使用相同滤波器配置的情况下,可以共享滤波器系数存储器和乘法器资源。 - **流水线优化**:为了提高时钟频率,可以在FIR Compiler中启用流水线优化。这将增加延迟,但可以显著提高吞吐量。 - **定点与浮点精度**:根据应用需求选择定点或浮点精度。定点精度通常更节省资源,而浮点精度适用于高动态范围的应用。 ### 总结 通过FIR Compiler核心,Vivado提供了强大的复数信号处理能力。用户可以通过配置滤波器参数、输入数据格式以及优化选项,实现高效的复数信号滤波。这种能力在通信系统中的数字下变频、频谱分析等领域尤为重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值