一. 前言
后面會(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)注
68文章
2409瀏覽量
142050 -
dsp
+關(guān)注
關(guān)注
559文章
8187瀏覽量
362844 -
PSoC
+關(guān)注
關(guān)注
12文章
177瀏覽量
94401 -
語(yǔ)音識(shí)別
+關(guān)注
關(guān)注
39文章
1796瀏覽量
115278 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
6033瀏覽量
110891 -
RTT
+關(guān)注
關(guān)注
0文章
66瀏覽量
18055
發(fā)布評(píng)論請(qǐng)先 登錄
【英飛凌PSoC 6 RTT開(kāi)發(fā)板試用】信號(hào)處理前端之濾波
【新品發(fā)布】英飛凌PSoC 6 RTT物聯(lián)網(wǎng)開(kāi)發(fā)板內(nèi)容詳解
如何使用CMSIS-DSP庫(kù)進(jìn)行FFT運(yùn)算
如何將CMSIS-DSP庫(kù)加載到基于LPC55S69的工程中?
【新品試用】英飛凌PSoC 6 RTT開(kāi)發(fā)板試用活動(dòng)
【英飛凌PSoC 6 RTT開(kāi)發(fā)板試用】
【英飛凌PSoC 6 RTT開(kāi)發(fā)板試用】+開(kāi)箱測(cè)試
如何使用Arm CMSIS-DSP實(shí)現(xiàn)經(jīng)典機(jī)器學(xué)習(xí)庫(kù)
使用CMSIS-DSP庫(kù)和Keil RTX5開(kāi)發(fā)模擬輸入信號(hào)的數(shù)字濾波器
英飛凌聯(lián)合 RT-Thread 發(fā)布 PSoC? 62 with CAPSENSE ? evaluation kit開(kāi)發(fā)板
英飛凌開(kāi)發(fā)板模塊評(píng)測(cè)任務(wù)大挑戰(zhàn)-SPI驅(qū)動(dòng)測(cè)試
玩轉(zhuǎn)PSoC 6 RTT積木式開(kāi)發(fā)套件,實(shí)現(xiàn)毫米波雷達(dá)等實(shí)用功能

【英飛凌PSoC 6 RTT開(kāi)發(fā)板試用】語(yǔ)音識(shí)別之一:移植CMSIS-DSP庫(kù)-FFT測(cè)試
評(píng)論