AD9833產生高頻信號的諧波
AD9833是一款AnalogDevices公司提供的數字信號可編程信號發生器芯片。它一般配有外置的主時鐘信號,每次時鐘信號將將內部28位的相位累加器遞增一個相位數值。該相位數值由芯片SPI串口被外部的MCU設置。
相位累加器的高12位選擇內部4096個ROM存儲器所存儲的正弦波信號採樣數據,然後送到後面的10BIT的DAC,最終產生所合成的信號。
雖說AD9833能夠在外部25Mhz的主時鐘的驅動下,最高產生12.5Mhz的波形,但所產生的正弦波形的失真就很嚴重了。
下面實驗所使用的AD9833外部的主時鐘的頻率爲25Mhz。根據它的工作原理,它是對一個週期的正弦波的數字採樣數據(10BIT,4096個數據點)重新按照25Mhz進行採樣輸出。通過設置每次採樣遞增的相位,最終決定了輸出信號的頻率。
AD9833原理框圖
例如,如果25Mhz採樣的遞增相位是2/5,那麼每經過物次採樣就加成一個週期的正弦波輸出,所以輸出的正弦波的頻率是25Mhz的五分之一,即5MHz。由於每個週期的正弦波只使用五個採樣點表示,所以輸出的波形在時間軸上的量化誤差比較大,波形失真比較嚴重。
下圖是通過示波器採集到的AD9833輸出5Mhz的時候信號的波形。
採集AD9833產生的5Mhz的波形
上述失真正弦波形的頻譜,包含了很多高次諧波,通過DSA815採集顯示它的頻譜如下圖所示:
AD9833波形的頻譜
頻譜中除了5Mhz的基頻信號之外,還有20MHz,30Mhz, 45MHz諧波信號。沒有10Mhz,15Mhz,35Mhz的頻譜。
將DSA815觀察頻譜的範圍放大到100Mhz,所得到AD9833所產生的5Mhz的頻譜如下面動圖所示。除了基波頻譜之外,它的高斯諧波頻率爲 25Mhz Mhz,即序列{20, 30, 45, 55,70,80…}
試驗所使用的電路板是在前面實驗過程中製作的, 它們的連接分別是:
1. AD9833數字信號發生器;
2. 使用9833諧波發送調頻信號;
通過數據可以模擬計算出對於正弦波進行每個週期5個採樣點所產生的波形數據。隨着採集的波形數據減少,波形失真逐步增大。
繪製上述波形的Python代碼如下面所示:
#------------------------------------------------------------
SAMPLE_POINTS = 5 # Sample points number per-period
t = linspace(0, 4 * 2 * pi, 200)
sint = sin(t)
sintt = []
step = SAMPLE_POINTS * 4
for i in range(step):
v = sint[int(i * len(sint) / step)]
n = len(sint) - int(i * len(sint) / step)
if i < step - 1:
if n > int(len(sint) / step):
n = int(len(sint) / step)
sintt.extend([v] * n)
plt.plot(t, sint, label='Sinusoid')
plt.plot(t, sintt, label='Undersample')
plt.xlabel('Samples')
plt.ylabel('Amplitude')
plt.grid(True)
plt.legend(loc='upper right')
plt.show()
如何減少AD9833的波形失真?
波形失真的主要原因來自於在所產生的正弦限號的每一週期內的採樣點數過少。隨着採樣點增多,所產生的波形失真就會減少。
下圖顯示了使用相同的主震盪頻率(25Mhz)分別產生從1M~12.5MHz的波形。顯示出隨着波形頻率增加,信號的失真程度增加。
增加採樣點的個數,在相同的主頻下,所產生的信號的頻率就會降低。所以需要根據實際信號的頻率範圍,合理選擇主頻率。
每個週期採樣個數從4個增加到50個,對應的波形失真情況