一. 前言
后面會基于本開發(fā)板實現(xiàn)語音識別,需要使用到FFT等關(guān)鍵算法,所以先移植CMSIS-DSP庫,并進行FFT的測試。
移植DSP算法庫
添加代碼
git clone https://github.com/ARM-software/CMSIS_5.git
CMSIS_5\\CMSIS\\DSP下是相關(guān)文件,Source下是源碼

將DSP文件夾復(fù)制到自己的工程目錄中,只保留
Include,PrivateInclude,Source三個文件夾


Source下的每個子文件夾都是一類算法,里面的每個c都對應(yīng)一個計算函數(shù),并且有一個總文件包括其中所有的單個.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)頭文件包含路徑
測試
復(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);會修改testInput_f32_10khz的內(nèi)容,所以添加一個緩存,以便能重復(fù)測試
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();
編譯運行可以看到串口打印SUCCESS說明測試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可視化顯示,可以看到計算結(jié)果FFT頻率明顯的峰值

審核編輯:湯梓紅
-
英飛凌
+關(guān)注
關(guān)注
68文章
2518瀏覽量
142892 -
dsp
+關(guān)注
關(guān)注
561文章
8244瀏覽量
366669 -
PSoC
+關(guān)注
關(guān)注
12文章
180瀏覽量
95002 -
語音識別
+關(guān)注
關(guān)注
39文章
1812瀏覽量
116058 -
開發(fā)板
+關(guān)注
關(guān)注
26文章
6291瀏覽量
118143 -
RTT
+關(guān)注
關(guān)注
0文章
66瀏覽量
18279
發(fā)布評論請先 登錄
【英飛凌PSoC 6 RTT開發(fā)板試用】信號處理前端之濾波
【新品發(fā)布】英飛凌PSoC 6 RTT物聯(lián)網(wǎng)開發(fā)板內(nèi)容詳解
如何使用CMSIS-DSP庫進行FFT運算
如何將CMSIS-DSP庫加載到基于LPC55S69的工程中?
【新品試用】英飛凌PSoC 6 RTT開發(fā)板試用活動
如何使用Arm CMSIS-DSP實現(xiàn)經(jīng)典機器學(xué)習(xí)庫
使用CMSIS-DSP庫和Keil RTX5開發(fā)模擬輸入信號的數(shù)字濾波器
英飛凌聯(lián)合 RT-Thread 發(fā)布 PSoC? 62 with CAPSENSE ? evaluation kit開發(fā)板
英飛凌開發(fā)板模塊評測任務(wù)大挑戰(zhàn)-SPI驅(qū)動測試
玩轉(zhuǎn)PSoC 6 RTT積木式開發(fā)套件,實現(xiàn)毫米波雷達等實用功能
【英飛凌PSoC 6 RTT開發(fā)板試用】語音識別之一:移植CMSIS-DSP庫-FFT測試
評論