一. 前言
后面會基于本開發板實現語音識別,需要使用到FFT等關鍵算法,所以先移植CMSIS-DSP庫,并進行FFT的測試。
移植DSP算法庫
添加代碼
git clone https://github.com/ARM-software/CMSIS_5.git
CMSIS_5\\CMSIS\\DSP下是相關文件,Source下是源碼
將DSP文件夾復制到自己的工程目錄中,只保留
Include,PrivateInclude,Source三個文件夾
Source下的每個子文件夾都是一類算法,里面的每個c都對應一個計算函數,并且有一個總文件包括其中所有的單個.c,比如BasicMathFunctions.c中
刪除這些總的.c,避免編譯重復
刪除以下文件和所有的非.c和.h文件
BasicMathFunctions:BasicMathFunctions.c,BasicMathFunctionsF16.c
BayesFunctions:BayesFunctions.c,BayesFunctionsF16.c
CommonTables:CommonTables.c,CommonTablesF16.c
ComplexMathFunctions:ComplexMathFunctions.c,ComplexMathFunctionsF16.c
ControllerFunctions:ControllerFunctions.c
DistanceFunctions:DistanceFunctions.c,DistanceFunctionsF16.c
FastMathFunctions:FastMathFunctions.c,FastMathFunctionsF16.c
FilteringFunctions:FilteringFunctions.c,FilteringFunctionsF16.c
InterpolationFunctions:InterpolationFunctions.c,InterpolationFunctionsF16.c
MatrixFunctions:MatrixFunctions.c,MatrixFunctionsF16.c
QuaternionMathFunctions:QuaternionMathFunctions.c
StatisticsFunctions:StatisticsFunctions.c,StatisticsFunctionsF16.c
SupportFunctions:SupportFunctions.c,SupportFunctionsF16.c
SVMFunctions:SVMFunctions.c,SVMFunctionsF16.c
TransformFunctions:TransformFunctions.c,TransformFunctionsF16.c,arm_bitreversal2.S
工程設置添加相關頭文件包含路徑
測試
復制CMSIS_5\\CMSIS\\DSP\\Examples\\ARM\\arm_fft_bin_example下的arm_fft_bin_data.c和arm_fft_bin_example_f32.c到自己的工程目錄
arm_fft_bin_example_f32.c下的
int32_t main(void)改為int32_t ffttest_main(void)
并添加#define SEMIHOSTING以使能printf打印,我們已經重定向實現了printf打印到串口。
由于 arm_cfft_f32(&varInstCfftF32, testInput_f32_10khz, ifftFlag, doBitReverse);會修改testInput_f32_10khz的內容,所以添加一個緩存,以便能重復測試
float32_t testtmp_f32_10khz[2048];
/* Process the data through the CFFT/CIFFT module */
memcpy(testtmp_f32_10khz,testInput_f32_10khz,sizeof(testInput_f32_10khz));
arm_cfft_f32(&varInstCfftF32, testtmp_f32_10khz, ifftFlag, doBitReverse);
/* Process the data through the Complex Magnitude Module for
calculating the magnitude at each bin */
arm_cmplx_mag_f32(testtmp_f32_10khz, testOutput, fftSize);
在自己的main函數中申明并調用
int32_t ffttest_main(void);
ffttest_main();
編譯運行可以看到串口打印SUCCESS說明測試OK。
將輸入輸出數據打印
printf("SUCCESS\\\\\\\\n");
for(int i=0; i TEST_LENGTH_SAMPLES; i++)
{
if(i TEST_LENGTH_SAMPLES/2)
{
printf("/*%f,%f*/\\\\\\\\r\\\\\\\\n", testInput_f32_10khz[i],testOutput[i]);
}
else
{
printf("/*%f,%f*/\\\\\\\\r\\\\\\\\n", testInput_f32_10khz[i],0.0);
}
}
使用serialstudio可視化顯示,可以看到計算結果FFT頻率明顯的峰值
審核編輯:湯梓紅
-
英飛凌
+關注
關注
66文章
2062瀏覽量
137538 -
dsp
+關注
關注
551文章
7811瀏覽量
346344 -
PSoC
+關注
關注
12文章
169瀏覽量
91526 -
語音識別
+關注
關注
38文章
1684瀏覽量
112148 -
開發板
+關注
關注
25文章
4704瀏覽量
95785 -
RTT
+關注
關注
0文章
64瀏覽量
16962
發布評論請先 登錄
相關推薦
評論