基于FPGA的正交数字混频器中数控振荡器的设计与实现
发布时间:2008/5/28 0:00:00 访问次数:604
eaw
摘??? 要:本文介绍了一种利用矢量旋转cordic(coordination rotation digital computer)算法实现正交数字混频器中的数控振荡器(nco)的方法。首先推导了cordic算法产生正/余弦信号的实现过程,然后给出了在fpga中设计数控振荡器的顶层电路结构,并根据算法特点在设计中引入流水线结构设计。
关键词:软件无线纾皇卣竦雌鳎?span lang=en-us>cordic算法;fpga
?
引言
数控振荡器是正交数字混频器的核心部分,具有频率分辨率高、频率变化速度快、相位可连续线性变化和生成的正/余弦信号正交特性好等特点。而且nco的相位、幅度均已数字化,可以直接进行高精度的数字调制/解调。随着数字通信技术的发展,传送的数据速率越来越高。如何得到一个可数控的高频载波信号是实现高速数字通信系统必须解决的问题。本文将介绍如何在fpga中实现高速正交数字混频器中的数控振荡器设计。
数控振荡器的实现原理
数控振荡器的作用是产生正交的正弦和余弦样本, 传统做法是采用查表法(lut),即事先根据各个正/余弦波相位计算好相位的正/余弦值,并按相位角度作为地址在存储器中对其进行寻址,构成一个幅度/相位转换电路(即波形存储器),通过该转换电路进行查表获得正/余弦信号样本。为了提高数控振荡器的频率分辨率,往往需要扩大波形存储器的容量,造成存储资源的大量消耗。而且,如果需要外挂ram来存储波形,由于受到ram读取速度的影响,数控振荡器的输出速率必然受到制约。因此,当设计高速、高精度的数控振荡器时,查表法就不适合采用。
为了避免使用大容量存储器,可以考虑利用算法来产生正/余弦样本。基于矢量旋转的cordic算法正好满足了这一需求, 该算法有线性的收敛域和序列的特性,只要迭代次数足够,即可保证结果有足够的精度。统一的cordic形式的基本原理是,初始向量v1(x1,y1)旋转角度?后得到向量v2(x2,y2):
?
x2=x1·cos?-y1·sin?,
y2=y1·cos?+x1·sin??????????? (1)
即:
x2=(x1-y1·tan?)·cos??
y2=(y1+x1·tan?)·cos?????????(2)
若每次旋转角度?的正切值为2的整数次幂,即:?i=arctan(2-i),则,假设以?i代表矢量的旋转方向,+1表示逆时针旋转,-1表示顺时针旋转,故第i步旋转可用以下两式表示:
,
(3)
其中为模校正因子。对于字长一定的运算,该因子是一个常数,用k表示,以16bit字长为例,则
。可见,迭代运算不能使幅值比例因子恒为1。为了抵消迭代对比例因子的影响,可将每级迭代的输入数据x、y校正后再参与运算,以避免在迭代运算中增加校正运算,降低cordic算法的速度。由此运算迭代式可以简化成:
,
????????????????? (4)
可见,以上两式运算仅通过加法器及移位器就可以实现。另外,若用zi表示第i次旋转时与目标角度之差,则:
?????????? (5)
经过n次旋转后,(4)式经n次迭代可以得到以下结果:
?????? (6)
本文介绍的数控振荡器的设计就是在(6)式的基础上,给定,,则迭代结果为:
,,。(7)
所以,将所需产生的角度值作为z0输入,通过(4)、(5)两式的迭代运算,迭代结果输出的xn和yn就是所需要的三角函数值。
?
数控振荡器的fpga实现
数控振荡器的顶层电路结构。可以看到,频率控制字寄存器将接收到的的频率控制字送入相位累加器,相位累加器对系统时钟进行计数,每到达输入频率控制字的值即对相位进行累加,随后将累加值送入相位相加器,与相位控制字寄存器接收到的初始相位相加,得到当前的相位值。其中,相位累加器是决定nco性能的一个关键模块,可以利用fpga器件的进位链实现快速、高效的电路结构。然而, 由于进位链必须位于临近的逻辑阵列块clb和逻辑单元lc内,所以长的进位链会减少其它逻辑使用的布线资源;同时,过长的进位链也会制约整个系统速度的提高。因此,设计中采用进位链和流水线技术相结合的办法。采用以上做法实现的相位累加器既能保证具有较高的资源利用率, 又能大幅提高系统的性能和速度。
经过上述相位处理之后,即可获得
eaw
摘??? 要:本文介绍了一种利用矢量旋转cordic(coordination rotation digital computer)算法实现正交数字混频器中的数控振荡器(nco)的方法。首先推导了cordic算法产生正/余弦信号的实现过程,然后给出了在fpga中设计数控振荡器的顶层电路结构,并根据算法特点在设计中引入流水线结构设计。
关键词:软件无线纾皇卣竦雌鳎?span lang=en-us>cordic算法;fpga
?
引言
数控振荡器是正交数字混频器的核心部分,具有频率分辨率高、频率变化速度快、相位可连续线性变化和生成的正/余弦信号正交特性好等特点。而且nco的相位、幅度均已数字化,可以直接进行高精度的数字调制/解调。随着数字通信技术的发展,传送的数据速率越来越高。如何得到一个可数控的高频载波信号是实现高速数字通信系统必须解决的问题。本文将介绍如何在fpga中实现高速正交数字混频器中的数控振荡器设计。
数控振荡器的实现原理
数控振荡器的作用是产生正交的正弦和余弦样本, 传统做法是采用查表法(lut),即事先根据各个正/余弦波相位计算好相位的正/余弦值,并按相位角度作为地址在存储器中对其进行寻址,构成一个幅度/相位转换电路(即波形存储器),通过该转换电路进行查表获得正/余弦信号样本。为了提高数控振荡器的频率分辨率,往往需要扩大波形存储器的容量,造成存储资源的大量消耗。而且,如果需要外挂ram来存储波形,由于受到ram读取速度的影响,数控振荡器的输出速率必然受到制约。因此,当设计高速、高精度的数控振荡器时,查表法就不适合采用。
为了避免使用大容量存储器,可以考虑利用算法来产生正/余弦样本。基于矢量旋转的cordic算法正好满足了这一需求, 该算法有线性的收敛域和序列的特性,只要迭代次数足够,即可保证结果有足够的精度。统一的cordic形式的基本原理是,初始向量v1(x1,y1)旋转角度?后得到向量v2(x2,y2):
?
x2=x1·cos?-y1·sin?,
y2=y1·cos?+x1·sin??????????? (1)
即:
x2=(x1-y1·tan?)·cos??
y2=(y1+x1·tan?)·cos?????????(2)
若每次旋转角度?的正切值为2的整数次幂,即:?i=arctan(2-i),则,假设以?i代表矢量的旋转方向,+1表示逆时针旋转,-1表示顺时针旋转,故第i步旋转可用以下两式表示:
,
(3)
其中为模校正因子。对于字长一定的运算,该因子是一个常数,用k表示,以16bit字长为例,则
。可见,迭代运算不能使幅值比例因子恒为1。为了抵消迭代对比例因子的影响,可将每级迭代的输入数据x、y校正后再参与运算,以避免在迭代运算中增加校正运算,降低cordic算法的速度。由此运算迭代式可以简化成:
,
????????????????? (4)
可见,以上两式运算仅通过加法器及移位器就可以实现。另外,若用zi表示第i次旋转时与目标角度之差,则:
?????????? (5)
经过n次旋转后,(4)式经n次迭代可以得到以下结果:
?????? (6)
本文介绍的数控振荡器的设计就是在(6)式的基础上,给定,,则迭代结果为:
,,。(7)
所以,将所需产生的角度值作为z0输入,通过(4)、(5)两式的迭代运算,迭代结果输出的xn和yn就是所需要的三角函数值。
?
数控振荡器的fpga实现
数控振荡器的顶层电路结构。可以看到,频率控制字寄存器将接收到的的频率控制字送入相位累加器,相位累加器对系统时钟进行计数,每到达输入频率控制字的值即对相位进行累加,随后将累加值送入相位相加器,与相位控制字寄存器接收到的初始相位相加,得到当前的相位值。其中,相位累加器是决定nco性能的一个关键模块,可以利用fpga器件的进位链实现快速、高效的电路结构。然而, 由于进位链必须位于临近的逻辑阵列块clb和逻辑单元lc内,所以长的进位链会减少其它逻辑使用的布线资源;同时,过长的进位链也会制约整个系统速度的提高。因此,设计中采用进位链和流水线技术相结合的办法。采用以上做法实现的相位累加器既能保证具有较高的资源利用率, 又能大幅提高系统的性能和速度。
经过上述相位处理之后,即可获得
版权所有:51dzw.COM
深圳服务热线:13751165337 13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式
深圳服务热线:13751165337 13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)

深圳市碧威特网络技术有限公司
付款方式