一. 前言
后面會(huì)基于本開(kāi)發(fā)板實(shí)現(xiàn)語(yǔ)音識(shí)別,需要使用到FFT等關(guān)鍵算法,所以先移植CMSIS-DSP庫(kù),并進(jìn)行FFT的測(cè)試。
移植DSP算法庫(kù)
添加代碼
git clone https://github.com/ARM-software/CMSIS_5.git
CMSIS_5\\CMSIS\\DSP下是相關(guān)文件,Source下是源碼
將DSP文件夾復(fù)制到自己的工程目錄中,只保留
Include,PrivateInclude,Source三個(gè)文件夾
Source下的每個(gè)子文件夾都是一類算法,里面的每個(gè)c都對(duì)應(yīng)一個(gè)計(jì)算函數(shù),并且有一個(gè)總文件包括其中所有的單個(gè).c,比如BasicMathFunctions.c中
刪除這些總的.c,避免編譯重復(fù)
刪除以下文件和所有的非.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
工程設(shè)置添加相關(guān)頭文件包含路徑
測(cè)試
復(fù)制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打印,我們已經(jīng)重定向?qū)崿F(xiàn)了printf打印到串口。
由于 arm_cfft_f32(&varInstCfftF32, testInput_f32_10khz, ifftFlag, doBitReverse);會(huì)修改testInput_f32_10khz的內(nèi)容,所以添加一個(gè)緩存,以便能重復(fù)測(cè)試
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函數(shù)中申明并調(diào)用
int32_t ffttest_main(void);
ffttest_main();
編譯運(yùn)行可以看到串口打印SUCCESS說(shuō)明測(cè)試OK。
將輸入輸出數(shù)據(jù)打印
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可視化顯示,可以看到計(jì)算結(jié)果FFT頻率明顯的峰值
審核編輯:湯梓紅
-
英飛凌
+關(guān)注
關(guān)注
66文章
2183瀏覽量
138642 -
dsp
+關(guān)注
關(guān)注
553文章
7987瀏覽量
348729 -
PSoC
+關(guān)注
關(guān)注
12文章
170瀏覽量
91891 -
語(yǔ)音識(shí)別
+關(guān)注
關(guān)注
38文章
1739瀏覽量
112632 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5032瀏覽量
97371 -
RTT
+關(guān)注
關(guān)注
0文章
65瀏覽量
17114
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論