C 28x FFT變換庫解析

2021-06-22 17:17:52 字數 1916 閱讀 1789

用於 c2000

tm 微處理器的 controlsuite

tm 是一套全面的軟體基礎設施和軟體工具集,旨在最大程度地縮短軟體開發時間。從特定於器件的驅動程式和支援軟體到複雜系統應用中的完整系統示例,controlsuite

tm 在每個開發和評估階段都提供了程式庫和示例

ti公司的c28x+fpu架構以其高速的資料處理能力和簡單易用的程式設計方法,必將成為後續高效能電機控制的發展趨勢之一。上次講了ti公司常用浮點單元函式庫fastrts的一些內容,一些常用的函式,如正余弦、正切、反正切、平方根等都可以供我們直接呼叫,不用費時去自己編寫、優化了。同時,ti還提供了可供我們直接呼叫的、已經高度優化的傅利葉變換、反變換函式,包括rfft_f32、rfft_f32u、rfft_f32_mag、rfft_f32s_mag、rfft_f32_phase以及rfft_f32_sincostable。其具體的使用方法描述如下:

在ccs的build選項中開啟「-g -o3 -d"_debug" -d"large_model" -ml -v28 --float_support=fpu32」

如果使用浮點格式,則引用fpu.h 這個標頭檔案,其中包含的資料型別有:

#ifndefdsp28_data_types

#definedsp28_data_types

typedefint                int16;

typedeflong               int32;typedeflong long          int64;typedefunsignedint        uint16;typedefunsignedlong      uint32; typedefunsignedlonglonguint64;typedef float              float32;typedeflong double         float64;

#endif

如果使用定點格式,則引用iqmath格式

然後就可以呼叫了。以單精度浮點的快速傅利葉變換fft為例,其具體呼叫方法為:

首先宣告函式,即voidrfft_f32(rfft_f32_struct*)

其結構體內部的定義為:

typedefstructrfft_f32_struct;

實際的呼叫為:

#includefpu.h

#definefft_size  128       /*32,64,128,256,etc       */

#definefft_stages  7       /*log2(fft_size)              */

/*aligntheinbufsectionto2*fft_sizeinthelinkerfile  */

#pragmadata_section(inbuf,"inbuf");

float32inbuffer[fft_size];

float32outbuffer[fft_size];float32 twiddlebuffer[fft_size];rfft_f32_struct fft;

main()

最終的效能測試為:

fftsize

c-callableasm32

608cycles

641278cycles

1282784cycles

2566170cycles

51213672cycles

上面的效能指標中,所有的快取區與堆疊都是放在dsp的片內ram中的(零等待)。曾經為了節省片內資源,放在片外擴充套件的ram中做過測試,發現結果總是不對。後來才發現每次呼叫片外ram的資料都需要幾十個ns,幾千次讀寫下來這個總延時已經遠遠超過了中斷週期,自然不能正常執行了。現在想想,像28335這樣的高效能大容量晶元,其片內儲存再多放幾個fft的緩衝區也沒有關係啊。

C 使用Eigen庫實現K L變換

我就是來水一篇部落格的。k l變換實現 屬於特徵提取與選擇這一章,實現上唯一的遺憾是不確定 n 和 dimension 是否可以在 compile time 確定。比上次的 apriori 和 fpgrowth 要水很多 include include include include include...

C 深度解析 28 過載前置 與後置

3 小結 對於 i 和 i 有什麼區別呢?區別如下 我們反彙編一下看看二者的區別到底在哪?程式設計實驗 原生前置 與後置 的區別 include using namespace std intmain 反彙編如下,我們可以看到對於單純的 i 和 i 來說從彙編 上看沒有任何區別。為什麼單純的 i 和...

ini檔案解析c庫 iniparser

github 一.交叉編譯ini解析庫 1.官方 2.解壓 cpp view plain copy tar zxvf iniparser 3.1.tar.gz cd tar zxvf iniparser 3.修改makefile cpp view plain copy cc gcc 修改為 cc a...