cmz871627 发表于 2012-7-31 10:06:16

FFT 计算各次谐波的幅值

最近在搞FFT  我用的是自带DSP库中64点 的FFT  现在我遇到一个问题是:我在通过对采样数据进行完FFT后  来计算各次谐波幅值的时候发现计算的值就不对  总是乱跳 (前提是我用的是一个可以产生稳定谐波的源)不知道这是为什么。希望高手给予指点 
计算幅值的程序如下:
void powerMag(long nfill)
{
  s32 lX,lY;
  u32 i;
  for (i=0; i < nfill; i++)
  {
    lX= (lBUFOUT16; /* sine_cosine --> cos */
    lY= (lBUFOUT >> 16);   /* sine_cosine --> sin */:L
 {   
    float X=  NPT*((float)lX)/32768;
    float Y = NPT*((float)lY)/32768;
    float Mag = sqrt(X*X+ Y*Y)/nfill;   // 先平方和,再开方
    lBUFMAG = (u32)(Mag*65536);   //
 }
  }
}
 

发表于 2012-7-31 10:27:14

RE:FFT 计算各次谐波的幅值

lX= (lBUFOUT16; /* sine_cosine --> cos */
这个不还是lBUFOUT吗?

cmz871627 发表于 2012-7-31 10:36:27

回复:FFT 计算各次谐波的幅值

回复第 2 楼 于2012-07-31 10:27:14发表:
lX= (lBUFOUT16; /* sine_cosine --> cos */
这个不还是lBUFOUT吗? 

是的  我的理解是确宝高16位为空吧    这个求幅值的函数  是我在网上找的   大多数都是这样的   是因为这点的原因吗?

发表于 2012-7-31 11:36:45

RE:FFT 计算各次谐波的幅值

你仿真到这里,看看这里的内容。然后算一下,看看是采集的时候数据放错了。还是有别的问题。

发表于 2012-7-31 11:40:57

RE:FFT 计算各次谐波的幅值

其实也可以这样写,a&0x00FF。取的是低16位。这里最好还是仿真看一下,实际采集的数据和你发书据是不是相同。

cmz871627 发表于 2012-7-31 11:45:18

回复:FFT 计算各次谐波的幅值

回复第 5 楼 于2012-07-31 11:40:57发表:
其实也可以这样写,a&0x00FF。取的是低16位。这里最好还是仿真看一下,实际采集的数据和你发书据是不是相同。 

好的  我试试看  :)

qq371833846-814 发表于 2012-8-27 01:48:12

回复:FFT 计算各次谐波的幅值

回复第 5 楼 于2012-07-31 11:40:57发表:
其实也可以这样写,a&0x00FF。取的是低16位。这里最好还是仿真看一下,实际采集的数据和你发书据是不是相同。
a&0x00FF。取的是低16位,你确定?????
 
页: [1]
查看完整版本: FFT 计算各次谐波的幅值