DDS原理及FPGA實現(xiàn)
一個按一定速度沿x軸行進,同時半徑按一定頻率在圓周上滑動的圓,最后留下的痕跡就是一個正余弦波。
DDS全稱直接數(shù)字頻率合成(Direct Digital Synthesis),簡單來講,分以下幾步:
1.抽樣
但一般來講,為了波形的完整,我們一個周期中最少保留的點還會多一些。如果假設一個周期最小4個點,采樣頻率為為100MSPS,那我們可以還原的源信號的頻率最大為25M
我們通常對一個周期采樣的點數(shù)為2^N個,在這里,我采樣為2的8次方,即256個。
采樣的過程可以通過matlab進行模擬,設置好采樣的位寬和深度便可以生成采樣數(shù)據(jù)。
得到的部分采樣數(shù)據(jù)如下
2.合成
DDS技術(shù)的核心,簡單來說就是將我們的抽樣數(shù)據(jù)還原成模擬信號。還原的方式和文章講到的一樣:以一定的頻率將抽樣數(shù)據(jù)依次輸出,就可以還原波形。
假設,以100M的頻率輸出我們的1024個抽樣數(shù)據(jù),則將會得到一個頻率為
的正弦波。這就達到了最初的信號輸出。
那如何調(diào)頻呢?
調(diào)頻的方案有兩種:一種是改變我們的時鐘頻率,將我們讀取抽樣數(shù)據(jù)的速度變快或者變慢,這樣就可以改變頻率。這種方法對于當下很多開發(fā)板固定的晶振頻率來說比較難以實現(xiàn)。
另一種方案就是減少我們輸出的抽樣數(shù)據(jù),輸出的抽樣數(shù)據(jù)越少,按照上面的公式,頻率便會越高。
比如說,我們最開始查數(shù)據(jù)是按照依次加一的方式,那我們改成依次加二,顯然,這樣做之后,輸出頻率便會提高。但也會帶來一個問題,我們輸出的點數(shù)少了,那么點與點之間不再平滑,輸出的波形會變得階梯化。
顯然加一會得到一個頻率,加二會得到另一個頻率,但這兩個頻率都不是我想要的怎么辦?
如何精準調(diào)頻?
假設我們需要得到一個頻率很低的信號,1KHZ,而我們的時鐘頻率為100M,我們在一個周期內(nèi)輸出1024個點也達不到這樣的頻率。因此我們就需要在輸出的每個數(shù)據(jù)之間進行等待,可以通過設置計數(shù)器來解決這個問題。為了使輸出的信號盡可能的低,我們設置一個32位的累加器。將高10位作為查表的地址。對于1KHZ,有
所以,累加值f w o r d fwordfword為4295。
其余頻率對應的累加值均可以按此公式計算。
如何解決階梯化?
從數(shù)字上來看,波形變得階梯化是因為我們輸出的抽樣數(shù)據(jù)減少,點與點之間不再平滑。但是從另一個角度理解,波形變得階梯化的原因是因為疊加了其他雜波
我們簡單地波形變得階梯化理解為趨近于方波。下圖是方波的合成。
由方波的傅里葉級展開式
可以得出,方波是由無數(shù)個奇次諧波疊加起來的,頻率為2n-1倍,幅度為
因此,若我們的波形也是疊加了高頻的諧波導致波形階梯化,那么就通過低通濾波器來濾除高頻諧波,得到平滑的波形。
DDS的原理圖如下:
3.實現(xiàn)
基于FPGA的DDS,就是按照上面的原理來實現(xiàn)的。
我這里只儲存了256個數(shù)據(jù),至于原因,后面會講到。
(2)累加
設置一個32位相位控制字和頻率控制字,進行累加。
這里我只儲存了2^8個波形數(shù)據(jù),是為了節(jié)省寄存器資源。因為一個周期的正弦波的四個相位實際上數(shù)據(jù)是有關(guān)聯(lián)的,知道第一相位的數(shù)據(jù),便可推導出另外三個相位的數(shù)據(jù)。
代碼中,00表示第一相位,此時按照正常的查表順序即可。
01表示第二相位,此時,查表的順序應當是2^8-地址值。但實際上這個減法的操作就是異或的操作。
相減后,地址值8位中原本的“1”變?yōu)?,原本的“0”變?yōu)?,正好和異或的原理相同。這里為了方便,就直接寫了異或。實際上寫256-addr_cache[7:0]也是一個效果。
其余兩個相位,查表的方式類似。
(4)轉(zhuǎn)換
因為我這里的256個數(shù)據(jù)是第一相位的,而第三第四相位的數(shù)據(jù)是等于2^10減去第一相位的值,因此這里需要將輸出的數(shù)據(jù)轉(zhuǎn)換一下。
(5)測試
通過串口分別發(fā)送01999b60和031a5f60,由上面公式
可以算出分別是1M和2M的頻率控制字
以上便是DDS的FPGA實現(xiàn)。
原文標題:FPGA學習-DDS原理及FPGA實現(xiàn)
文章出處:【微信公眾號:FPGA設計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21748瀏覽量
603907 -
DDS
+關(guān)注
關(guān)注
21文章
634瀏覽量
152704
原文標題:FPGA學習-DDS原理及FPGA實現(xiàn)
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論