OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4875|回复: 6

大家帮我看一下程序的问题,ADC+DMA+TIME+DSP的FFT应用

[复制链接]

11

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2016-3-1
在线时间
55 小时
发表于 2016-6-11 10:50:11 | 显示全部楼层 |阅读模式
5金钱
#include "sys.h"
#include "arm_math.h"
#include "fft.h"


#define FFT_LENGTH        1024         //FFT长度

extern volatile uint16_t ADC1OscConver[1024];//这是将ADC传到的DMA数据  DMA一次传1024个数据
float fft_inputbuf[FFT_LENGTH*2];    //FFT输入数组
float fft_outputbuf[FFT_LENGTH];    //FFT输出数组
float fft_outputbuf1[FFT_LENGTH];
uint32_t  testIndex = 0;  
float32_t maxValue;
float m;
void FFT()
{
    int i=0;
    arm_cfft_radix4_instance_f32 S;
    arm_cfft_radix4_init_f32(&S,FFT_LENGTH,0,1);//初始化scfft结构体,设定FFT相关参数   
    for(i=0;i<1024;i++)
    {
        fft_inputbuf[2*i]=(float32_t)ADC1OscConver[i]; //实部
        fft_inputbuf[2*i+1]=0;    //虚部全部为0
        printf("fft_inputbuf[%d]:%f\r\n",i,fft_inputbuf[i]*(3.3/4096));
    }
   
  arm_cfft_radix4_f32(&S,fft_inputbuf);    //FFT计算(基4)
   
    arm_cmplx_mag_f32(fft_inputbuf,fft_outputbuf,2048);    //把运算结果复数求模得幅值
   
    arm_max_f32(fft_outputbuf,FFT_LENGTH,&maxValue,&testIndex);
       for(i=0;i<FFT_LENGTH;i++)
            {
                fft_outputbuf1[i]=fft_outputbuf[i]*(3.3/4096);
                printf("fft_outputbuf[%d]:%f\r\n",i,fft_outputbuf1[i]);
            }
            m=maxValue*(3.3/4096);
            printf("maxValue=%f\n",m);
}

我将结果直接转换成电压了,通过串口打印出来的幅值有问题,信号发生器给的幅值为3v,但数据有上百的结果,而且最大值有400多,ADC采集的电压已经测过了,是对的,也能正常的传到FFT输入数组里,是不是我的计算有问题呀,请大神指导

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2016-6-11 19:28:18 | 显示全部楼层
回复

使用道具 举报

4

主题

33

帖子

0

精华

高级会员

Rank: 4

积分
557
金钱
557
注册时间
2016-4-10
在线时间
100 小时
发表于 2016-7-19 13:21:17 | 显示全部楼层
解决了吗?
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2016-9-22
在线时间
3 小时
发表于 2016-10-8 17:28:58 | 显示全部楼层
你的 fft_inputbuf是AD采集的编码值,并没有做转换,所以变换后的数值也是编码值
回复

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-6-1
在线时间
18 小时
发表于 2017-6-12 09:43:21 | 显示全部楼层
楼主,能分享一下工程文件吗?想学习一下!
回复

使用道具 举报

7

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2019-4-21
在线时间
23 小时
发表于 2019-6-2 12:46:27 | 显示全部楼层
我也有这个问题,楼主解答里面
回复

使用道具 举报

1

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2019-2-25
在线时间
45 小时
发表于 2019-7-12 16:48:03 | 显示全部楼层
FFT分析出来的结果0点时的真正幅值应为0点的值除以采样点数即N,除零点以外除以N/2,之后在转换为幅值
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-15 16:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表