0 引言
在无线电接收机系统中,由于会受到发射机运动、接收机运动和标准频率随时间动态变化等因素的影响,其接收机接收信号往往会发生频率偏移,因而需要进行频偏校正。在扩频通信系统中,频偏校正电路能消除中频偏移对接收机扩频码的捕获以及数据解调性能的影响,从而提高接收机的性能。
频偏校正电路中通常需要根据给定相位产生余弦信号和正弦信号,其中最重要的实现技术是CORDIC (Coordinate Rotation Digital Computer,坐标旋转数字计算机)算法。本文将详细分析CORDIC算法的原理及其FPGA实现方法。
1 CORDIC算法的基本原理
在直角坐标系统中,假设有一向量(x,y),按逆时针方向旋转φ度得到向量(x1,y1),则两向量的代数关系为:
在式(1)中,如果让旋转的角度φ满足条件:tanφ=±2-i,则式(1)中的乘法操作就可以转换为移位操作,从而很容易在FPGA中实现。图l所示是直角坐标下的向量旋转示意图。若需要旋转的角度为θ,那么就可以通过n次旋转一系列预定角度αi来完成。
(2)式中,di表示每次旋转的方向为αi。由于每次旋转都为预定角度值,所以cosαi为常数,而n次旋转中每次迭代的处理可表示为:
[page]
一般情况下,当旋转的次数足够大时,Ki一般为常数。由于在实现时,可在最终的计算结果中再乘以这一常数,所以,可以去掉式(3)中的Ki,这样,迭代方程就仅含移位和加法运算,从而大大的简化了FPGA的实现复杂性。由于还需要一个方程决定di的符号,引入变量zi表示每次旋转预定角度的累加值:
这样,CORDIC算法的迭代方程可表示为:
其最终结果为:
在频偏校正电路中,通常需要根据给定相位θ产生余弦信号cosθ和正弦信号sinθ。为了产生标准且无放大的正弦和余弦信号,可令输入向量的y分量(即yo)为0,x分量(即xo)为1/An,这样,式(6)就可简化为:
可见,经过上述处理就可将输入相位zo转换为标准的正弦和余弦信号。
2 CORDIC算法的FPGA实现
用FPGA实现CORDIC算法,最常用的方法有迭代算法和基于流水线的算法。CORDIC迭代算法只有一级迭代单元,在系统时钟的驱动下,可将迭代单元的输出作为本级的输入,并通过同一级迭代完成计算。迭代算法的硬件开销很小,但完成一次CORDIC运算需要多个时钟周期,其运算速度相对较慢。
在CORDIC流水线结构算法中,每一级CORDIC迭代运算都使用单独的运算单元,当流水线填满之后,每个时钟周期都马上会计算出一组结果,所以计算速度很快。
虽然流水线结构算法的计算速度很快,但其精度会受到流水线级数的限制。而要提高精度,就必须增加流水线级数,从而增大硬件开销,因此,流水线级数的选择要兼顾速度和精度的要求。[page]
3 实现方案与仿真结果
3.1 实现方案
CORDIC算法的流水线流程图如图2所示,该方法采用7级流水线,故可大大提高计算速度。
3.2 仿真结果
基于CORDIC算法的正余弦信号发生器的仿真结果如图3所示,由图3可见,该算法可以实现标准的正弦波和余弦波,并可直接作为频偏校正单元。
4 结束语
本文通过对CORDIC算法的工作原理进行分析,给出了基于CORDIC算法和FPGA实现数字频率校正的实现方案。仿真结果证明,该方法可以实现标准的正弦波和余弦波信号,可以直接作为频偏校正单元来对数字频率信号进行校正。
关键字:FPGA 数频率校正 CORDIC 无线电接收机 频偏校正
引用地址:
数字频率信号校正的FPGA实现
推荐阅读最新更新时间:2024-05-02 21:12
FPGA与CPLD的辨别和分类
FPGA与CPLD的辨别和分类主要是根据其结构特点和工作原理。通常的分类方法是: 将以乘积项结构方式构成逻辑行为的器件称为CPLD,如Lattice的ispLSI系列、Xilinx的XC9500系列、Altera的MAX7000S系列和Lattice(原Vantis)的Mach系列等。 将以查表法结构方式构成逻辑行为的器件称为FPGA,如Xilinx的SPARTAN系列、Altera的FLEX10K或ACEX1K系列等。 尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点: ①CPLD更适合完成各种算法和组合逻辑,FP GA更适
[嵌入式]
FPGA市场:28nm时代将进一步蚕食ASIC
在FPGA领域,我们再次闻到了沉重的火药味。2010年中国农历新年前后,FPGA的28nm交响曲奏响。 与Altera抢先发布进入40nm FPGA时代不同,在进入28nm之时,两大厂商赛灵思(Xilinx)及Altera都显得十分积极,在 Altera2月2日率先公布28nm技术创新之后 , Xilinx又于2月23日公布了其28nm的新一代FPGA平台 。显然,两家公司均认为,占领工艺的制高点才能更好地与ASIC进行争夺,同时也更好地打击对手。 根据IBS2009的数据表示,在开发成本增加而风险和复杂性成倍增加的今天,ASIC产品的种类在每个节点减少50%,ASIC业务总量则每年减少5%。而ASSP的商业
[EEWORLD独家]
自动驾驶主流架构方案对比:GPU、FPGA、ASIC
主流架构方案对比:三种主流架构 当前主流的 AI 芯片 主要分为三类, GPU 、 FPGA 、 ASIC 。GPU、FPGA均是前期较为成熟的芯片架构,属于通用型芯片。ASIC属于为AI特定场景定制的芯片。行业内已经确认 CPU 不适用于AI计算,但是在AI应用领域也是必不可少。 01 GPU方案 GPU与CPU的架构对比 CPU遵循的是冯·诺依曼架构,其核心是存储程序/数据、串行顺序执行。因此CPU的架构中需要大量的空间去放置存储单元(Cache)和控制单元(Control),相比之下计算单元(ALU)只占据了很小的一部分,所以CPU在进行大规模并行计算方面受到限制,相对而言更擅长于处理逻辑控制。
[汽车电子]
iPhone 7内建FPGA芯片 可能为苹果布局AI关键
苹果(Apple)新一代iPhone 7系列9月上市至今已近1个月,知名拆解网站如iFixit及Chipworks早已拆解iPhone 7一窥内部构造,除了LTE Modem芯片上苹果由高通(Qualcomm)及英特尔(Intel)双供应商供货最令人惊讶外,在众多零组件中有一个名为“现场可程式化闸阵列”(FPGA)则被外界所忽略,不过该芯片来头不小,外界推测可能是苹果欲发展人工智能(AI)之路的先导关键配置。
仅极少数手机搭载过FPGA芯片
根据富比士(Forbes)报导,Chipworks表示,这款FPGA芯片是由美国莱迪思半导体(Lattice Semiconductor)所生产,型号为“ICE5LP
[手机便携]
FPGA+DSP实时三维图像信息处理系统
三维图像 信息处理一直是图像视频处理领域的热点和难点,目前国内外成熟的三维信息处理系统不多,已有的系统主要依赖高性能通用PC完成图像采集、预处理、重建、构型等囊括底层和高层的处理工作。三维图像处理数据量特别大、运算复杂,单纯依靠通用PC很难达到实时性要求,不能满足现行高速三维图像处理应用。 本系统中,采用FPGA实现底层的信号预处理算法,其处理数据量很大,处理速度高,但算法结构相对比较简单,可同时兼顾速度和灵活性。高层处理算法数据量较少、算法结构复杂,可采用运算速度快、寻址方式灵活、通信机制强大的DSP实现 。 1 三维图像处理系统组成 1.1 硬件系统构成 该系统由五个模块组成,
[嵌入式]
基于FPGA的TDICCD8091 驱动时序电路设计
0 引言 时间延时积分电荷耦合器件(Time Delay and Integra-tion Charge Coupled Devices,TDICCD)易于实现实时成像,可与小相对孔径的光学系统配合成像,从而大幅度减少遥感相机的体积和质量,因此广泛应用在航空航天、火控系统和远海探测等领域。现场可编程逻辑门阵列(FPGA)在航空航天、工业自动化、仪表仪器、计算机设计与应用、通信、国防等领域的电子系统中的技术含量正以惊人的速度提升。完整的电子系统在单一FPGA芯片中实现早已成为现实,电子类新技术项目的开发也更多地依赖于FPGA技术的应用。 TDICCD是一种时间延迟积分图像传感器件,精准可靠的时序逻辑信号是TDICCD工作的最基本条件
[电源管理]
京微雅格率先推出国内首款低功耗FPGA芯片CME-HR(黄河)系列
5月14日北京讯--最近几年,随着便携式产品及物联网的兴起,在发展迅速的消费类电子市场中新公司及各式新产品如雨后春笋般蓬勃发展,这些新产品不但功能越来越丰富,而且更新速度更快。例如智能手机、平板电脑、平面显示器、便携式媒体播放器以及家庭互联网等产品等。对这些采用最新技术的消费类电子生产商而言,如何更快地、更好地提供适合市场热点及客户不断变化的需求是一个很大的挑战。特别是物联网和可穿戴设备的发展,已经从应用形式到实现方法上与以往的概念完全不同了。 如智能手机平台,其平均的生命周期不足1.5年。那么如何在这么短的时间内,提高快速反应市场的能力,如何丰富功能以最大程度的贴近用户,特别是如何应对客户产生的对产品改进需求和差异
[嵌入式]
STM32单片机SPI总线与FPGA的通信设计
最近在研究SPI总线,至于协议和硬件描述就不多说了 四线包括时钟、片选、接收、发送 初始化SP SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //全双工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //主模式 SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; //16bit宽度 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2E
[单片机]