发新帖本帖赏金 3.00元(功能说明)我要提问
12下一页
返回列表
[STM32F4]

【f446re开发板试用】F446傅里叶运算

[复制链接]
3530|34
手机看帖
扫描二维码
随时随地手机跟帖
sky.sun.zz|  楼主 | 2015-9-30 16:22 | 显示全部楼层 |阅读模式
本帖最后由 sky.sun.zz 于 2015-9-30 16:50 编辑

使用f446re开发板来运行傅里叶运算,是STM32F4系列的强项
编译环境使用MDK5.14版。在Project中加入ST的DSP库:
      
FFT2.jpg
               添加DSP库

FFT.jpg       
                  目录树



本例使用DSP库里面的基4浮点FFT算法,输入点数为1024点。模拟输入的信号直流分量为100,外加2个幅值分别为10和30的正弦信号和一个幅值为50的余弦信号。
为了测试运算速度,将GPIOC-10设置成输出,每次运算结束后翻转PC10,实测STM32F446做一次1024点的FFT运算耗时4毫秒。

#include "stm32f4xx.h"
#include "arm_math.h"
#define FFT_LENGTH 1024
float inputbuf[FFT_LENGTH*2];           
float outputbuf[FFT_LENGTH];     
static void FFT_read(void);
static void GPIO_Config(void);
int main(void)
{
  SystemInit();               
  SysTick_Init();
        GPIO_Config();
        while(1)
        {
                FFT_read();
                GPIOC->ODR ^=0X0400;
        }
}
static void FFT_read(void)
{uint16_t i;
arm_cfft_radix4_instance_f32 scfft;
arm_cfft_radix4_init_f32(&scfft,FFT_LENGTH,0,1);
           for(i=0;i<FFT_LENGTH;i++)                                                        
             {  
inputbuf[2*i]=100+10*arm_sin_f32(2*PI*i/FFT_LENGTH)+30*arm_sin_f32(2*PI*i*4/FFT_LENGTH)+50*arm_cos_f32(2*PI*i*8/FFT_LENGTH);            
               inputbuf[2*i+1]=0;                                                                        
             }
   arm_cfft_radix4_f32(&scfft,inputbuf);                     
   arm_cmplx_mag_f32(inputbuf,outputbuf,FFT_LENGTH);
}

static void GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
}
运行结果部分截图:
FFT3.jpg







打赏榜单

21ic小喇叭 打赏了 3.00 元 2015-10-26

玛尼玛尼哄| | 2015-9-30 16:57 | 显示全部楼层
DSP库里面的基4浮点FFT算法,输入点数为1024点

使用特权

评论回复
Roderman_z| | 2015-9-30 20:29 | 显示全部楼层
能够运算浮点数,F4还真好用

使用特权

评论回复
stm32learn| | 2015-10-3 12:51 | 显示全部楼层
多谢分享

使用特权

评论回复
lkl0305| | 2015-10-7 23:04 | 显示全部楼层
楼主用的标准库吧

使用特权

评论回复
sky.sun.zz|  楼主 | 2015-10-8 07:19 | 显示全部楼层
lkl0305 发表于 2015-10-7 23:04
楼主用的标准库吧

是的,M4的DSP库

使用特权

评论回复
lkl0305| | 2015-10-8 17:18 | 显示全部楼层

多谢分享,我也正在学习,不过使用CUBE库

使用特权

评论回复
TRUE_ARM| | 2015-10-11 14:24 | 显示全部楼层
试一试 IFFT 如何???

使用特权

评论回复
sky.sun.zz|  楼主 | 2015-10-11 14:28 | 显示全部楼层
本帖最后由 sky.sun.zz 于 2015-10-11 14:30 编辑

https://bbs.21ic.com/icview-1143270-1-1.html是在TFT上的显示结果。
IFFT没试过,都是ST的DSP库应该没问题,欢迎楼上试试并共享

使用特权

评论回复
玛尼玛尼哄| | 2015-10-14 22:38 | 显示全部楼层
调用了DSP库后,如何调用傅里叶变换啊?

使用特权

评论回复
mintspring| | 2015-10-14 23:02 | 显示全部楼层
怎么知道那个Lib文件里都有哪些函数可以调用啊?

使用特权

评论回复
sky.sun.zz|  楼主 | 2015-10-15 07:30 | 显示全部楼层
库里的文件大部分就是让用户调用的,你要用三角函数就调用三角函数,要用滤波就调用滤波。

使用特权

评论回复
稳稳の幸福| | 2015-10-15 08:45 | 显示全部楼层
sky.sun.zz 发表于 2015-10-15 07:30
库里的文件大部分就是让用户调用的,你要用三角函数就调用三角函数,要用滤波就调用滤波。 ...

楼主,问一下,那个库函数lib的函数列表在哪儿看啊?不知道都有哪些可以调用。

使用特权

评论回复
sky.sun.zz|  楼主 | 2015-10-15 11:05 | 显示全部楼层
无标题.jpg

STM32F4XX固件库之DSP库的说明.pdf (92.13 KB)

使用特权

评论回复
perry_peng| | 2015-10-21 11:20 | 显示全部楼层
谢谢分享。

使用特权

评论回复
foxglove| | 2015-10-29 13:41 | 显示全部楼层
F4傅里叶运算

使用特权

评论回复
huangcunxiake| | 2015-10-29 16:45 | 显示全部楼层
现在都开始流行用HAL了,不知道有中文课程没

使用特权

评论回复
sky.sun.zz|  楼主 | 2015-10-29 16:47 | 显示全部楼层
huangcunxiake 发表于 2015-10-29 16:45
现在都开始流行用HAL了,不知道有中文课程没

HAL是抽象层,针对硬件的底层函数。FFT是应用层。

使用特权

评论回复
Mia_de| | 2015-12-10 23:37 | 显示全部楼层
请教楼主,输入信号可否为FPGA 的ADC结果,如果可行,程序应怎么改动呢,新人一枚,刚接触stm32,希望楼主帮忙

使用特权

评论回复
sky.sun.zz|  楼主 | 2015-12-11 07:43 | 显示全部楼层
Mia_de 发表于 2015-12-10 23:37
请教楼主,输入信号可否为FPGA 的ADC结果,如果可行,程序应怎么改动呢,新人一枚,刚接触stm32,希望楼主 ...

我想当然可以,你把ADC转换过程替换成从FPGA接收数据,至于如何接收,与你的FPGA和STM32要进行的数据接口相关,比如SPI、DMA、IIC等等。然后每到数据块传输完成就产生中断,进入FFT运算和显示。

使用特权

评论回复
发新帖 本帖赏金 3.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

727

帖子

13

粉丝