之前想玩一下FPU 可惜那個(gè)DSP庫(kù)看不懂 也找不到教程我研究了2個(gè)晚上總算會(huì)用那個(gè)FFT了....
我的環(huán)境是 IAR 6.2
板子是STM32F4DISCOVERY
第一 首先下載官方的 STM32F4xx_DSP_StdPeriph_Lib_V1.0.0沒(méi)有的同學(xué)請(qǐng)自己去官網(wǎng)下一個(gè)
DSP庫(kù)在 STM32F4xx_DSP_StdPeriph_Lib_V1.0.0LibrariesCMSIS
然后我們使用IAR建立工作空間 這個(gè)教程到處都有 我就不說(shuō)了
在編譯器里面加入
$PROJ_DIR$......LibrariesCMSISDSP_LibSource
_MATH_CM4
_MATH_MATRIX_CHECK
_MATH_ROUNDING
__FPU_PRESENT
__FPU_USED
這樣才可以使用DSP庫(kù)
注意 我的是IAR MDK貌似不是這樣的 .....
然后再編譯器里面打開 FPU
恩 然后再你的EW 目錄下添加官方的例子文件
恩 我們用的就是這幾個(gè)文件 STM32F4xx_DSP_StdPeriph_Lib_V1.0.0LibrariesCMSISDSP_LibExamplesarm_fft_bin_example
沒(méi)有那么容易完了 接著
添加啊 ...................終于添加完了 然后在IAR里面加入 arm_fft_bin_example_f32 這個(gè)就是官方的例子和官方的數(shù)據(jù) arm_fft_bin_data
然后終于可以編譯了 連接下載
使用WATCH窗口可以看見(jiàn)值
然后 我講一下這幾個(gè)函數(shù)的作用
/* Initialize the CFFT/CIFFT module */
status = arm_cfft_radix4_init_f32(&S, fftSize,
ifftFlag, doBitReverse); //這里是FFT的初始化
/* Process the data through the CFFT/CIFFT module */ //FFT計(jì)算的函數(shù) 注意testInput_f32_10khz 這個(gè)數(shù)組 不能是const 因?yàn)橛?jì)算值是覆蓋在這里面的
arm_cfft_radix4_f32(&S, testInput_f32_10khz);
/* Process the data through the Complex Magnitude Module for // FFT出來(lái)的是復(fù)數(shù)這里是把復(fù)數(shù)求模 得幅值
calculating the magnitude at each bin */
arm_cmplx_mag_f32(testInput_f32_10khz, testOutput,
fftSize);
/* Calculates maxValue and returns corresponding BIN value */ //這里是求FFT出來(lái)數(shù)據(jù)模的最大值
arm_max_f32(testOutput, fftSize, &maxValue, &testIndex);
最后 如果你的運(yùn)行到這一步 你就成功了
哈哈哈