湯文亮
(華東交通大學 軟件學院,南昌 330013)
直接數(shù)字頻率合成(DDS)是一種信號頻率合成技術,它具有頻率分辨率高、轉換速度快、相位連續(xù)等許多優(yōu)點,并朝著高頻率、多功能、多通道、低功耗等方向發(fā)展。DDS系統(tǒng)主要由相位累加器、相位幅度轉換電路和數(shù)模轉換電路等部分組成。它通過相位累加器將相位按頻率調節(jié)控制字指定的步長進行累加,再由相位-幅度轉換電路將瞬時相位轉換為其對應的正弦值或余弦值序列輸出,最后經由數(shù)模轉換電路和低通濾波,即可得到模擬正弦波或余弦波信號。
DDS傳統(tǒng)采用查找表方法實現(xiàn), 但其存放相位到幅度轉換的查找表ROM的大小和相位精度的位數(shù)成指數(shù)關系。當精度要求很高的時候需要大容量ROM,使系統(tǒng)的處理速度降低。因此,采用查表法方法無法設計高速、高精度的DDS。采用CORDIC算法來實現(xiàn)超函數(shù)時[1,2],則無需使用乘法器,它只需要一個最小的查找表(LUT),利用簡單的移位和相加運算,即可產生高精度的正余弦波形,尤其適合于FPGA的實現(xiàn)。采用CORDIC算法能實現(xiàn)高速高精度的DDS。本文先介紹CORDIC算法原理,再詳細講述基于CORDIC 算法的DDS實現(xiàn)。
CORDIC算法[4]是Volder于1959年在美國航空控制系統(tǒng)的設計中提出來的,它是一種用于計算運算函數(shù)的循環(huán)迭代算法。從廣義上講它是一個數(shù)值計算逼近的方法。這些固定的角度與計算基數(shù)有關,運算只有移位和加減。傳統(tǒng)上計算三角函數(shù)和其他一些硬件不易實現(xiàn)的函數(shù), 一般使用查表法、多項式展開或近似的方法[3]。這些方法不能兼顧速度、精度、簡單性等方面的要求。CORDIC算法正是為解決這種問題而產生的。它從算法本身入手,將復雜的算法分解成一些在硬件中容易實現(xiàn)的基本算法,如加法、移位等, 從而使得這些算法在硬件上可以得到較好的實現(xiàn)。
如圖1所示,假設直角坐標系內有一個向量a(Xa,Xa),逆時針旋轉θ角度后得到另一個向量b(Xa,Xa)。
圖1 向量單次旋轉
圖2 向量多次旋轉
這個過程可以用矩陣形式表示如下:
如果向量a(Xa,Xa)經過n次旋轉才到達向量b(Xa,Xa),如圖2所示。其中第 次旋轉的角度為θt,那么第i次旋轉的表達式為:
到此為止沒有任何簡化, 為了便于硬件實現(xiàn)限制tanθi=±2-i,即θi=±arctan2-i,θ的值可以存放在一個小的查找表中。通過一系列連續(xù)的小角度旋轉,可以得到任意小的旋轉角度。旋轉角度總和為當檔si=-1;時表示向量是逆時針旋轉,當 時表示向量是順時針旋轉。這時式(3)變?yōu)椋?/p>
式中k是一個常數(shù)增益, 暫時不考慮這個增益因子,式(4)可以寫成:
式(7)就是CORDIC的迭代式,它只需要通過移位和相加就可以完成矢量旋轉。
設z0是a,b兩向量的夾角,要使a旋轉到b,則Si的符號由第i次旋轉時的角度,它們的關系如下:zi<0時, Si=-1;zi≥0時, Si=+1(特殊情況下, z0<0時,Si=-1;zi≥0時,Si=+1 )。
向量a向量b 逼迫的精度由迭代的次數(shù)決定,迭代的次數(shù)越多,逼迫的精度就越高。迭代n次(n→∞)得到的最終結果為:
得到的結果為:
從式(8)、(9)和(10)可以看出,給適當初值,通過本算法可以計算出cosine和sine,這就是CORDIC算法的旋轉模式。
CORDIC旋轉的移位相加流水結構,每一級流水線單元只需3個加減法器、2個移位寄存器和1個系數(shù)存儲器,非常節(jié)省資源,如需提高精度,只需簡單地增加流水單元即可,擴展性很好。這種流水線結構在正常工作時只需一個時鐘周期就可輸出一個數(shù)據,可實現(xiàn)高速實時處理,非常適合于在FPGA 中實現(xiàn)。圖3是DDS頂層電路設計圖,頻率控制字寄存器將頻率控制字送入相位累加器,相位累加器對系統(tǒng)時鐘進行計數(shù),每到達輸入頻率控制字的值,即對相位進行累加,隨后將累加值的高16位送入相位相加器,與相位控制字寄存器接收到的初始相位進行相加,得到當前的相位值。然后把當前相位值的最高位用作象限判定,并把低15位擴展1位符號位用于基于CORDIC的函數(shù)發(fā)生器。
圖3 DDS頂層電路設計圖
針對迭代結構的缺點,我們設計中可以采用進位鏈和流水線技術相結合的方法,采用該方法實現(xiàn)的相位累加器既能保證具有較高的資源利用率,又能大幅提高系統(tǒng)的性能和速度。CORDIC算法采用流水線型設計。該設計有兩個優(yōu)點:第一,它的移位寄存器進行迭代法比可變移位寄存器簡單的多。第二,它沒有在角計算中存儲常量的ROM,可以用硬件直接來實現(xiàn)。因此在實際設計中,采用流水線型設計的CORDIC運算單元正常工作時只需一個時鐘周期就能輸出一個數(shù)據,為數(shù)據實現(xiàn)高速實時處理提供了前提。
在Quartus II開發(fā)環(huán)境中,使用基于查找表和基于CORDIC算法實現(xiàn)DDS的方法設計實現(xiàn)一個相同指標要求的DDS系統(tǒng),并進行性能指標分析。本設計的DDS的相位累加器位數(shù)為30位,正弦值量化位數(shù)為8位。使用該兩種方法實現(xiàn)的DDS,其正弦值輸出精度很相近,基于CORDIC算法實現(xiàn)的DDS比基于查找表實現(xiàn)的DDS運行速度快4倍多,其最高工作時鐘頻率如表1所示。
表1 運行速度性能對比
當本設計的DDS系統(tǒng)使用系統(tǒng)時鐘為100M,輸出信號頻率的頻率分辨率為0.096Hz。輸出頻率 時,M=20C4A8;輸出頻率 時,M=106254。當頻率控制字為20C4A8時,輸出正弦波的周期為500ns,即正弦波的頻率為2MHz;當頻率控制字為106254時,輸出正弦波的周期為1000ns,即正弦波的頻率為1MHz,仿真正確。本設計的所有模塊用HDL語言編寫,在Quartus II下進行了功能仿真,仿真結果圖如圖4所示。
圖4 DSS輸出正弦信號仿真圖
本論文分析了CORDIC算法實現(xiàn)DDS中相位到幅度轉換的原理,詳細講述了一種優(yōu)化的基于CORDIC算法實現(xiàn)高速高精度DDS的方法。最后在FPGA上實現(xiàn)了一個產生正弦/余弦信號高速高精度DDS,該DDS非常適用于在軟件無線電中進行高速高精度的數(shù)字調制解調。
[1] 李滔,韓月秋.基于流水線CORDIC算法的三角函數(shù)發(fā)生器[J].系統(tǒng)工程與電子技術,2000,2(4):85-87.
[2] 周柱,張煒.基于CORDIC的優(yōu)化的直接數(shù)字頻率合成器[J].電子工程師,2005,31(10):34-37.
[3] Vankka J,Halonen K.Direct digital synthesizers:theory,design and applications[M].Norwell:Kluwer Academic,2001:3372402.
[4] Volder J E.The CORDIC Trigonometric Computing Technique[J].IRE Transactions on Electronics Computers,1959,8(3):330-333.