sfee2002 发表于 2015-11-21 16:02:41

【NUCLEO-L476RG开发】M4核dsp库,fft的测试

Stm32L467的板子也拿到了一段时间了,一直不知拿它干些什么。开始想驱动个IO,串口或spi…….,后来感觉这些任何单片机都带,基本又是大同小异。就想还是试一下M4核特有的东西。我们知道M4核包含有FPU单元,单精度的浮点运算比M3会快很多。M4核还具有部分DSP指令,软件同时也提供了DSP库,我们可以直接调用。于是我就利用软件中的DSP库对FFT进行了测试。源码附件在最后,欢迎大家下载测试


步骤如下:1      建一个1024点的数组,然后用DSP库中的函数,生成一组正弦函数,模拟采样数据。       testInput_f32_10khz =((1.2f)*arm_sin_f32(2*3.1415926f*50*i/fftSize)+1) +(arm_sin_f32(2*3.1415926f*100*i/fftSize));      数据在testInput_f32_10khz[]中保存

2      对这组数据进行FFT计算。并观察计算结果      计算的函数为arm_rfft_fast_f32(&S, testInput_f32_10khz, (float32_t*)(&(FftOut_f32.Buf)), ifftFlag);      结果放在FftOut_f32.Buf[]中。这个是复数的,要找到频谱必须求模。(为什么要求模请自己看看数字信号处理)   下图 中前三个图

3      对FFT计算出的结果再用DSP库中的函数进行求模运算。并观察运算结果。      arm_cmplx_mag_f32((float32_t *)(&(FftOut_f32.Buf)), testOutput,fftSize)      求模的结果放在testOutput[]数组中。   下图 中后三个图
从图中可以看到模值最大的是第一个,这是FFT特点决定,然后是在50这个点和100这个两个点,我们生成这组数据时就是模拟50Hz和100Hz(((1.2f)*arm_sin_f32(2*3.1415926f*50*i/fftSize)+1) +(arm_sin_f32(2*3.1415926f*100*i/fftSize));)同时50Hz的幅值大于100Hz的。 Fft在实际中用处很多, Fft要用到实际的应用中还有很多要进行设计和控制(比如采样周期控制等)。
这里只是测试一下,抛砖引玉,不对的地方欢迎大家批评吐槽。




党国特派员 发表于 2015-11-21 16:54:27

学习之。。。

alvin_ 发表于 2015-11-21 17:13:47

这个很值得顶,这才叫试用贴呀

Paderboy 发表于 2015-11-21 18:08:15

多谢分享。。。

飞狼老大 发表于 2015-11-21 22:30:35

:P支持一下!

liuyu-419812 发表于 2015-11-22 10:08:57

支持一个,希望楼主继续下去

dsjsjf 发表于 2015-11-22 22:22:40

感谢分享

逍遥李 发表于 2015-12-3 10:56:41

楼主有没有DSP配置过程?直接使用的软件DSP吗?L476是不是有硬件DSP外设啊?

潇潇雨歇pku 发表于 2015-12-3 11:50:53

lz你好,我也用ARM的DSP库,也是用了1024点的fft。
但是发现1024点的fft必须要分配很大的CSTACK才可以(大约要20多kb吧),否则会栈溢出,这样对MCU的RAM容量要求就很高,需要至少32kb。
不知lz有没有碰到同样的问题?有没有什么好的解决办法可以分享一下?

sfee2002 发表于 2015-12-3 13:52:25

潇潇雨歇pku 发表于 2015-12-3 11:50
lz你好,我也用ARM的DSP库,也是用了1024点的fft。
但是发现1024点的fft必须要分配很大的CSTACK才可以(大 ...

是的,我开始用的是16k的F303,编译提示越界,要用更大的RAM才行
页: [1] 2
查看完整版本: 【NUCLEO-L476RG开发】M4核dsp库,fft的测试