标题: 大佬们求解关于STM32 FFT变换求相位的问题 [打印本页]

作者: Spoiled.    时间: 2021-7-22 23:16
标题: 大佬们求解关于STM32 FFT变换求相位的问题
STM32,使用了FFT变换,我看到网上说输出的数组,求虚部比实部的反正切就是信号的相位,但是得到的明显不是啊

void GetPowerMag()
{        
    signed short lX,lY;
    float X,Y,Mag;
    unsigned short i;
    for(i=0; i<NPT/2; i++)
    {
        lX  = (OutBufArray[ i] << 16) >> 16;        //虚部
        lY  = (OutBufArray[ i] >> 16);                //实部
        chucun[ i] = InBufArray[ i];
        imag[ i] = lX;
        real[ i] = lY;
               
        //除以32768再乘65536是为了符合浮点数计算规律
        X = NPT * ((float)lX) / 32768;
        Y = NPT * ((float)lY) / 32768;
        Mag = sqrt(X * X + Y * Y) / NPT;
        if(i == 0)
            MagBufArray[ i] = (unsigned long)(Mag * 32768);
        else
            MagBufArray[ i] = (unsigned long)(Mag * 65536);
    }
}


具体求出来的反正切值用不用再进行转换得到相位,还是说我的过程就是错的?
作者: ZChaoM    时间: 2021-7-23 14:09
你先确定一下你预想的算法原理和这个程序是否一样。单片机运算可能会对数据进行处理,以此来优化运算速度。
作者: glinfei    时间: 2021-7-23 16:29
虚部除以实部,再求反正切就是相位了,这跟用DFT还是FFT没关系,你是不是只是弧度制问题啊?
作者: Spoiled.    时间: 2021-7-23 20:40
glinfei 发表于 2021-7-23 16:29
虚部除以实部,再求反正切就是相位了,这跟用DFT还是FFT没关系,你是不是只是弧度制问题啊?

我换了不同相位的信号接入,但是得到的值大部分都是0.785和1.57,其余的有些零星的值,比如1.2...但是换算成弧度都跟相位不对等
作者: Spoiled.    时间: 2021-7-23 20:42
glinfei 发表于 2021-7-23 16:29
虚部除以实部,再求反正切就是相位了,这跟用DFT还是FFT没关系,你是不是只是弧度制问题啊?

您好,您有没有这方面的例程啊,我这个是只用了官方的DSP库,加上我上面的那个函数,但是求不了多信号合成的频率
作者: Spoiled.    时间: 2021-7-23 21:00
ZChaoM 发表于 2021-7-23 14:09
你先确定一下你预想的算法原理和这个程序是否一样。单片机运算可能会对数据进行处理,以此来优化运算速度。

这个求频率求幅值还是挺准的
作者: wfqxgw    时间: 2021-7-23 22:28
刚好现在也正在用STM32来用FFT.GetPowerMag()这个程序没问题的. MagBufArray[ i] 就是各个频率幅值.取前面NPT/2的数组显示就行.
如果显示数据有错.那应该就是你ADC采集那里有问题.
另外.顺便说一下我目前遇到的问题.就是FFT的频率混叠问题.比较麻烦.如果有大神有好的解决方案.方便分享一下.除了硬件电路加滤波外.
作者: 快乐牌小刀片    时间: 2023-7-29 20:42
我也是这个问题,请问解决了吗?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1