在本系列的第1部分中,我們將了解如何設計基于直接數字頻率合成(DDFS)原理的非常精確的正弦波發生器,但在浮點DSP處理器上通過軟件實現。在第 2 部分中,我們將介紹如何在軟件中實現高精度 NCO。
構建具有與最佳模擬振蕩器相似或更好的失真性能的高精度交流音發生器,如最著名的惠普分析儀或應用筆記AN-1323中所述,即使專用于音頻頻譜(直流至20 kHz范圍),也不是一件小事。然而,如前所述,使用嵌入式處理器的足夠算術精度執行相位計算(ωt)和正弦函數(sin(ωt))近似的完整軟件實現肯定有助于最大限度地減少量化副作用,噪聲和由此產生的雜散。這意味著圖2中的所有NCO功能塊都轉換為代碼行(無VHDL!),以實現滿足實時約束的軟件版本,以確保最小采樣率和所需的頻率帶寬。
對于相位到正弦幅度轉換引擎,完整的LUT方案或任何變化都需要太多的內存或太多的插值操作才能實現完美的正弦一致性。相反,正弦近似的多項式方法允許使用成本非常低的通用DSP,從而提供了非常好的復雜度與精度權衡。多項式級數擴展也非常有吸引力,因為它相對簡單,并且能夠在選擇冪級數類型時提供充分的靈活性,為給定精度定制算法。它不需要大的內存空間,少于100行SHARC DSP裝配線,只需要幾個RAM位置來存儲多項式系數和變量,因為正弦值僅在采樣時計算。
首先,正弦近似函數的明顯選擇是使用具有適當順序的直泰勒/麥克勞林冪級數來滿足目標精度。但是,由于冪級數往往會在端點上失去有效性,因此在執行任何多項式計算之前,必須將參數輸入范圍減小到較小的間隔。如果不減少參數范圍,函數域(如 [–π, +π] )上的高精度只能通過非常高階多項式來支持。因此,需要將一些變換應用于初等函數以獲得簡化的參數,例如 sin(|x|) = sin(f + k × π/2) 和 sin(f) = sin(x – k × π/2) 為 0 ≤f《π/2。因此,三角函數應格外小心,以避免減法抵消,這將導致精度嚴重損失并產生災難性結果,尤其是在算術精度較差的情況下。在我們的例子中,當相位輸入很大或接近π/2的整數倍時,可能會發生這種情況。
除了周期性和模-2π重復之外,sin(x)函數的對稱性質還可以用于進一步縮小近似范圍。鑒于正弦函數在區間 [0, 2π] 的點 x = π 上是反對稱的,因此可以使用以下關系:
將范圍減小到 [0, π]。以同樣的方式,sin(x) 顯示了區間 [0, π] 由 x = π/2 定義的直線的對稱性,使得:
對于區間 [0, π/2] 中的 x,這進一步減小了角度輸入近似范圍。進一步將參數簡化為較小的區間(如 [0, π/4] 以提高精度是沒有效率的,因為它需要同時計算正弦和余弦函數,這是由共同三角關系決定的:sin(a+b) = sin(a) × cos(b) + cos(a) × sin(b),這對于生成正交音來說是值得的。
ADI公司的ADSP-21000系列應用手冊第1卷介紹了一種幾乎理想的(用于嵌入式系統)正弦逼近函數,該函數基于為首款ADI DSP浮點處理器(即ADSP-21020)編寫的優化功率級數,該處理器基本上是一個SHARC內核。sin(x) 的這種實現依賴于由 Hart 等人發表的最小最大多項式近似4,并由 Cody 和 Waite5 改進用于浮點運算,以減輕舍入誤差并避免發生前面提到的取消。最小最大值方法依賴于切比雪夫多項式和雷梅茲交換算法來確定所需最大相對誤差的系數。如圖 3 中的 MATLAB 所示,與 Taylor 的七階泰勒多項式相比,設定系數的微小變化會導致最小最大值的精度顯著提高.6 為了獲得最佳精度與速度權衡,此正弦近似函數的角度輸入范圍縮小到 [–π/2 到 +π/2] 區間,并且軟件例程包括一個高效的范圍縮小濾波器, 約占總“正弦”子例程執行時間的 30%。
圖3.與在 0 左右定義的 Taylor-MacLaurin 方法不同,最小最大值正弦近似方法最小化并均衡了 [–π/2 至 +π/2] 區間內的最大相對誤差。
雖然所有的計算都可以用32位定點算法執行,但數學計算最常見和最方便的格式,特別是在處理長數時,多年來一直是IEEE 754浮點標準。當時,根本沒有單芯片浮點DSP處理器,只有簡單的浮點乘法器和ALU計算IC,例如ADSP-3212和ADSP-3222。這種格式取代了計算機行業的大多數專有格式,并成為所有SHARC DSP處理器的原生格式,包括單精度32位、擴展精度40位,以及最近ADSP-SC589和ADSP-SC573的雙精度64位。
SHARC 40 位擴展單精度浮點格式及其 32 位尾數為這種正弦波生成應用提供了足夠的精度 (u 2–32),為了保持相等,Cody 和 Waite 表明,15 階多項式適用于 32 位的整體精度,在 [0 到 +π/2] 輸入域上均勻分布誤差。最小化操作次數并保持準確性的最后一個調整是實現多項式計算的霍納規則,這是一種快速冪法,用于評估一個點的多項式,例如:
R1 到 R7 是多項式級數的 Cody 和 Waite 系數,只需要 8 次乘法和 7 次加法即可計算任何輸入參數 ε[0, π/2] 的正弦函數。以匯編子例程形式編寫的完整 sin(x) 近似代碼在 SHARC 處理器上以大約 22 個內核周期執行。原始程序集子例程經過修改,以便在獲取 40 位多項式浮點系數時同時執行雙內存訪問,以節省六個周期。
圖4.DDS軟件簡化框圖給出了數據算術格式和處理元件之間各種量化步驟的位置。
NCO 64 位相位累加器本身正在利用雙精度 2 補碼分數格式的 SHARC 32 位 ALU 來執行。一個完整的相位累加器執行和內存更新需要 11 個內核周期,因此,每個 NCO 輸出樣本在大約 33 個內核周期內生成。
圖4中的圖表顯示了基于DSP的軟件NCO的功能塊實現,并參考了每個階段的算術格式精度。此外,信號模擬重建需要一個或兩個DAC及其模擬抗混疊濾波器電路,并實現完整的DDFS。處理鏈的關鍵要素是:
64位相位累加器(帶溢流的SHARC ALU雙精度加法);
64位小數定點到40位FP轉換模塊;
范圍縮小塊 [0 到 + π/2] 和象限選擇(科迪和韋特);
用于相位到幅度轉換的正弦近似算法(Hart);
–1.0 至 +1.0 范圍內的 sin(x) 重建和歸一化階段;
LP FIR 濾波器和 sin(x)/x 補償(如有必要);
以及 40 位 FP 到 D 位定點轉換和縮放功能,以適應 DAC 數字輸入。
可以在NCO的輸出端放置一個可選的數字低通濾波器,以消除可能在目標頻帶中折疊的任何雜散和噪聲。或者,該濾波器可以提供插值和/或反sin(x)/x頻率響應補償,具體取決于為模擬重建選擇的DAC。這種低通FIR濾波器可以使用MATLAB濾波器設計器工具進行設計。例如,假設采樣頻率為48 kSPS,直流至20 kHz帶寬,帶內紋波為0.0001 dB,帶外衰減為–150 dB,則可以使用40位浮點系數實現高質量的等紋波濾波器。由于只有 99 個濾波器系數,其總執行時間將在單指令、單數據 (SISD) 單計算單元模式下消耗約 120 個 SHARC 內核周期。數字濾波后,DMA使用其中一個DSP同步串行端口將計算出的樣本對發送到DAC。為了獲得更好的速度性能,還可以使用大型乒乓內存緩沖區鏈接 DMA 操作,以支持按塊操作進行處理。例如,塊數據大小可以等于 FIR 數據延遲線的長度。
NCO 的最終調整以實現最佳 SFDR
如前所述,NCO受到雜散的影響主要是由于相位累加器輸出的截斷,以及在較小程度上,由于通過計算或制表獲得的正弦值進行的幅度量化。相位截斷引起的誤差通過相位調制(鋸齒波)在載波頻率附近產生雜散,而正弦幅度量化會導致諧波相關的雜散,盡管長期以來被認為是隨機誤差和噪聲。今天,相位累加器的操作在數學上是完美的,正如Henry T. Nicholas和H. Samueli的技術論文7中所描述的那樣。經過徹底分析后,提出了一個模型,使得相位累加器被認為是離散相位采樣置換發生器,從中可以預測頻率雜散。無論相位累加器參數(M、N、W)如何,相序的長度都等于
(其中GCD是最大公約數)由頻率調諧字M的最右邊位位置L決定,如圖4所示。因此,L 的值定義了序列類,每個序列類共享自己的一組相位分量,但根據
率。這些在時域中生成的截斷相位樣本序列用于通過DFT確定頻域中每條雜散線的相應位置和幅度。這些序列還表明,M(FTW)的奇數值表現出最低頻率雜散的幅度,并建議對相位累加器進行簡單的修改,只需在FTW中添加1 LSB即可滿足這些最小條件。這樣,無論相位累加器的M值和初始內容如何,相位累加器輸出序列都被迫始終具有相同的2N相位元件。然后,最差雜散音幅度的電平降低3.922 dB,等于SFDR_min(dBc)= 6.02 × W。Nicholas改進的相位累加器為NCO帶來了幾個好處,因為首先它消除了FTW最右邊太接近其MSB(FMCW應用中的頻率掃描)的情況,其次,它使雜散的幅度與頻率調諧字M無關。通過在采樣速率fS下切換ALU LSB,可以在軟件中輕松實現這種修改,可以模擬相位累加器的相同行為,就像FTW LSB設置為邏輯1一樣。當相位累加器大小N = 64位時,1/2 LSB偏移可以被認為是關于所需頻率FOUT精度的可忽略不計的誤差。
圖5.FTW 最右邊的非零位的位置設置了理論上的 SFDR 最壞情況水平。尼古拉斯修改的相位累加器解決了N的任何值的問題,并使NCO的SFDR最大化。
輸出相位字W為32位時,相位截斷導致的最大雜散幅度被限制在–192 dBc!正弦采樣值的有限量化也會導致另一組頻率雜散,它通常被認為是噪聲,并通過眾所周知的關系SNRq(dB)= 6.02 × D + 1.76進行估計。由于相位-正弦幅度轉換算法級的近似誤差,必須將其添加到寄生元件中,但是,考慮到在選擇相位-正弦近似算法和計算精度時非常謹慎,該誤差被認為是可以忽略不計的。
這些結果表明,我們的軟件正弦NCO的線性度和噪聲都處于理論水平,遠遠超出了測試市場上大多數高精度ADC所需的閾值。信號鏈中最后一個但最關鍵的元件還有待找到:重建DAC及其互補模擬抗混疊濾波器以及相關的驅動器電路,這些電路很容易滿足預期的性能水平。
在本系列的第3部分中,我們將介紹如何選擇重建DAC并完成DDFS系統。
審核編輯:郭婷
-
處理器
+關注
關注
68文章
19293瀏覽量
229966 -
dsp
+關注
關注
553文章
8005瀏覽量
349062 -
振蕩器
+關注
關注
28文章
3832瀏覽量
139120
發布評論請先 登錄
相關推薦
評論