DDS的了解關鍵在于厘清相位累加器、ROM查找表和DAC的位數的不同,如果将上述三者的位數混淆的話就很難了解DDS的原理。
直接數字頻率合成器DDS(Direct Digital Synthesizer)是從相位概念出發直接合成所需波形的一種頻率合成技術,通過控制相位的變化速度,直接産生各種不同頻率、不同波形信号的一種頻率合成方法。DDS 的基本結構如下圖 所示,它主要由相位累加器、正弦ROM 表、D/A 轉換器和低通濾波器構成。

DDS工作時,在時鐘脈沖fc 的控制下對頻率控制字K 用累加器進行處理以得到相應的相位碼,然後由相位碼尋址波形存儲器ROM進行相位碼―幅度編碼變換,再經過D/A 數模變換器得到相應的階梯波,最後經過低通濾波器對階梯波進行平滑處理即可得到由頻率控制字K 決定的頻率可調的輸出波形。波形存儲器所儲存的幅度值與餘弦信号有關。餘弦信号波形在一個周期内相位幅度的變化關系可以用下圖所示的相位圓表示,每一個點對應一個特定的幅度值。一個N位的相位累加器對應着圓上2的N次方 個相位點,其相位分辨率為 2pi除以2的N次方。若 N=4,則共有16種相位值與16種幅度值相對應,并将相應的幅度值存儲于波形存儲器中,存儲器的位元組數決定了相位量化誤差。在實際的DDS中,可利用正弦波的對稱性,可以将一個周期)範圍内的幅、相點減小到 四分之一周期内以降低所需的存儲量,量化的比特數決定了幅度量化誤差。
頻率控制字K可決定相應的相位增量,相位累加器則以步長K進行線性累加,相位累加器積滿時就會産生一次溢出,進而完成一個周期性動作,這個動作周期即是DDS合成信号的一個周期。通常N 位相位累加器的最小值為0,最大值為2的N −1次方。故最後輸出信号的頻率為
,頻率分辨率的大小為
,頻率分辨率也就是說頻率變化的最小機關,DDS輸出的頻率值都是頻率分辨率對應頻率的倍數。實際運用中,根據實際需要所計算出的K 很難為整數,是以不可避免地會存在頻率誤差。如将計算出來的K的小數部分舍去,那麼最終輸出信号的頻率誤差不超過頻率分辨率,如果将K 的小數部分四舍五入,則頻率誤差不會超過0.5倍的頻率分辨率。
Xilinx官方給出的DDS IP核的資料手冊中也介紹了DDS的原理但是原理了解起來不如上圖。
還有一個關鍵的問題就是累加器得到的相位是怎麼去尋址正弦ROM的,對于N位的相位累加器對應2的N次方數量的相位累加值,如果正弦ROM中存儲的點數也是2的N次方的話,對存儲容量和資源的要求就比較高了,實際上在尋址正弦ROM表時,用的是相位累加值的高位,也就是說并不是每個時鐘fc都從正弦ROM表中取一個數值,而是多個時鐘取一個值,這樣能保證相位累加器溢出時,從正弦ROM表中取出正好一個正弦周期的樣點。是以,相位累加器每計數2的N次方次,對應一個正弦周期。而相位累加器1秒鐘計數fc次,在k=1時,DDS輸出的時鐘頻率就是頻率分辨率。頻率控制字K增加時,相位累加器溢出的頻率增加,對應DDS輸出的頻率變為K倍的DDS頻率分辨率。