找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2554|回复: 7
收起左侧

大佬们求解关于STM32 FFT变换求相位的问题

[复制链接]
ID:926694 发表于 2021-7-22 23:16 | 显示全部楼层 |阅读模式
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);
    }
}


具体求出来的反正切值用不用再进行转换得到相位,还是说我的过程就是错的?
回复

使用道具 举报

ID:955239 发表于 2021-7-23 14:09 | 显示全部楼层
你先确定一下你预想的算法原理和这个程序是否一样。单片机运算可能会对数据进行处理,以此来优化运算速度。
回复

使用道具 举报

ID:844772 发表于 2021-7-23 16:29 | 显示全部楼层
虚部除以实部,再求反正切就是相位了,这跟用DFT还是FFT没关系,你是不是只是弧度制问题啊?
回复

使用道具 举报

ID:926694 发表于 2021-7-23 20:40 | 显示全部楼层
glinfei 发表于 2021-7-23 16:29
虚部除以实部,再求反正切就是相位了,这跟用DFT还是FFT没关系,你是不是只是弧度制问题啊?

我换了不同相位的信号接入,但是得到的值大部分都是0.785和1.57,其余的有些零星的值,比如1.2...但是换算成弧度都跟相位不对等
回复

使用道具 举报

ID:926694 发表于 2021-7-23 20:42 | 显示全部楼层
glinfei 发表于 2021-7-23 16:29
虚部除以实部,再求反正切就是相位了,这跟用DFT还是FFT没关系,你是不是只是弧度制问题啊?

您好,您有没有这方面的例程啊,我这个是只用了官方的DSP库,加上我上面的那个函数,但是求不了多信号合成的频率
回复

使用道具 举报

ID:926694 发表于 2021-7-23 21:00 | 显示全部楼层
ZChaoM 发表于 2021-7-23 14:09
你先确定一下你预想的算法原理和这个程序是否一样。单片机运算可能会对数据进行处理,以此来优化运算速度。

这个求频率求幅值还是挺准的
回复

使用道具 举报

ID:419909 发表于 2021-7-23 22:28 | 显示全部楼层
刚好现在也正在用STM32来用FFT.GetPowerMag()这个程序没问题的. MagBufArray[ i] 就是各个频率幅值.取前面NPT/2的数组显示就行.
如果显示数据有错.那应该就是你ADC采集那里有问题.
另外.顺便说一下我目前遇到的问题.就是FFT的频率混叠问题.比较麻烦.如果有大神有好的解决方案.方便分享一下.除了硬件电路加滤波外.
回复

使用道具 举报

ID:1090030 发表于 2023-7-29 20:42 | 显示全部楼层
我也是这个问题,请问解决了吗?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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