基於MSP430系列微控制器的FFT算法實現

2020-11-22 電子產品世界

摘要:傅立葉變換算法在供電質量監測系統中被用來進行諧波分析,如何加快分析速度和降低系統成本是當前這種監測系統設計關注的主要問題。TI公司的MSP430系統微控制器具有功耗低、供電範圍寬及外圍模塊齊全等特點,適合實現各種監測設備。該系列晶片內部充足的數據存儲器滿足快速傅立葉變換算法過程中的數據存儲,晶片內部大量的代碼存儲器存儲相位因子的計算結果和所需要的三角函數數值,採用查表的方法以提高分析速度;採用晶片內部硬體乘法器模塊可以進一步提高分析速度。實測結果顯示對一個信號周期256個採樣點的快速傅立葉變換分析,完成全部計算僅需要0.3 s的時間,前10次諧波的計算相對誤差低於千分之一。所研製的在供電質量監測系統完全滿足用戶要求。

本文引用地址:http://www.eepw.com.cn/article/201610/307878.htm

關鍵詞MSP430;快速傅立葉變換;存儲器;微控制器

隨著各種電力電子裝置在電力系統越來越廣泛的應用,其非線性的特點使得供電中的諧波失真問題日益嚴重。監測技術的研究對市電質量的補償具有很高的價值,考慮到實際情況,在供電系統質量監測中需要一些低成本,但分析速度較快的監測系統。

離散時間採樣的快速傅立葉變換FFT(fast Fouriertrans form)算法是目前最主要的諧波檢測和分析方法。FFT算法的實現可以採用專用晶片37—40、DSP晶片6—1141—44、FPGA晶片193— 207以及微控制器等。隨著集成電路製造技術和數字計算機技術的進步,微控制器晶片的功能和所能提供的邏輯資源越來越多。MSP430F1611微控制器晶片屬於TI公司MSP430x1xx系列產品中的一種,該晶片具有10240位元組的SRAM(Staric Random Access Memory)存儲器、48 k字節的程序存儲器、8通道12位ADC、2通道12位DAC、16位×16位硬體乘法器模塊等片內資源。硬體乘法器模塊支持8/16位x8/16位有符號,或者無符號的乘法運算,並可以選擇「乘法與累加」功能。採用MSP430系列微控制器實現FFT算法具有超低功耗、低電壓工作、低成本、分析速度快等優點,它比採用專用晶片和DSP晶片價格便宜,比採用FPGA晶片容易實現。

1 利用微控制器實現FFT算法

快速傅立葉變換在信號處理中的線性濾、相關計算、譜分析等方面起著重要的作用。將N點採樣數據分解為更短的數據段來進行計算可以提高計算效率,目前使用最廣泛的是基2的FFT算法。圖1給出基2按時間抽取的快速傅立葉變換中的基本運算過程379-388181-189。

這種運算過程被稱為蝶形運算,因為它的流程圖看起來就像一個蝴蝶。每次蝶形運算包括一次複數乘法運算和兩次複數加法運算。一旦對一對複數(a,b)執行了產生(A,B)的蝶形運算,原數據就無須再保存,所以可以將結果(A,B)保存在與數據(a,b)相同的數據存儲單元。

由於MSP430系列微控制器的開發軟體不支持複數運算,這裡複數運算需要分解成實部和虛部分別來完成,下面的函數「fft_2sin」用來實現蝶形運算。

2 利用查表代替相位因子中的三角函數運算

圖2給出8點數據的基2按時間抽取的快速傅立葉變換流程圖。整個數據分析需要多個階段才能完成,每個階段需要多次調用基2的FFT算法函數。在前面給出的函數「fft_2 sin」中需要通過三角運算分別完成相位因子實部和虛部的計算。三角函數計算需要花費大量的時間,但是在分析的數據點數量給定以後可以首先完成相位因子的計算,將計算值存儲在一個數據表中,通過查表的方法代替三角函數計算。修改後的基2的FFT算法函數如下。

使用MSP430系列微控制器的開發軟體IAR模擬顯示,在基2的FFT算法函數中計算相位因子的情況下,完成一次函數計算需要花費7422時鐘周期;利用查表獲得相位因子的情況下,完成一次函數計算只需要花費1242時鐘周期。

3 使用硬體乘法器進一步加快運算速度

完成採樣數據的FFT分析的過程中需要進行大量的乘法運算,像其它的微控制器一樣,MSP430系列晶片也是通過調用內部函數完成這些乘法運算的。利用硬體的方法完成要求的工作比使用軟體模擬的方法快,也就是比利用編程實現的方法要快,但是添加硬體電路也將佔用更多的邏輯資源。

TI公司在MSP430系列中的部分晶片中添加了硬體乘法器,利用開發軟體中的編譯選項可以方便地使用硬體乘法器代替內部函數來實現乘法運算。以完成圖2 給出8點數據的基2按時間抽取的快速傅立葉變換流程圖為例,過程包括從採樣數據的倒序排列,3個階段基2的FFT計算,最終給出頻譜分量的幅度數值。不使用硬體乘法器需要46592時鐘周期,使用硬體乘法器需要41183時鐘周期。

4 結論

使用MSP430F1611微控制器晶片完成一個信號周期256個採樣點的FFT分析,當被分析信號為50%佔空比的方波,變換頻率分量為0,1,2,3時,方波信號頻譜實際測量值分別為127.500,162.342,0,54.1250,理論上的計算值分別為 127.500,162.338,0,54.1127。分析上訴結果可以得到實際測量值與理論計算值之間的絕對誤差分別為0,0.004,0,0.012 3,相對誤差為0,0.002 5,0,0.023。

由上面的結論可以看出,利用程序產生256個採樣數據,低電平數據為0,高電平數據為255,整個模擬程序佔用晶片程序存儲器3 492位元組,數據存儲器3 156位元組。完成一次分析需要2 410 975時鐘周期,當採用8 MHz的時鐘信號需要約0.3 s,前10次諧波的計算相對誤差低於千分之一。

TI公司新推出的MSP430F5xx系列產品的指令執行速度達到25MIPS,並提供32位×32位硬體乘法器模塊,這將進一步提高運算速度。


相關焦點

  • 用FPGA實現FFT算法(圖)
    當n較大時,因計算量太大,直接用dft算法進行譜分析和信號的實時處理是不切實際的。快速傅立葉變換(fast fourier transformation,簡稱fft)使dft運算效率提高1~2個數量級。其原因是當n較大時,對dft進行了基4和基2分解運算。fft算法除了必需的數據存儲器ram和旋轉因子rom外,仍需較複雜的運算和控制電路單元,即使現在,實現長點數的fft仍然是很困難。
  • 基於DSP的FFT算法實現
    基於DSP的FFT算法實現1、FFT的原理快速傅氏變換(FFT)是離散傅氏變換的快速算法,它是根據離散傅氏變換的奇、偶、
  • 基於FPGA的FFT算法硬體實現
    基於FPGA的FFT算法硬體實現
  • 基於TMS32OLF24O7的FFT算法的實現
    信號的一些特性在時域總是表現得不明顯,通過傅立葉算法,將其變換到頻域,其特性就一目了然。例如,來自供電系統的幹擾在時域上總是不易識別,但是在頻域上就可以很清晰地看到50~60 Hz的離散諧波。在計算機系統中,實際上是以離散傅立葉變換(DFT)的方式處理數據。由於DFT的運算量比較大,並不適用於嵌入式控制系統,所以實際應用中常使用DFT 的快速算法一快速傅立葉變換(FFT)。
  • 基於FPGA的高速流水線FFT算法實現
    FFT(快速傅立葉變換)算法是作為DFT的快速算法提出,它將長序列的DFT分解為短序列的DFT,大大減少了運算量,使得DFT算法在頻譜分析、濾波器設計等領域得到了廣泛的應用。  FPGA(現場可編程門陣列)是一種具有大規模可編程門陣列的器件,不僅具有專用集成電路(ASIC)快速的特點,更具有很好的系統實現的靈活性。FPGA可通過開發工具實現在線編程。
  • matlab下實現FFT信號分析
    利用matlab做頻譜分析前我們需要了解分析過程中的一些基礎知識,matlab中的 fft 函數用法、fftshift 函數的用法函數 1  fft :作用:快速傅立葉變換。語法:Y = fft(X)Y = fft(X,n)Y = fft(X,n,dim)語法:Y = fft(X) 用快速傅立葉變換 (FFT) 算法計算 X 的離散傅立葉變換 (DFT)。
  • 利用FFT IP Core實現FFT算法
    結合工程實踐,介紹了一種利用FFT IP Core實現FFT的方法,設計能同時對兩路實數序列進行256點FFT運算,並對轉換結果進行求模平方運算,且對數據具有連續處理的能力。
  • 基於Cyclone II FPGA開發平臺實現語音識別算法程序的設計
    基於Cyclone II FPGA開發平臺實現語音識別算法程序的設計 瀋陽;馮良;洪誠 發表於 2021-01-12 10:21:38 SOPC可編程片上系統是一種獨特的嵌入式微處理系統。
  • 基於FPGA IP核的FFT實現
    在FFT的硬體實現中,需要考慮的不僅僅是算法運算量,更重要的是算法的複雜性、規整性和模塊化,而有關利用FFT IP核實現FFT算法卻涉及不多。這裡從Altera IP核出發,建立了基4算法的512點FFT工程,對不同參數設置造成的誤差問題進行分析,並在EP2C70F896C8器件上進行基於Quartus II的綜合仿真,得到利用FFT IP核的FFT算法高效實現,最後利用Matlab進行的計算機仿真分析證明了工程結果的正確性。
  • 通俗易懂的講解FFT的讓你快速了解FFT
    當然這都是以前的事情了,經過了系統的學習+2個星期的研究,自製了一個FFT的算法,不敢說速度上的優勢,但是個人認為是一種通俗易懂的實現方法。經過實際的VC++模擬實驗、和STM32跑的也很成功。 首先,要會FFT,就必須要對DFT有所了解,因為兩者之間本質上是一樣的。
  • 用FPGA實現FFT算法
    當N較大時,因計算量太大,直接用DFT算法進行譜分析和信號的實時處理是不切實際的。快速傅立葉變換(Fast Fourier Transformation,簡稱FFT)使DFT運算效率提高1~2個數量級。其原因是當N較大時,對DFT進行了基4和基2分解運算。FFT算法除了必需的數據存儲器ram和旋轉因子rom外,仍需較複雜的運算和控制電路單元,即使現在,實現長點數的FFT仍然是很困難。
  • 基於TMS320LF2407的FFT算法的實現及應用
    信號的一些特性在時域總是表現得不明顯,通過傅立葉算法,將其變換到頻域,其特性就一目了然。例如,來自供電系統的幹擾在時域上總是不易識別,但是在頻域上就可以很清晰地看到50~60 Hz的離散諧波。 在計算機系統中,實際上是以離散傅立葉變換(DFT)的方式處理數據。由於DFT的運算量比較大,並不適用於嵌入式控制系統,所以實際應用中常使用DFT 的快速算法一快速傅立葉變換(FFT)。
  • DSP集成開發環境中的混合編程及FFT算法的實現
    前者可以脫離DSP晶片,在PC機上模擬DSP指令集與工作機制,主要用於前期算法實現和調試。後者實時運行在DSP晶片上,可以在線編制和調試應用程式。 這種方法可以實現C語言無法實現的一些硬體控制功能,如修改中斷控制寄存器。        (4) 將C語言編譯生成相應的彙編代碼,手工修改和優化C編譯器生成的彙編代碼。採用這種方法可以控制C編譯器,從而產生具有交叉列表的彙編程序,而設計者可以對其中的彙編語句進行修改,然後對彙編程序進行編譯,產生目標文件。
  • 基於Xilinx FPGA 實現FFT算法的電力諧波檢測的設計方案詳解
    基於Xilinx FPGA 實現FFT算法的電力諧波檢測的設計方案詳解 工程師青青 發表於 2018-07-16 18:22:00 基於FFT算法的電力系統諧波檢測裝置
  • 基於Nios的FFT算法軟硬體協同設計
    利用自定製的FFT運算指令,在Nios中利用C語言 編寫基於Nios的FFT算法程序,實現了FFT運算的軟硬體協同設計。經測試表明,將FFT算法加入到Nios嵌入式處理器指令集中,可以幫助系統完成 複雜的數據處理任務,增強Nios系統的實時處理能力。該設計方法打破了軟硬體間的屏障,大大加快了系統的功能驗證。
  • 基於TMS32OLF24O7的FFT算法的實現及應用
    信號的一些特性在時域總是表現得不明顯,通過傅立葉算法,將其變換到頻域,其特性就一目了然。例如,來自供電系統的幹擾在時域上總是不易識別,但是在頻域上就可以很清晰地看到50~60 Hz的離散諧波。 在計算機系統中,實際上是以離散傅立葉變換(DFT)的方式處理數據。由於DFT的運算量比較大,並不適用於嵌入式控制系統,所以實際應用中常使用DFT 的快速算法一快速傅立葉變換(FFT)。
  • 用C語言實現FFT算法
    /*****************fft programe*********************/#include typedef.h #include math.h本文引用地址:http://www.eepw.com.cn/article/150637.htmstruct compx
  • 基於TMS320LF2407的FFT算法的實現
    將x(n)分解為偶數與奇數的兩個序列之和,即  FFT算法的原理是通過許多小的更加容易進行的變換去實現大規模的變換,降低了運算要求,提高了與運算速度。FFT不是DFT的近似運算,它們完全是等效的。
  • 基於改進的CORDIC算法的FFT復乘及其FPGA實現
    在FFT運算中,核心操作是蝶形運算,而蝶形運算的主要操作是向量旋轉,實現向量旋轉可用複數乘法運算來實現,但複數乘耗費了FFT運算中大量的乘法器資源。CORDIC算法只需簡單的移位與加減運算就能實現向量旋轉,具有使用資源少、硬體規模小等優勢。因此在FFT蝶形運算中用其代替傳統FFT運算中的複數乘法器,可以獲得更好的性能。
  • 每日函數——fft
    fft快速傅立葉變換語法Y  = fft(X)Y  = fft(X