硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4166|回复: 6
收起左侧

[DSP] 求助!关于STM32官方DSP库中FFT函数中采样点幅值的使用问题

[复制链接]

1

主题

4

回帖

1

积分

新手上路

积分
1
发表于 2017-10-20 10:27:39 | 显示全部楼层 |阅读模式
STM32官方的DSP库中FFT库函数的输入参数是一个long型的数组,高16位代表实部,低16位代表虚部,看到官方的例程中,如下:

void MygSin(long nfill, long Fs, long Freq1, long Freq2, long Ampli)
{
  uint32_t i;
  float fFs, fFreq1, fFreq2, fAmpli;
  float fZ,fY;
  fFs = (float) Fs;
  fFreq1 = (float) Freq1;
  fFreq2 = (float) Freq2;
  fAmpli = (float) Ampli;
  for (i=0; i < nfill; i++)
  {
    fY = sin(PI2 * i * (fFreq1/fFs)) + sin(PI2 * i * (fFreq2/fFs));
    fZ = fAmpli * fY;
    lBUFIN= ((short)fZ) << 16 ;  /* sine_cosine  (cos=0x0) */
  }
}
上述函数中,fY的值在-1.0到1.0之间的浮点数,fZ是fY和幅值的乘积,再讲fZ取short型后,左移16位,也就是实部是高16位,这里有个问题没搞明白,假如幅值 fAmpli为1,那么放fZ就是一个-1.0到1.0之间的浮点数,取short后,不是都变成0了吗? 这样还能正确计算fft吗?
跪求大神指点,谢谢!!
回复

使用道具 举报

1

主题

4

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-10-20 15:12:23 | 显示全部楼层
在实际应用中,STM32 的AD采样计算FFT,是不是这样的,直接用AD采样的到的ADC值做FFT算法,然后求得对应频率点的模,将计算得到的模除以4096(12位AD)再乘以参考电压,就是实际的波形的幅值。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
发表于 2017-10-21 02:57:42 | 显示全部楼层
这个是定点FFT,Q15格式,范围-32768 - 32767对应浮点数的-1到1(0.99XXX),具体可以学习下我们DSP教程的ST官方汇编FFT章节。
http://www.armbbs.cn/forum.php?mod=viewthread&tid=3886
回复

使用道具 举报

1

主题

4

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-10-23 20:53:16 | 显示全部楼层

回 eric2013 的帖子

eric2013:这个是定点FFT,Q15格式,范围-32768 - 32767对应浮点数的-1到1(0.99XXX),具体可以学习下我们DSP教程的ST官方汇编FFT章节。
http://www.armbbs.cn/forum.php?mod=viewthread&tid=3886 (2017-10-21 02:57) 
再请教下,在实际应用中,ADC采样的到的是0~3.3V的信号,是不是就用Q13格式,范围-32768~32767对应浮点数的范围是-4~3.9998779??
回复

使用道具 举报

1

主题

4

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-10-23 22:33:01 | 显示全部楼层

回 eric2013 的帖子

eric2013:这个是定点FFT,Q15格式,范围-32768 - 32767对应浮点数的-1到1(0.99XXX),具体可以学习下我们DSP教程的ST官方汇编FFT章节。
http://www.armbbs.cn/forum.php?mod=viewthread&tid=3886 (2017-10-21 02:57) 
用STM32F103芯片,对0~3.3V正弦波做的AD采样,打算用ST官方的DSP FFT算法,FFT算法的输入数据该怎么表示,看了你们DSP教程的ST官方汇编FFT章节,还不是很懂,希望你能再指导下,谢谢!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
发表于 2017-10-24 01:37:43 | 显示全部楼层

回 simomli 的帖子

simomli:再请教下,在实际应用中,ADC采样的到的是0~3.3V的信号,是不是就用Q13格式,范围-32768~32767对应浮点数的范围是-4~3.9998779?? (2017-10-23 20:53) 
使用ST的这个库,不用考虑这些,你直接代入整形数据即可,不要超过16位数范围。比如STM32的ADC是12位的,你只需直接代入ADC实际数值即可。
回复

使用道具 举报

1

主题

4

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-10-24 08:41:35 | 显示全部楼层

回 eric2013 的帖子

eric2013:使用ST的这个库,不用考虑这些,你直接代入整形数据即可,不要超过16位数范围。比如STM32的ADC是12位的,你只需直接代入ADC实际数值即可。 (2017-10-24 01:37) 
非常感谢
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-11-1 07:03 , Processed in 0.341871 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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