DSP通用演算法介紹 精

2023-01-18 12:54:06 字數 4780 閱讀 4653

摘要數字訊號處理(dsp)自2023年由cooley和tukey提出dft(離散傅利葉變換)的高效快速演算法(fourier transform,簡稱fft)以來,已有近40年的歷史。隨著計算機和資訊科技的發展,數字訊號處理技術已形成一門獨立的學科系統。數字訊號處理作為一門獨立學科是圍繞著三個方面迅速發展的:

理論、現實和應用。作為數碼訊號理論,一般是指利用經典理論(如數字、訊號與系統分析等)作為基礎而形成的獨特的訊號處理理論,以及各種快速演算法和各類濾波技術等基礎理論。由此在各個應用領域如語音與圖象處理、資訊的壓縮與編碼、訊號的調製與調解、通道的辨識與均衡、各種智慧型控制與移動通訊等都延伸出各自的理論與技術,到目前可以說凡是用計算機來處理各類訊號的場合都引用了數字訊號處理的基本理論、概念和技術。

數位化技術有今天的飛速發展,是依仗於強大的軟、硬體環境支撐。作為數字訊號處理的乙個實際任務就是要求能夠快速、高效、實時完成處理任務,這就要通過通用或專用的數字訊號處理器來完成。因此,數字訊號處理器是用來完成數字訊號處理任務的乙個軟、硬體環境和硬體平台。

就如同生活中的許多事情那樣,使用dsp往往在一些小問題和具體細節上頗費周折。然而許多dsp書籍往往專注於大的課題,但在設計基於dsp產品的過程中,大部分時間用於羅列出所必須得「小東西」。本文包含了那些在其他dsp書籍中不曾提及的被遺忘的演算法,但它們卻占有如此首要的位置。

本文介紹的dsp通用演算法包括邏輯運算,算術運算,系統的基本構件,線形比例縮放,正交訊號處理,頻率變換,訊號平均,自動控制系統。

1.邏輯運算

所有的dsp器件都有一套命令集,用於實現邏輯操作,包括與,和異或等等。它們採用類似與離散邏輯門的方式進行操作,主要用於遮蔽有用的或沒用的資料位,主要在位測試程式中使用。現今的大部分處理器在傳統的主要用於暫存器中左移或右移資料的邏輯操作基礎上,新增了內建的位測試命令。

邏輯運算常常用於定點與浮點的轉換,曲線擬合以及一些更高階的演算法。

2.算術運算

人們都已經習慣於使用計算器來實現加減乘除及平方根之類的基本算術運算,而不願實現這些基本運算背後所需要的複雜的二進位制運算。雖然.一些最新的dsp已經在其內部使用硬體電路和硬體程式設計實現了部分的運算,但當我們在dsp中要實現同樣的這些運算時,通常還必須東拼西湊的來實現這些運算。

加減乘除之類的基本運算在各類處理器中以隱含的單週期命令形式提供,故在此不做進一步的討論。

二進位制除法或抽象函式f(x之類的運算包含了一系列的多週期命令,其複雜度和運算時間由所期望獲得的計算結果精度決定。

2.1乘法

dsp器件具有乙個專門的硬體乘法器,能在乙個時鐘週期中完成兩個位元組資料的二進位制乘法。這一「板上」專用乘法器是dsp處理器區別於其他常用微處理器的主要特點,而且是大部分訊號處理演算法實現的核心。一些專用的乘法,累加和資料移位命令內置於大部分處理器中,用於濾波器和基於fft的演算法。

它們充分利用了當代處理器中的並行結構和流水線技術,獲得程式的高速執行

完成乘法的基本編碼具有如下典型的形式:

mpy a,b=c, shift z

將儲存於暫存器b中的資料相乘,並將結果移位z位元後,存於暫存器c

在對乘法結果儲存及移位的過程中,應注意不能使數值位取代最後的符號位

2.2 除法

二進位制除法相對於加減乘運算而言要複雜得多。其演算法主要包含了一系列的反覆移位和有條件減法運算。更先進的處理器在其命令集中包含乙個隱含的除法命令,可以直接執行該演算法。

實現除法macro呼叫的基本形式如下:

div a, b=c ,y

將b除以a,結果存入c中,重複執行y遍。

在某些特殊應用中,若採用曲線擬合方法,除法運算的效率會更高。

2.3 函式f(x的運算

有一些數學函式不能採用直接的二進位制形式計算,而必須使用逼近方法。計算一般的f(x)主要採用三種方法,第一種方法是在資料或程式空間中儲存一張轉換表。第二種方法是採用曲線擬合和分段逼近的策略,第三種是採用級數展開演算法。

1) 查表法

最直接的計算一般函式f(x)的方法是在記憶體中提供一張表,存在與所有可能遇到的x相對應的f(x)的值。表示x值的資料位元組用於構造乙個指向資料表中位址的指標,從而得到相對應的f(x)的值。如果有充足的資料或程式空間能保證f(x)計算的準確性和精度,該方法在資料儲存空間位址分配合理的情況下,就應採用下面兩種方法。

2) 曲線擬合方法

經a/d取樣記錄下的曲線僅在取樣點上有值,非取樣點需要用數值分析的方法進行處理。為了提高曲線分析的精確度,我們先對譜圖曲線的一些特性進行研究。由色譜儀測出的譜圖曲線可以看出:

譜圖曲線的形狀類似於正態分佈的曲線,所不同的是它不一定是對稱的,但它一定是平滑的,即沒有階躍點,這意味著譜圖曲線的導數應該是連續的;譜圖曲線開始段和終止段一般為0值;對於不同的化學吸附譜圖曲線出現峰值的時間是不同的,快的幾秒鐘,慢的需幾分鐘,更慢的則需幾小時。

採用分段低次插值,雖然保證插值曲線在插值點上的連續性,但不能保證整條曲線在插值點上的光滑性,即導數不一定連續,這不能滿足實際系統的要求。根據譜圖曲線的以上特點和擬合條件的需要,在進行曲線擬合時,為保證曲線在取樣點處的一階導數、二階導數的連續性,採用了滿足第一種邊界條件的三次樣條插值。從a/d取樣的資料中找到a、b、c、d點(見圖1),把整個區間分成(a,b),(b,c),(c,d)區間,在每個區間內採用三次樣條插值,限於篇幅,僅給出(b,c)段內節點為4的實驗資料,如表1所示。

同理可得zab(t),zcd (t。我們在實際擬合過程中發現,當選取的插值節點較少時,逼近誤差較大,隨著插值節點加密,逼近程度逐步得到改善,如圖1所示。n=575是經a/d取樣得到的基本樣點,在575個節點中等距取出n』=35,利用三次樣條插值進行逼近得到的曲線只有在(a,c)區間內存在一定誤差,n』=70時誤差減小,n』=n/4與n』=n/2時與實際擬合曲線幾乎完全重合。

從譜圖擬合曲線中可以看出,採用三次樣條函式逼近得到的曲線具有非常好的光滑性。當取樣點選取n/15時,有一定的誤差,當取樣點增加到n/8時誤差逐漸縮小,當取樣點增加到n/4時,基本逼近真實曲線,誤差可以忽略。因此,在保證精度的情況下,我們可以適當降低曲線的取樣速率,這樣可以大大減少系統占用記憶體,提高運算速度。

根據三次樣條逼近求出的曲線在各取樣點之間的表示式,直接積分可得出取樣區間的面積,計算出的面積與記錄儀測出的面積相比精度很高。

總之,當選取插值點為記錄點的三分之一時,用三次樣條函式逼近得到的曲線幾乎完美地擬合了用記錄儀記錄下的曲線,利用此方法對譜圖處理具有很大的實用價值,精度高。

3) 級數展開法

複雜算術函式計算的另乙個方法就是合理的級數展開,這類級數構成一種僅由簡單的加減乘運算構成的表示方法。在使用級數展開法時必須注意展開式能否快速收斂,如果不能,則使用曲線擬合法能較有效的滿足給定的數值精度。

2.4 浮點計算

在大多數的dsp應用中,定點的16位運算可以提供足夠的動態範圍(約為96db),足以滿足大部分訊號不損失精度。但是在某些情況下,例如訊號平方會將需儲存的訊號的動態範圍增大一倍,這樣16位的定點表示就不適用了。當然如果解析度的位數要求更多的話,那麼該問題就顯得無關緊要了。

但如果大數值採用固定格式(即小數點位置確定)表示,那麼對於小數值而言,大部分的高權值位就不得不置零,以表示兩個數字在大小的相對差。

在小數值的表示中,這種「數值誤差「可以採用被稱為浮點的表示方法解決。這種方法允許移動小數點的位置,來減少起始零的位數。

一些最新的處理器已經能支援二進位制的浮點演算法。而包括tms320 c54xx系列的定點處理器的低功效器件則須用演算法將定點資料轉換成浮點形式。

3.系統的的基本構件

3.1 ac耦合器

不論對於交流耦合還是直流耦合的輸入波形,任何實際的a\d轉換器或取樣-保持放大器均會加入少量的直流偏置。在一些訊號處理應用中,特別是有關調製的應用中,該偏置是不可忽略的。有兩種簡明的方法可以消除該直流偏置。

第一種方法是在假設直流偏置是固定情況下,從輸入的資料中減去乙個相同大小的負的二進位制數,其效果同外加的直流偏置控制器相同。第二種方法是在處理器中加入一ac耦合濾波器的方式實現。

3.2 過載考慮與限制

在dsp實現中容易導致錯誤的乙個主要原因就是訊號過載問題。在大多數現存的dsp器件中,但累加器出現數值溢位時,可以定義一種操作模式,是累加器飽和,即根據情況,賦為正極值或負極值。除非有特殊要求,大多數情況下,強烈推薦採用上述形式的操作。

這個「安全網」能很好保證累加器儲存的資料不會再發生左移。如果這一條件不能滿足,那麼資料在累加器進行左移時,仍會產生過載現象。

3.3 時延

短波通道模擬器系統中常採用軟體無線電思想實現。軟體無線電的宗旨就是盡可能地簡化射頻模擬前端,使a/d轉換盡可能地靠近天線去完成模擬訊號的數位化,而且數位化後的訊號要盡可能多地用軟體進行處理,實現各種功能和指標。軟體部分主要用dsp晶元來進行處理訊號。

根據軟體無線電的知識,可以使用內插來完成精確性時延部分的工作,但為了避免插值後資料量的大增,導致dsp處理的負荷量過重,之後就得考慮資料的抽取操作用以減少處理的資料量。在上部分中,可以得出內插和抽取過程都需要一濾波器進行濾波,避免內插帶來的高頻映象和抽取帶來的頻譜混疊。可以採用內插和抽取組合的辦法來解決內插所導致的資料量大增問題,並保證小尺寸時延的精度。

但必須內插在前,抽取在後,以確保其中間序列的基帶譜寬度不小於原始輸入序列譜或輸出序列譜的基帶頻譜寬度,否則將會引起訊號失真。這裡採取的是d倍內插再d倍抽取以實現級聯來滿足要求。但是由於他們級聯的d倍內插濾波器和d倍抽取濾波器工作在相同的取樣率dfs下,所以他們可以以乙個組合濾波器來代替。

圖3是基於內插和抽取技術的時延器結構。

3.4 抗混疊濾波

在進入更為複雜的訊號處理任務之前,先討論一下對外部訊號的濾波要求。即使在模擬輸入波形這種最簡單演算法中,在系統行為上,滿足訊號混疊的要求是至關重要的。

3.5 重建濾波

乙個連續訊號可以由其理想取樣樣本通過低通濾波器進行無失真的重建。理想的重建濾波器在其通帶具有平坦的增益響應和線性相位特徵,在更高頻率的阻帶具有無限衰減。同抗混疊濾波器一樣,如果取樣率概予訊號頻寬的兩倍,就可以使用有限的過渡帶,那麼合成重建濾波器的工作就會簡單一些。

vb常用演算法介紹

一 累加演算法 如果在設計過程中遇到求1 2 3 100等連加問題時,就可以用累加演算法來解決。累加演算法的一般做法是設乙個變數 s,作為累加器使用,初值為0,設乙個變數用來儲存加數。一般在累加演算法中的加數都是有規律可循,可結合迴圈程式來實現。乙個迴圈程式的設計,如果以下三方面確定下來 變數的賦初...

快速排序演算法介紹

設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動。一趟快...

蟻群演算法 遺傳演算法 模擬退火演算法介紹

窮舉法列舉所有可能,然後乙個個去,得到最優的結果。如圖一,需要從a點一直走到g點,才能知道,f是最高的 最優解 這種演算法得到的最優解肯定是最好的,但也是效率最低的。窮舉法雖然能得到最好的最優解,但效率是極其低下的。為了能提高效率,可以不要列舉所有的結果,只列舉結果集中的一部分,如果某個解在這部分解...