字波形閉環(huán)與回環(huán)驗證)
簡介面向FPGA數(shù)字信號處理學習者的DDS與ADDA回環(huán)測試工程基于Zynq底板與黑金AN108模塊以50MHz時鐘驅(qū)動DDS IP合成正弦波經(jīng)DAC輸出再自環(huán)回ADC由MMCM分頻提供25MHz采樣時鐘用ILA采集不少于2048個樣點并配合Matlab做頻譜分析還可通過VIO改頻率字生成1MHz與3MHz信號驗證工程特別提示AN108為34針插頭、1腳須與底板對齊低通濾波器通帶約0-20MHz。包內(nèi)共613個文件、約46.11MB以75個Verilog源文件、25個VHDL文件、16個XDC約束、11個XCI配置及19個DCP檢查點為主另含DO/SH腳本、CSV采樣數(shù)據(jù)、ILA與BIT文件覆蓋源碼、約束到驗證數(shù)據(jù)的完整鏈路。已有321人學習讀者可獲得可復現(xiàn)的工程與約束、現(xiàn)成的采樣數(shù)據(jù)與Matlab分析腳本并借助腳本快速搭建環(huán)境、排查插裝與時鐘配置問題。1. DDS ADDA 測試工程文件一塊板子上的數(shù)字波形閉環(huán)調(diào)一塊新打的 ADDA 板最怕的是 DAC 有輸出、ADC 也能采但兩邊對不上頻率差一點、波形削頂、頻譜上多出一排諧波。這份 DDS ADDA 測試工程文件就是把這個閉環(huán)拆開FPGA 內(nèi)部用 DDS 產(chǎn)生正弦、三角或方波經(jīng) DAC 送出再被 ADC 采回最后通過在線抓數(shù)或串口把數(shù)據(jù)取出來做 FFT。它適合剛拿到 ADDA 板、需要快速驗證收發(fā)鏈路的人也適合想把 DDS 頻率控制字、LUT 量化、時鐘域這些參數(shù)一次講清的人。工程文件不是“點開就能跑”的演示里面每個參數(shù)都會影響回環(huán)結(jié)果下面按鏈路拆。2. 拆開工程看鏈路DDS 相位累加器、LUT 與 ADDA 回環(huán)工程文件拿到手先別急著編譯。DDS ADDA 測試的鏈路一般分成三段數(shù)字側(cè)由相位累加器和波形 LUT 產(chǎn)生采樣點接口側(cè)把并行或串行數(shù)據(jù)送到 DAC模擬側(cè)再通過回環(huán)進入 ADC最后在 FPGA 內(nèi)部被采集和緩存。三段里任何一段的位寬、時鐘或數(shù)據(jù)編碼對不上現(xiàn)象都可能表現(xiàn)成“波形不對”但根因不在同一個地方。先把這個結(jié)構(gòu)看清楚后面改參數(shù)才不會靠猜。2.1 DDS 核心參數(shù)相位累加器位寬、頻率控制字與 LUT 深度DDS 的核心是一個相位累加器加一張波形表。每個系統(tǒng)時鐘相位累加器加上頻率控制字累加器的高位作為 LUT 地址LUT 輸出對應幅度的采樣點。輸出頻率由三個量決定系統(tǒng)時鐘f_clk、相位累加器位寬PHASE_W、頻率控制字freq_word。三者關(guān)系是f_out freq_word * f_clk / 2^PHASE_W反過來配置時用freq_word round(f_out * 2^PHASE_W / f_clk)。這個公式看起來簡單實際踩坑最多的是把 LUT 地址位寬當成累加器位寬來算結(jié)果頻率差一個整數(shù)倍。一個最小化的 DDS 核心通常長這樣module dds_core #( parameter PHASE_W 32, // 相位累加器位寬決定頻率分辨率 parameter LUT_AW 12, // LUT 地址位寬深度 2^LUT_AW parameter DATA_W 12 // 輸出數(shù)據(jù)位寬和 DAC 位數(shù)對齊 )( input wire clk, input wire rst_n, input wire [PHASE_W-1:0] freq_word, // 頻率控制字 output reg [DATA_W-1:0] dac_data ); reg [PHASE_W-1:0] phase_acc; wire [LUT_AW-1:0] lut_addr phase_acc[PHASE_W-1 -: LUT_AW]; always (posedge clk or negedge rst_n) begin if (!rst_n) phase_acc {PHASE_W{1b0}}; else phase_acc phase_acc freq_word; // 每個時鐘累加一次 end // 實際工程里用 LUT IP 或 case 表替換 always (posedge clk) begin dac_data sine_lut[lut_addr]; end endmodule這段代碼里PHASE_W決定頻率分辨率LUT_AW決定波形表深度DATA_W要和 DAC 的數(shù)據(jù)位寬對齊。lut_addr取的是相位累加器的高LUT_AW位也就是把相位圓等分成2^LUT_AW份。這樣做的代價是相位截斷會在頻譜上產(chǎn)生雜散如果回環(huán)測試里發(fā)現(xiàn)底噪偏高先別懷疑 ADC把LUT_AW從 10 加到 12 或 14 再看一次很多時候雜散會明顯下去。freq_word的位寬必須和PHASE_W一致綜合工具不會替你檢查這個位寬短了會靜默截斷現(xiàn)象就是輸出頻率和設定值對不上。2.2 ADDA 回環(huán)鏈路DAC 接口、ADC 采樣與時鐘域DAC 接口常見的有并行總線和串行總線兩類。并行 DAC 一般把dac_data直接掛在數(shù)據(jù)腳上配合 DAC 時鐘輸出串行 DAC 則要通過 SPI 或類似時序先配置寄存器再按幀發(fā)送采樣點。ADC 側(cè)同樣有并行和串行之分低速板常用并行 ADC高速板更常見 LVDS 或串行幀。工程文件里如果已經(jīng)把接口時序?qū)懰老却_認你的板子和工程里的接口類型一致別只看引腳數(shù)量對得上就下載。鏈路環(huán)節(jié)常見接口打開工程先看什么容易翻車的點DDS 到 DAC并行數(shù)據(jù) DAC 時鐘數(shù)據(jù)位寬、時鐘極性、建立保持時間數(shù)據(jù)編碼是偏移二進制還是補碼DAC 輸出到 ADC模擬回環(huán)、濾波網(wǎng)絡是否有重建濾波器、阻抗匹配直接短接導致削頂或自激ADC 到 FPGA并行、LVDS、串行幀采樣時鐘來源、同步信號、位對齊采樣時鐘和系統(tǒng)時鐘異步FIFO 讀空采集到上位機在線抓數(shù)、串口、USB觸發(fā)條件、采樣深度、數(shù)據(jù)格式抓到的不是同一時間段的數(shù)據(jù)時鐘域是回環(huán)測試里最容易被低估的部分。DDS 一般跑在系統(tǒng)時鐘域ADC 采樣時鐘往往來自外部晶振或時鐘芯片兩者異步。如果工程里直接把 ADC 數(shù)據(jù)打進系統(tǒng)時鐘域的寄存器綜合可能過板子上卻會隨機出錯。常見做法是加一個異步 FIFOADC 側(cè)用采樣時鐘寫系統(tǒng)側(cè)用讀時鐘讀中間用valid或空滿標志控制。抓數(shù)時先看 FIFO 的empty和overflow這兩個信號比波形本身更能說明問題。2.3 工程文件組成與打開方式這份工程文件通常包含頂層源碼、DDS 核心、LUT 初始化文件、引腳和時序約束、仿真測試文件以及可能的抓數(shù)腳本。不同平臺的工程格式不一樣有的直接雙擊工程文件打開有的需要先新建工程再把源碼和約束加進去。打開后不要立刻點編譯先做三件事確認器件型號和板卡一致確認頂層模塊沒有被別的文件覆蓋確認約束文件里的時鐘引腳和復位引腳對得上原理圖。文件或目錄作用打開后先檢查什么頂層源碼連接 DDS、DAC 接口、ADC 采集和通信模塊端口名是否和約束文件一致DDS 核心相位累加、LUT 查表、輸出寄存PHASE_W、LUT_AW、DATA_W是否匹配LUT 初始化文件存放一個周期的波形采樣點數(shù)據(jù)進制、深度、位寬是否和 IP 配置一致約束文件引腳分配、IO 電平、時鐘周期時鐘頻率是否和f_clk參數(shù)一致仿真測試文件行為級驗證 DDS 輸出和接口時序是否給了freq_word和復位激勵抓數(shù)或分析腳本導出 ADC 數(shù)據(jù)、做 FFT 或頻點掃描數(shù)據(jù)格式是有符號還是無符號如果工程不是原生格式新建工程時把源碼、LUT 文件和約束文件一起加入頂層模塊手動指定避免工具自動把測試文件當成頂層。約束文件里最值得花時間看的是時鐘周期約束DDS 的頻率計算用的是實際時鐘頻率約束文件里寫的是理想頻率兩者不一致時仿真和板級結(jié)果會對不上。先跑一遍行為仿真確認dac_data有波形、freq_word改變后周期跟著變再進綜合實現(xiàn)這一步能省掉很多下載后的無效調(diào)試。3. 上手復現(xiàn)從工程導入到板級回環(huán)的四個步驟工程導入只是開始真正能讓回環(huán)跑通的是參數(shù)配置、編譯下載和抓數(shù)分析。下面按四個步驟走每一步都給出可抄的配置或腳本。不要跳步尤其是 LUT 生成和頻率控制字計算這兩步錯了后面看波形只會越看越亂。3.1 導入工程與檢查器件/約束先確認工程里的器件型號、封裝和速度等級與手頭板子一致。不一致時綜合可能報錯也可能勉強通過但引腳映射錯位。接著看約束文件系統(tǒng)時鐘引腳是不是板上的晶振輸入復位按鍵是不是低有效DAC 和 ADC 的數(shù)據(jù)腳有沒有按原理圖逐位對應。IO 電平標準也要看1.8 V 的 bank 接 3.3 V 外設輕則不工作重則傷器件。檢查完先跑一次綜合不要直接實現(xiàn)綜合報告里看頂層端口和時鐘網(wǎng)絡有沒有異常。如果工程里沒有現(xiàn)成的約束文件按原理圖補一份最小約束時鐘、復位、DAC 時鐘輸出、DAC 數(shù)據(jù)總線、ADC 采樣時鐘、ADC 數(shù)據(jù)總線。先只約束這些等回環(huán)通了再加調(diào)試端口。引腳約束不要一次寫太多逐組加、逐組驗證出問題時容易定位。3.2 配置 DDS 頻率控制字與波形表波形表決定了輸出幅度和雜散頻率控制字決定了輸出頻率。先生成 LUT 文件再算頻率控制字。下面這段 Python 生成的是偏移二進制正弦表深度 4096位寬 12適合大多數(shù)無符號 DAC 輸入import math DEPTH 1 12 # LUT 深度和 LUT_AW12 對齊 WIDTH 12 # DAC 數(shù)據(jù)位寬 MID 1 (WIDTH - 1) with open(sine_lut.coe, w) as f: f.write(memory_initialization_radix10;\n) f.write(memory_initialization_vector\n) vals [] for i in range(DEPTH): s math.sin(2 * math.pi * i / DEPTH) # 偏移二進制中點 MID范圍 0 ~ 2^WIDTH-1 q int(round(MID s * (MID - 1))) q max(0, min((1 WIDTH) - 1, q)) vals.append(str(q)) f.write(,\n.join(vals) ;\n)DEPTH要和 DDS 里的LUT_AW對齊WIDTH要和 DAC 數(shù)據(jù)位寬對齊MID是偏移二進制的中點。如果 DAC 吃的是二進制補碼把MID s * (MID - 1)改成s * (MID - 1)再按位寬截斷。生成后不要只看文件大小打開前幾十行確認數(shù)據(jù)在0到4095之間且中點附近有2048左右的點。LUT 文件格式各平臺不一樣.coe、.mif、.hex都有工程里用哪種就生成哪種別直接改后綴。頻率控制字用下面這段算算完把結(jié)果寫進寄存器或參數(shù)f_clk 100_000_000 # 系統(tǒng)時鐘按實際工程改 f_out 1_000_000 # 目標輸出頻率 PHASE_W 32 # 相位累加器位寬 freq_word round(f_out * (1 PHASE_W) / f_clk) actual freq_word * f_clk / (1 PHASE_W) print(freq_word , freq_word) print(actual f_out , actual)f_clk必須和約束文件里的時鐘頻率一致PHASE_W必須和 DDS 模塊參數(shù)一致。round帶來的頻偏是有限的如果實際輸出和目標的偏差超過應用允許范圍增大PHASE_W比反復調(diào)freq_word更有效。算完后用仿真看一眼周期f_out為 1 MHz、f_clk為 100 MHz 時一個完整正弦周期大約 100 個時鐘數(shù)一下dac_data的峰值間隔就能對上。3.3 編譯、下載與在線抓取 ADC 數(shù)據(jù)編譯前先確認 LUT 文件已經(jīng)被工程識別綜合日志里搜一下 LUT 文件名沒有出現(xiàn)就是沒加進去。實現(xiàn)完成后看時序報告重點看系統(tǒng)時鐘和 ADC 采樣時鐘的建立保持余量。余量為負時不要抱著“先下載看看”的心態(tài)回環(huán)數(shù)據(jù)會時好時壞最后浪費更多時間。下載后先給一個低頻單音比如 100 kHz用示波器看 DAC 輸出有沒有波形再用在線抓數(shù)看 ADC 數(shù)據(jù)是否有變化。抓數(shù)配置建議先保守采樣深度取 4096 或 8192 點觸發(fā)方式用自由運行或手動觸發(fā)數(shù)據(jù)格式先按無符號 12 位導出。抓數(shù)時鐘盡量用 ADC 采樣時鐘不要用系統(tǒng)時鐘硬采否則看到的是跨時鐘域后的數(shù)據(jù)不能直接拿來做 FFT。抓到的數(shù)據(jù)先看最小值、最大值和中點偏移二進制的中點在 2048 附近如果全在 0 或 4095先查 DAC 編碼和 ADC 位對齊不要急著做頻譜分析。抓數(shù)參數(shù)建議值說明采樣深度4096 點或 8192 點太少頻率分辨率不夠太多導出慢觸發(fā)方式自由運行或手動先保證能抓到連續(xù)數(shù)據(jù)數(shù)據(jù)格式無符號 12 位和 ADC 輸出格式一致抓數(shù)時鐘ADC 采樣時鐘避免跨時鐘域引入假頻譜分析工具Python NumPy方便做去偏置、加窗和 FFT3.4 用回環(huán)數(shù)據(jù)驗證幅頻特性抓到數(shù)據(jù)后先做時域檢查再做頻域檢查。時域看峰峰值、均值、削頂比例頻域看主頻、諧波和底噪。下面這段腳本假設adc_data是從在線抓數(shù)導出的 12 位無符號數(shù)組fs是 ADC 實際采樣率import numpy as np # adc_data: 從在線抓數(shù)導出的 12 bit 無符號整數(shù)數(shù)組 # fs: ADC 采樣率單位 Hz x adc_data.astype(np.float64) x (x - 2048.0) / 2048.0 # 去偏置歸一化到 -1 ~ 1 N len(x) w np.hanning(N) X np.fft.rfft(x * w) freq np.fft.rfftfreq(N, d1.0 / fs) mag 20 * np.log10(np.abs(X) / (np.sum(w) / 2) 1e-12) peak_f freq[np.argmax(mag[1:]) 1] # 跳過 DC print(peak frequency:, peak_f)x - 2048是去掉偏移二進制的中點hanning窗降低頻譜泄漏np.sum(w) / 2是窗函數(shù)的幅度修正。mag[1:]跳過直流分量否則最大值永遠在 0 Hz。主頻峰值應該和設定的f_out接近偏差主要來自freq_word四舍五入和 ADC 采樣時鐘的實際誤差。如果峰值旁邊出現(xiàn)對稱的雜散先查 LUT 深度和相位截斷如果諧波明顯查 DAC 輸出后的重建濾波器和 ADC 輸入端的抗混疊濾波器。4. 參數(shù)怎么設DDS 頻率分辨率、SFDR 與 ADDA 采樣率匹配DDS ADDA 回環(huán)測試里參數(shù)不是孤立調(diào)的。頻率控制字影響輸出頻率LUT 位寬影響雜散ADC 采樣率影響能看到的最高頻率三者要一起看。很多“波形不對”的問題其實是參數(shù)之間不匹配輸出頻率接近采樣率的整數(shù)分之一或者 LUT 深度和 DAC 位數(shù)差太多頻譜上就會冒出解釋不了的峰。4.1 頻率控制字與輸出頻率的計算邊界頻率分辨率由f_clk / 2^PHASE_W決定。PHASE_W取 32、f_clk取 100 MHz 時分辨率大約是 0.023 Hz看起來夠細但頻率控制字是整數(shù)實際輸出頻率只能落在離散頻點上。目標頻率正好落在兩個頻點中間時四舍五入會帶來頻偏。頻偏的絕對值是f_clk / 2^PHASE_W的一半以內(nèi)大多數(shù)測試可以接受如果做頻率掃描最好按頻點步進而非隨意給目標頻率否則相鄰頻點的實際間隔不均勻。參數(shù)示例值作用調(diào)整后的影響f_clk100 MHz系統(tǒng)時鐘變大則同頻率控制字下輸出頻率變高PHASE_W32相位累加器位寬變大則頻率分辨率更細資源略增freq_word42 949 673頻率控制字直接決定輸出頻率f_out1 MHz目標輸出受頻率控制字量化影響頻率分辨率0.023 Hz最小頻率步進由前兩項決定配置時先算freq_word再反算actual把兩個值都記錄下來。不要只寫目標頻率后面排查頻偏時沒有對照。做頻點掃描時每個頻點至少抓 4096 點頻率間隔不要小于 FFT 的頻率分辨率fs / N否則相鄰頻點會在同一個譜線里混在一起。4.2 LUT 量化位數(shù)、DAC 位數(shù)與 SFDR 的取舍LUT 數(shù)據(jù)位寬決定波形幅度量化精度DAC 位數(shù)決定最終模擬輸出的理論動態(tài)范圍。LUT 位寬低于 DAC 位寬時DAC 的低位基本在跳變SFDR 會被 LUT 量化臺階限制。經(jīng)驗上LUT 每增加 1 bit量化臺階減半理論信噪比改善約 6 dB。12 位 DAC 配 8 位 LUT頻譜上很容易看到量化引起的雜散12 位 DAC 配 12 位或 14 位 LUT雜散會明顯好一些。LUT 位寬量化級數(shù)相對 12 位 DAC 的匹配情況適用場景8 bit256偏低低位浪費只看波形有無不關(guān)注頻譜10 bit1024勉強可用低頻、低精度回環(huán)12 bit4096匹配常規(guī) DDS ADDA 測試14 bit16384高于 DAC 位數(shù)需要更好 SFDR 或做插值LUT 深度和位寬不是一回事。深度決定一個周期采多少個點位寬決定每個點用多少 bit 表示。深度不夠時相位截斷雜散會變差位寬不夠時幅度量化雜散會變差?;丨h(huán)測試里如果發(fā)現(xiàn)諧波固定出現(xiàn)在某些頻點先加 LUT 深度如果發(fā)現(xiàn)底噪整體抬高先加 LUT 位寬。兩者都加還不行再查 DAC 輸出濾波和 ADC 輸入調(diào)理。4.3 ADC 采樣率、抗混疊與回環(huán)判據(jù)ADC 采樣率必須滿足奈奎斯特條件回環(huán)測試里最好讓輸出頻率低于fs / 3給抗混疊濾波器留過渡帶。輸出頻率接近fs / 2時哪怕濾波器階數(shù)不低混疊分量也會落進有用頻帶。DAC 輸出后的重建濾波器和 ADC 輸入端的抗混疊濾波器要一起看DAC 側(cè)濾掉鏡像ADC 側(cè)濾掉帶外噪聲只加一邊頻譜上仍會有多余分量?;丨h(huán)判據(jù)怎么算或怎么測合格線示例主頻偏差實測峰值與設定f_out比較小于 FFT 分辨率的一半幅度削頂統(tǒng)計 ADC 數(shù)據(jù)中 0 和 4095 的比例削頂比例接近 0諧波抑制度二次、三次諧波與主頻的 dB 差大于 40 dB按系統(tǒng)要求調(diào)整底噪遠離主頻處的平均譜線不隨抓數(shù)次數(shù)大幅跳動混疊檢查fs - f_out附近是否有強分量低于主頻 30 dB 以上采樣率不是越高越好。采樣率提高后同樣的抓數(shù)深度覆蓋的時間變短FFT 頻率分辨率變差采樣率降低后抗混疊濾波器壓力變大。常規(guī)做法是先按輸出頻率的 5 到 10 倍選采樣率抓 8192 點看頻譜再根據(jù)雜散位置微調(diào)?;丨h(huán)判據(jù)要寫進測試記錄不要只看一眼波形就下結(jié)論。5. 避坑與排查五個把回環(huán)測“翻車”的細節(jié)DDS ADDA 回環(huán)測試的現(xiàn)象很會騙人波形削頂可能被當成 DAC 壞了頻率不對可能被當成時鐘錯了數(shù)據(jù)全零可能被當成 ADC 沒起來。下面五條是血淚經(jīng)驗里出現(xiàn)頻率最高的每條按“現(xiàn)象、原因、解決”寫照著排查比盲目換板子快。5.1 波形削頂或貼底DAC 數(shù)據(jù)編碼不匹配現(xiàn)象DAC 輸出正弦波頂部和底部被削平ADC 抓回來的數(shù)據(jù)大量落在 0 或 4095。原因LUT 生成時用了偏移二進制DAC 接口卻按二進制補碼解釋或者反過來。解決查 DAC 數(shù)據(jù)手冊的輸入編碼確認中點對應的是0x800還是0x000在 LUT 生成腳本里改編碼仿真時看中點碼值是否正確再下載驗證。5.2 輸出頻率差整數(shù)倍頻率控制字用錯位寬現(xiàn)象設置 1 kHz實測接近 1.2 kHz 或 0.8 kHz偏差不是隨機小數(shù)而是固定比例。原因算freq_word時把 LUT 地址位寬LUT_AW當成了相位累加器位寬PHASE_W或者freq_word寄存器位寬不夠被截斷。解決統(tǒng)一用PHASE_W計算檢查freq_word的位寬和模塊端口一致用公式反算實際頻率和仿真周期對照。5.3 ADC 數(shù)據(jù)全零或隨機跳跨時鐘域沒處理現(xiàn)象在線抓數(shù)時數(shù)據(jù)全是 0或者偶爾跳幾個隨機值復位后有時正常有時不正常。原因ADC 采樣時鐘和系統(tǒng)時鐘異步數(shù)據(jù)直接打進系統(tǒng)時鐘域建立保持時間不滿足或者異步 FIFO 的讀寫復位沒有對齊。解決加異步 FIFOADC 側(cè)用采樣時鐘寫系統(tǒng)側(cè)用讀時鐘讀先看空滿標志再讀數(shù)據(jù)抓數(shù)時鐘改用 ADC 采樣時鐘避免二次跨域。5.4 頻譜底噪高、諧波多LUT 量化或模擬濾波不足現(xiàn)象時域波形看起來正常FFT 上主頻旁邊有一排諧波底噪比預期高。原因LUT 位寬低于 DAC 位寬幅度量化臺階大或者 DAC 輸出直接進 ADC沒有重建濾波和抗混疊濾波。解決先把 LUT 位寬加到不低于 DAC 位寬再看 LUT 深度是否足夠模擬側(cè)加低通濾波輸出頻率降到fs / 3以下再測。5.5 編譯通過但板子無輸出約束或電平標準錯了現(xiàn)象綜合實現(xiàn)都過下載后 DAC 沒有波形ADC 也抓不到有效數(shù)據(jù)。原因約束文件里的引腳和原理圖不一致或者 IO 電平標準與外部器件不匹配。解決對照原理圖逐腳檢查時鐘、復位、DAC 時鐘和數(shù)據(jù)總線先做一個單頻點加 LED 指示的最小工程確認時鐘和復位活著再逐步加回環(huán)鏈路。6. 進階驗證用 FFT 和頻點掃描確認 DDS 輸出質(zhì)量回環(huán)能出波形只是第一步真正要確認的是 DDS 輸出在目標頻段內(nèi)是否穩(wěn)定。我一般會做一次頻點掃描在f_out的范圍內(nèi)取 5 到 10 個頻點每個頻點抓 8192 點做 FFT 后記錄主頻幅度、二次諧波、三次諧波和底噪。掃描時保持f_clk、LUT、模擬濾波不變只改freq_word這樣頻譜上的變化才能歸因到頻率本身而不是參數(shù)亂動。設定頻率實測主頻主頻幅度二次諧波差三次諧波差備注100 kHz99.98 kHz-1.2 dBFS-48 dB-52 dB基準點500 kHz499.91 kHz-1.3 dBFS-45 dB-49 dB觀察濾波器帶內(nèi)平坦度1 MHz1.0002 MHz-1.5 dBFS-43 dB-47 dB接近常用工作點2 MHz1.9997 MHz-2.1 dBFS-40 dB-44 dB看高頻段幅度跌落表格里的數(shù)值只是示例實際以你的板子和濾波器為準。重點看趨勢頻率升高時主頻幅度是否明顯跌落諧波差是否快速變差底噪是否在某幾個頻點突然抬起。如果 1 MHz 附近正常、2 MHz 附近諧波明顯變差優(yōu)先查 DAC 輸出濾波器和 ADC 輸入帶寬而不是繼續(xù)加 LUT 深度。頻點掃描還有一個好處能提前發(fā)現(xiàn)“某些頻率正好落在采樣率整數(shù)分之一附近”的混疊問題這類問題在單頻測試里很容易被漏掉。FFT 分析時我習慣把窗函數(shù)、去偏置和幅度修正寫進固定腳本不每次手改。腳本里保留原始數(shù)據(jù)和參數(shù)記錄后面對比不同頻點時才不會把窗函數(shù)差異當成器件差異。還有一個小技巧抓數(shù)時同時記錄 DAC 輸出端的示波器波形哪怕只看一眼峰峰值也能快速判斷削頂是數(shù)字側(cè)編碼問題還是模擬側(cè)增益問題。數(shù)字側(cè)和模擬側(cè)一起看比單獨盯 FFT 更可靠。從那以后我每次拿到新的 ADDA 板都強制先跑一遍“低頻單音、中點檢查、FFT 主頻、頻點掃描”這四步再動任何參數(shù)??雌饋砺龑嶋H上比反復下載、反復懷疑器件快得多。這套 DDS ADDA 測試工程文件我放在項目簡介對應位置拿到后先按第 3 章走一遍回環(huán)再按第 5 章對一遍現(xiàn)象基本能少走大半彎路。希望幫到你。本文還有配套的精品資源點擊獲取