基于FPGA的数控振荡器的设计与实现
发布时间:2008/5/28 0:00:00 访问次数:623
摘要:介绍一种利用矢量旋转的cordic(coordination rotation digital computer)算法实现正交数字混频器中的数控振荡器(nco)的方法。推导了cordic算法产生正余弦信号的实现过程,给出了在fpga 中设计数控振荡器的顶层电路结构,并根据算法特点在设计中引入流水线结构设计。
关键词:软件无线电;数控振荡器;cordic算法;现场可编程门阵列
引言
在正交数字混频器中,采用数字频率合成技术,可以将数字处理延续到正交调制之后或正交解调之前,滤波器和增益控制就可以用数字方法实现,i、q两路也就不会存在增益的不平衡,加上数控振荡器(nco)的低正交误差,可以使系统误差降低到数据的最低比特(lsb)的高精度范围。此外,正交数字混频器更容易与数字信号处理技术结合,使得数字调制更加灵活,进而实现软件无线电所要求的软件可更改的调制解调。
数控振荡器是正交数字混频器的核心部分,它具有频率分辨率高、频率变化速度快、相位可连续线性变化和生成的正弦p余弦信号正交特性好等特点。而且nco的相位、幅度均已数字化,可以直接进行高精度的数字调制解调。随着数字通信的发展,传送的数据速率越来越高。如何得到一个可数控的高频载波信号是实现高速数字通信系统必须解决的问题。为此,作者对如何在fpga中实现高速正交数字混频器中的数控振荡器的方法进行了探讨。
数控振荡器的基本实现原理
数控振荡器的作用是产生正交的正弦和余弦样本。传统方法是采用查表法(lut),即事先根据各个正余弦波相位计算好相位的正余弦值,并按相位角度作为地址存储该相位的正余弦值,构成一个幅度p相位转换电路(即波形存储器)。在系统时钟的控制下,由相位累加器对输入频率字不断累加,得到以该频率字为步进的数字相位,再通过相位相加模块进行初始相位偏移,得到要输出的当前相位,将该值作为取样地址值送入幅度p相位转换电路,查表获得正余弦信号样本。对于一个相位位数为n ,输出信号幅度位数为m的数控振荡器,所需查找表大小为m×2n 。为了提高数控振荡器的频率分辨率,往往需要扩大波形存储器的容量,造成存储资源的大量消耗。而且,当需要外挂ram 来存储波形时,由于受到ram读取速度的影响,数控振荡器的输出速率必然受到制约。因此,当需要设计高速、高精度的数控振荡器时,不宜采用查表法。
为了避免使用大容量存储器,可以考虑利用算法来产生正余弦样本。基于矢量旋转的cordic算法正好满足了这一需求,该算法主要用于计算三角函数、双曲函数及其它一些基本函数运算。它有线性的收敛域和序列的特性,只要迭代次数足够,即可保证结果有足够的精度。walther js于1971年提出了统一的cordic形式。假定初始向量v1(x1 ,y1)旋转角度θ后得到向量v2(x2,y2):
即:
若每次旋转的角度θ是正切值为2 的倍数,即θi=arctan(2-i),则cosθi=(1+2-2i)-1/2 。假设以δi代表矢量的旋转方向,+1表示逆时针旋转,-1表示顺时针旋转,故第i 步旋转可用下式表示:
其中:(1+2-2i)-1/2为模校正因子。对于字长一定的运算,该因子是一个常数,用k表示,以16 bits字长为例,则:
可见,迭代运算不能使幅值比例因子恒为1。为了抵消因迭代产生的比例因子的影响,可将输入数据x,y校正后再参与运算,以避免在迭代运算中增加校正运算,降低cordic算法的速度。由此运算迭代式可以简化成:
式(5)运算仅通过加法器及移位器就可以实现。此外,若用zi表示第i次旋转时与目标角度之差,
则:
经过n次旋转后,式(5)的n次迭代可以得到以下结果:
本文介绍的数控振荡器的设计是在式(7)的基础上,给定x0=k ,y0=0,则迭代结果为:
将所需产生的角度值作为z0输入,通过式(5)、(6)的迭代运算,迭代结果输出的xn和yn就是所需要的三角函数值。
数控振荡器的fpga实现
图1是数控振荡器的顶层电路。由图可见,频率控制字寄存器将接收到的的频率控制字送入相位累加器,相位累加器对系统时钟进行计数,每到达输入频率控制字的值即对相位进行累加,随后将累加值送入相位相加器,与相位控制字寄存器接收到的初始相位进行相加,得到当前的相位值。其中,相位累加器是决定nco
摘要:介绍一种利用矢量旋转的cordic(coordination rotation digital computer)算法实现正交数字混频器中的数控振荡器(nco)的方法。推导了cordic算法产生正余弦信号的实现过程,给出了在fpga 中设计数控振荡器的顶层电路结构,并根据算法特点在设计中引入流水线结构设计。
关键词:软件无线电;数控振荡器;cordic算法;现场可编程门阵列
引言
在正交数字混频器中,采用数字频率合成技术,可以将数字处理延续到正交调制之后或正交解调之前,滤波器和增益控制就可以用数字方法实现,i、q两路也就不会存在增益的不平衡,加上数控振荡器(nco)的低正交误差,可以使系统误差降低到数据的最低比特(lsb)的高精度范围。此外,正交数字混频器更容易与数字信号处理技术结合,使得数字调制更加灵活,进而实现软件无线电所要求的软件可更改的调制解调。
数控振荡器是正交数字混频器的核心部分,它具有频率分辨率高、频率变化速度快、相位可连续线性变化和生成的正弦p余弦信号正交特性好等特点。而且nco的相位、幅度均已数字化,可以直接进行高精度的数字调制解调。随着数字通信的发展,传送的数据速率越来越高。如何得到一个可数控的高频载波信号是实现高速数字通信系统必须解决的问题。为此,作者对如何在fpga中实现高速正交数字混频器中的数控振荡器的方法进行了探讨。
数控振荡器的基本实现原理
数控振荡器的作用是产生正交的正弦和余弦样本。传统方法是采用查表法(lut),即事先根据各个正余弦波相位计算好相位的正余弦值,并按相位角度作为地址存储该相位的正余弦值,构成一个幅度p相位转换电路(即波形存储器)。在系统时钟的控制下,由相位累加器对输入频率字不断累加,得到以该频率字为步进的数字相位,再通过相位相加模块进行初始相位偏移,得到要输出的当前相位,将该值作为取样地址值送入幅度p相位转换电路,查表获得正余弦信号样本。对于一个相位位数为n ,输出信号幅度位数为m的数控振荡器,所需查找表大小为m×2n 。为了提高数控振荡器的频率分辨率,往往需要扩大波形存储器的容量,造成存储资源的大量消耗。而且,当需要外挂ram 来存储波形时,由于受到ram读取速度的影响,数控振荡器的输出速率必然受到制约。因此,当需要设计高速、高精度的数控振荡器时,不宜采用查表法。
为了避免使用大容量存储器,可以考虑利用算法来产生正余弦样本。基于矢量旋转的cordic算法正好满足了这一需求,该算法主要用于计算三角函数、双曲函数及其它一些基本函数运算。它有线性的收敛域和序列的特性,只要迭代次数足够,即可保证结果有足够的精度。walther js于1971年提出了统一的cordic形式。假定初始向量v1(x1 ,y1)旋转角度θ后得到向量v2(x2,y2):
即:
若每次旋转的角度θ是正切值为2 的倍数,即θi=arctan(2-i),则cosθi=(1+2-2i)-1/2 。假设以δi代表矢量的旋转方向,+1表示逆时针旋转,-1表示顺时针旋转,故第i 步旋转可用下式表示:
其中:(1+2-2i)-1/2为模校正因子。对于字长一定的运算,该因子是一个常数,用k表示,以16 bits字长为例,则:
可见,迭代运算不能使幅值比例因子恒为1。为了抵消因迭代产生的比例因子的影响,可将输入数据x,y校正后再参与运算,以避免在迭代运算中增加校正运算,降低cordic算法的速度。由此运算迭代式可以简化成:
式(5)运算仅通过加法器及移位器就可以实现。此外,若用zi表示第i次旋转时与目标角度之差,
则:
经过n次旋转后,式(5)的n次迭代可以得到以下结果:
本文介绍的数控振荡器的设计是在式(7)的基础上,给定x0=k ,y0=0,则迭代结果为:
将所需产生的角度值作为z0输入,通过式(5)、(6)的迭代运算,迭代结果输出的xn和yn就是所需要的三角函数值。
数控振荡器的fpga实现
图1是数控振荡器的顶层电路。由图可见,频率控制字寄存器将接收到的的频率控制字送入相位累加器,相位累加器对系统时钟进行计数,每到达输入频率控制字的值即对相位进行累加,随后将累加值送入相位相加器,与相位控制字寄存器接收到的初始相位进行相加,得到当前的相位值。其中,相位累加器是决定nco