嵌入式开发者社区
标题:
关于FFT计算相角方法求助
[打印本页]
作者:
tulipyyf
时间:
2015-1-6 17:14
标题:
关于FFT计算相角方法求助
创龙工程师,你好,贵司的FFT程序中,已经有计算幅值的样例程序
,如下
DSPF_sp_fftSPxSP(n,CFFT_In,Cw,CFFT_Out,brev,rad,0,n);
// 计算振幅
for(i=0;i<n;i++)
{
Cmo
=sqrtsp(CFFT_Out[2*i]*CFFT_Out[2*i]+CFFT_Out[2*i+1]*CFFT_Out[2*i+1]);
if(i==0)
Cmo
=Cmo
/n;
else
Cmo
=Cmo
*2/n;
}
请问,如何计算对应的相角。谢谢
作者:
tulipyyf
时间:
2015-1-6 17:32
自己解决了
作者:
希望缄默
时间:
2015-1-6 17:39
呃~ 这个是一个数学问题吧
tanθ = 虚部/实部
然后用 atan2sp(tanθ) 求得角度
值不唯一 可以相差 2kπ,k∈Z
作者:
tulipyyf
时间:
2015-1-7 08:41
谢谢创龙工程师
作者:
tulipyyf
时间:
2015-1-7 08:55
早上发现一个问题
我设置一个曲线如下:
for(i=0;i<n;i++)
Input[i]=20+
30*sinsp(2*PI*1.00*(i/fs)+PI*30/180)+
3*sinsp(2*PI*2*1.00*(i/fs)+PI*60/180)+
2*sinsp(2*PI*3*1.00*(i/fs)+PI*90/180)+
0.3*sinsp(2*PI*4*1.00*(i/fs)+PI*120/180)+
0.2*sinsp(2*PI*5*1.00*(i/fs)+PI*150/180)+
0.1*sinsp(2*PI*6*1.00*(i/fs)+PI*180/180);
// 计算振幅
for(i=0;i<n;i++)
{
Cmo[i]=sqrtsp(CFFT_Out[2*i]*CFFT_Out[2*i]+CFFT_Out[2*i+1]*CFFT_Out[2*i+1]);
if(i==0)
Cmo[i]=Cmo[i]/n;
else
Cmo[i]=Cmo[i]*2/n;
}
i=0;
//计算相位
for(i=0;i<n;i++)
{
Cmo_phase[i]=atan2dp(CFFT_Out[2*i+1],CFFT_Out[2*i]);
}
发现相位结果不对
基波相位=5.23
二次谐波=5.75
三次谐波=6.28
四次谐波=0.52
五次谐波=1.04
六次谐波=1.57
好像整体角度偏移了 90度。请指教
作者:
tulipyyf
时间:
2015-1-7 08:57
CFFT_Out[2*i+1] 应该是虚部,CFFT_Out[2*i] 应该是实部 是吧
作者:
tulipyyf
时间:
2015-1-7 09:00
设置成
for(i=0;i<n;i++)
Input[i]=20+
30*cossp(2*PI*1.00*(i/fs)+PI*30/180)+
3*cossp(2*PI*2*1.00*(i/fs)+PI*60/180)+
2*cossp(2*PI*3*1.00*(i/fs)+PI*90/180)+
0.3*cossp(2*PI*4*1.00*(i/fs)+PI*120/180)+
0.2*cossp(2*PI*5*1.00*(i/fs)+PI*150/180)+
0.1*cossp(2*PI*6*1.00*(i/fs)+PI*180/180);
角度就对了。但是数字信号处理书本上均是 sin函数构成的,感觉奇怪
作者:
希望缄默
时间:
2015-1-7 20:12
tulipyyf 发表于 2015-1-7 09:00
设置成
for(i=0;i
[attach]140[/attach]
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4