数字下变频器中坐标变换模块的ASIC实现

发布者:大伊山人最新更新时间:2007-08-13 来源: 中国集成电路关键字:迭代  函数  解调  幅值 手机看文章 扫描二维码
随时随地手机看文章

1.引言

数字下变频(DDC)技术是软件无线电接收机的核心技术。其基本功能是从输人的宽带高速数字信号中提取所需的窄带信号,将其下变频为数字基带信号,并转换成较低的数据率,以供后续的DSP作进一步的处理。目前许多型号的DDC芯片事实上其功能己远远不只是下变频,还包括了成形滤波器、定时同步内插滤波器、重采样NCO、坐标变换、数字ACC等功能,其结构如图1所示。

CORDIC(Coordinate Rotation Digital Computer)是一种迭代算法,它提供了计算三角函数和欠量求模的方法。该算法仅利用加法和移位两种运算通过迭代方式进行矢量旋转,因此,它非常适合于硬件A-SIC实现。本文所要阐述的就是基于CORDIC算法的数字下变频器中坐标变换模块的ASIC实现结构,该模块的主要功能是实现直角坐标系到极坐标系的变换,从而求得由I路信号和Q路信号构成的向量的幅度值和相位值,将得到的幅度信息返回给前级的数字AGC进行增益控制,还可以实现对FM信号的解调。

2.CORDIC算法与实现

2.1 CORDIC算法原理

CORDIC是一种迭代算法,它可以用来计算sin,cos等三角函数,计算幅值和相位等到所需的精度,CORDIC算法计算幅值和相位的原理如下:

假设直角坐标系内有向量A(Xn,Yn),向量A顺时针旋转θn后得到向量B(Xn,Yn),如图2所示。


向量A和向量B之间存在以下关系,用矩阵表示为

将cosθn提出以后得到

在这里我们取0i=arctan(1/2i),所有迭代的总和为,其中Si={-1,+1},则tanθi=Si2-i,可得

上式Si中的符号决定了向量的旋转方向,当时Yi≥0,Si=1,顺时针旋转;当Yi<0时,Si=-1,逆时针旋转,式中的cosθi=cos(arctan(1/2i),随着迭代次数的增加它收敛于一个常数,我们暂不考虑这个常数增益,这样式(2-3)就变为

设总共旋转的角度为,初值为0,则,给定向量 一组初值如下

从上面的式子可以看出,当向量A旋转到X轴时,可以得到迭代的结果为 ,即可求得向量A的幅值和相位。由式(2-4)可知每次旋转的角度的正切值都是2的负幂次,在硬件实现时只需要执行右移和相加运算就可以实现每次迭代,易于硬件的实现。

2.2 用CORDIC算法的流水结构实现坐标变换

CORDIC迭代结构如图3所示,采用流水结构每次迭代完成一次旋转,每级迭代都用寄存器寄存,这样每个时钟周期都可以计算出一次幅度和相位。迭代的次数越多,精度越高,当然耗费的资源也就越多。

在数字下变频器输出I,Q两路信号后(输出信号用补码表示),用CORDIC实现坐标变换时,为简化电路结构,只用计算的相角,其他象限的相角,采用处理后再映射的办法求取,冈此,对刚进入的数据会进行预处理。首先就是求输人数据的绝对值,并记录符号位作为处理后象限映射的依据。接下来,会判断I,Q两路数据的大小关系,并将较小的值交换到Q路,这样做的目的是要在同样的迭代次数下,达到更高的迭代精度。进入CORDIC迭代单元前会对I,Q两路数据进行位宽拓展,从而保证CORDIC迭代过程中,不会因截断误差造成太大的偏差。经过CORDIC迭代后所得的幅度值是有增益的,此时需要对其进行修正,另一方面,相位值需根据先前记录的I,Q两路数据的符号位和I,Q两路数据交换的情况作象限映射,表1列出了相位映射的规则。坐标变换模块的实现结构如图4所示。



2.3 使用modeIsim仿真的结果

图5是当输入激励为I路:sin(sin2πf);Q路:COS(COS2πf)时的modelsim仿真结果,由图中可以看出坐标变换得出的相位值是一个标准正弦信号,幅度值为恒定值,幅度相位完全正确。

2.4 硬件实现结果

在硬件实现时,用verilog语言对坐标变换模块进行描述,为满足DDC的精度要求进行了18次迭代,并用DC基于UMC0.18μm的库进行了综合,硬件实现结果如图6所示。

图6(a)是DC综合后的面积报告,图6(c)是关键路径的时序报告,综合后的最大路径延时为9.77ns,完全可以满足本模块数字下变频器100MHz的处理速度要求,综合出的单元(cell)的总面积仅为0.27。图6(b)是该设计在FPGA上验证的结果,该DDC的工作频率为80MHz,通道2为输入的基带信号频率20kHz,载波频率5MHz,频偏200KHz的FM信号,通道1是通过DDC下变频后交给坐标变化模块的I,O两路信号求出的相位信息,即频率为20kHz的正弦信号,由图可知该没计实现了坐标变换功能。

3 结论

使用CORDIC算法,并用流水结构实现幅度相位的求取可以获得较高的处理速度,增加迭代次数可以获得更高的处理精度,但会耗费较多的资源,在设计时应根据需要,合理的确定迭代次数。该设计已成功应用于高速数字下变频芯片中。

关键字:迭代  函数  解调  幅值 引用地址:数字下变频器中坐标变换模块的ASIC实现

上一篇:什么是DSP?
下一篇:数字下变频器中坐标变换模块的ASIC实现

推荐阅读最新更新时间:2024-05-02 20:37

STM32单片机是怎样执行中断函数中的应用的
在STM32单片机的编程当中,中断函数的名称都是xxx_IRQHandler格式的。那当编译程序的时候是怎么知道这是一个中断函数的呢? 每个中断都是有入口地址的。程序在执行过程中遇到中断的时候,会先判断这个中断的类型,根据类型再到中断向量表中查找,找到之后,根据表中指明的地址,程序就跳到该地址开始执行代码。 ST提供的固件库当中,有提供一个stm32f10x_it.c文件,打开之后会发现里面放的都是些空函数,但是名字都是“xxx_Handler()”格式,需要使用某个中断的时候,在代码中使能该中断,并到这个文件中将中断服务函数添加上,就可以了。 而这些名字就是一个个的中断函数入口地址。在启动代码中便有这些定义。如下图所示:
[单片机]
multisim中函数信号发生器怎么接
Multisim中函数发生器的三个端子,“+”和“-”输出是振幅相同但极性相反的信号(均相对于“COM”),即当“+”端输出波形为正半周波时,“-”端输出为负半周波。如果信号是从“+”(或“-”)和“COM”的两端提取的,则信号幅度是设定的峰值Vp值。如果从“+”和“-”的两端引出信号,则信号幅度为设定峰值Vp的两倍。 函数信号发生器(XFG1):“+”表示正输出端,“—”表示负输出端的中间是公共端的正输出端,负输出端接在电路上产生相应的信号而公共端接地。 信号发生器的正输入端接C5输入端口,负输入端接GND,示波器A相的正输入连接到信号发生器的输入端口,示波器的B相输入连接到U3的输出端口,示波器的两个负输入连接GND。
[测试测量]
multisim中<font color='red'>函数</font>信号发生器怎么接
配备苹果5G调制解调器的新款iPhone SE据说将在2025年推出
据分析师Jeff Pu称,苹果计划在2025年发布一款配备定制设计的5G调制解调器的iPhone SE。他在周二与海通国际证券的一份研究报告中说,该调制解调器将由苹果的芯片制造伙伴台积电制造。 这一信息是在分析师郭明錤说苹果重启第四代iPhone SE的开发两个月后发布的,该产品配有6.1英寸OLED显示屏和苹果设计的5G调制器。他说,该调制解调器将采用台积电的4纳米工艺制造,只支持6GHz以下频段,这意味着最初不支持毫米波。 第四代iPhone SE的量产将在2024年上半年开始,高通CEO也预计苹果的调制解调器将在2024年上市,但普认为该设备的上市时间已经推迟到了2025年。 目前的iPhone SE于2022年
[手机便携]
STM32串口实验中重定向c库中的printf()函数和scanf()函数
在STM 32 的串口实验中,往往需要把内容打印输出在串口调试助手中,这时就需要重定向c库中的printf()函数,重定向后可使用。 注意下面的FILE的定义在头文件stdio.h中,所以在写程序时需要包含此头文件。 例: int fputc(int ch,FILE *f) { USART_SendData(USART_TypeDef* USARTx, uint8_t Data); //发送一个字节数到串口 while(USART_GetFlagStatus(USART_TypeDef* USARTx, USART_FLAG_TC)==RESET); //等待发送完毕 return(ch);
[单片机]
老司机们坐稳扶好 一加手机3配置要飚车
     根据已曝光的资料,一加3将是刘作虎所描述的“全面顶配的互联网精品”。GeekBench数据库显示,一加3 搭载骁龙820处理器(MSM8996),有4GB RAM和6GB RAM两个版本,单核、多核跑分相当给力。安兔兔数据库显示,一加3仍采用全高清屏幕,前置800万、后置1600万像素摄像头,配备4GB RAM+32GB ROM。   根据科技评论人摩卡RQ消息,一加3在外观设计上延续中性偏直男的风格,基本配置信息与上述数据基本一致。不过一加3不再采用LCD屏幕,而是换用5.5英寸全高清Super AMOLED屏幕,有可能在机身厚度上较前代有所突破。   一加老大刘作虎此前曾表示,一加手机X之后“所有迭代的手
[手机便携]
STM32程序无法进入main函数的解决方法
很多人在基于STM32单片机项目开发过程中,会遇到STM32程序无法进入main的现象,在这篇文将分享STM32程序无法进入main函数的解决方法,希望对用户有所帮助。 1.printf等函数采用了半主机模式 解决方法:关掉半主机模式,将输入输出端重定向到ARM器件上,重写fputc和fgetc函数。 2.系统滴答systick中断导致无法进入main函数 解决方法有两种: 1)在bootloader程序跳转到app层时就关闭系统滴答中断:SysTick-》CTRL &= ~SysTick_CTRL_ENABLE_Msk; 2)在SystemInit函数关闭系统滴答中断:SysTick-》CTRL &= ~SysTick_CT
[单片机]
基于51单片机的函数发生器的设计实现
1 引言   在自动控制系统设计及调试过程中,不同频率的正弦波、三角波和方波常作为信号源,应用十分方便。过去常由分立元件及集成运放构成振荡器,后来出现的ICL8038其最高频率仅能达到100kHz。而MAX038芯片性能更好,最高频率可达20MHz,且三种波形由同一端输出。单片机控制品质卓越,基于单片机的函数发生器运行可靠,操作方便。 2 高频信号发生器芯片MAX038简介   MAXIM公司生产的MAX038芯片是一种高频精密的函数发生器,可产生三角波、锯齿波、正弦波、方波及脉冲波,且频率及占空比的控制可独立进行。   Lin管脚电流范围在10~400μA时电路获得最佳工作性能。输出波形的选择由逻辑地址引脚A0和A1的组合
[单片机]
基于51单片机的<font color='red'>函数</font>发生器的设计实现
#include<math.h>中包含的函数说明
求取绝对值的函数 int abs(int i); //返回 整型 数i的绝对值; 例如 int abs(-3.5) == 3.5; //double cabs( struct complex znum); //返回复数znum绝对值; double fabs(double x); //返回双 精度 数x的绝对值;例如 double fabs(-103.5) == 103.5; long labs(long n); //返回长整型n的绝对值;例如long labs(-1111122222) == 1111122222; 求取对数和指数函数 double log(long double x)
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved