app开发者平台在数字化时代的重要性与发展趋势解析
1082
2022-11-23
【嵌入式】Cortex M4F DSP库
使用CM4内核自带的FPU需要在编译的时候添加编译选项:--cpu Cortex-M4.fp,以使能FPU指令集,否则使用的是普通Thumb2指令实现的DSP函数。同时还需添加宏定义:ARM_MATH_CM4,这在CMSIS DSP Library的arm_math.h里面用到。CMSIS DSP Library可以在ARM的官网找到:
如果使用MDK的话,直接在Runtime Environment管理器里面添加DSP库,Floating Point Hardware选择Single Precision,预定义宏加上ARM_MATH_CM4,这样工程自动添加了DSP库:
上面那个库是使用FPU指令集生成的DSP库,下面的是没有使用FPU指令集......
DSP库测试:
static float sin_out[256];static float fft_mag[256];static float fft_out[256];static void DSP_Test(){ #define FFT_LENGTH 256 arm_rfft_fast_instance_f32 S; // 创建一个t=2S钟之内的采样数据,采样点数FFT_LENGTH,采样周期T=t/FFT_LENGTH,采样频率F=1/T for(uint16_t i = 0; i < FFT_LENGTH; i++) { sin_out[i] = arm_sin_f32(i*2*3.1416f/128) + 0.3f*arm_sin_f32(i*2*3.1416f/16); // } for(uint16_t i = 0; i < FFT_LENGTH; i++) { LOGI("%.4f\r\n",sin_out[i]); DDL_DelayUS(1000); } arm_rfft_fast_init_f32(&S, FFT_LENGTH); //初始化1024点FFT参数 arm_rfft_fast_f32(&S,sin_out,fft_out,0); //计算FFT arm_cmplx_mag_f32(fft_out,fft_mag, FFT_LENGTH); //计算模值 for(uint16_t i = 0; i < FFT_LENGTH / 2; i++) { LOGI("%4d %4.4f %4.4f\r\n", i, (float)i * 128 / FFT_LENGTH, fft_mag[i]);//frequency = N * sample frequency / FFT length DDL_DelayUS(1000); }}
结果在Excel上画图,采样点图像(1Hz正弦波和8Hz正弦波叠加):
两个波峰分别对应1Hz和8Hz,和采样点的频率一致。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~