196|6

376

帖子

1

TA的资源

一粒金砂(中级)

使用网上FFT的计算方式,进入硬件错误中断 [复制链接]

AD采样通过FFT算幅值和角度不对 - 测试/测量 - 电子工程世界-论坛 (eeworld.com.cn)帖子中,算的相位与幅值不对。又从网上找了找例程,用网上的方法重新做了一遍,相位依然不对,而且出现个新问题。

每周波20ms采64个点,定义的输入数组、输出数组、各次谐波数组如下:

   int32_t lBUFIN[64];    //NPT=64
  int32_t lBUFOUT[32];  //输出数组是采样输入的一半
    int16_t lx,ly;                //过度变量
    float X,Y,Mag;           //虚部 实部  谐波临时存储变量

uint32_t lBufMagArray[32];   //最后算出来的谐波值数组 也是32个

for (i = 0; i < 64; i++)
  {
    lBUFIN[i] = (sample[channel].AI0[b0]<<16);      //channel是AD通道序号    
  }

cr4_fft_64_stm32(lBUFOUT,lBUFIN,64);                                                 //总是在这一步进入硬件错误中断,屏蔽此处正常

    for (i = 0;i <= (64 >> 1);i ++) 
    {
       lx  = (lBUFOUT[i] << 16) >> 16;
         ly  = (lBUFOUT[i] >> 16);  
         X = 64 * ((float)lx) / 32768;
         Y = 64 * ((float)ly) / 32768;
        Mag = sqrt(X * X + Y * Y) / 64;
    
           if(i == 0)
            lBufMagArray[i] = (unsigned long)(Mag * 32768);          //0次,即直流分量
        else
            lBufMagArray[i] = (unsigned long)(Mag * 65536);      //1,2,3,4等谐波幅值    其中1次谐波是50hz,是正弦波的基波,认为近似等于输入正弦波幅值


         if(i==1)
             {
                 MYData.Forier[f_type].phase=(atan2(X,Y) * 180.00 / PI);       //在1次谐波50hz下,算相位
             }            
    }

现在问题是:

(1)相位依然在乱变,大致看上去互相差120度,但一直(-118,127),(-109,-248),(113,246)(111,-249),基本就是这种没有规律的乱变

(2)输出数组数量如果定义为int32_t lBUFOUT[32];  一旦运行到cr4_fft_64_stm32(lBUFOUT,lBUFIN,64);     就进入硬件错误中断。将lBUFOUT[32]改为lBUFOUT[64]就没事。但网上我看都是输出数组大小是输入数组的一半。这是哪有问题。

最新回复

倒是参考着网上的来做的。我再检查检查。 [/quote] 奥对再说一点,会不会是小端在前,整反了  详情 回复 发表于 6 天前

回复
举报

99

帖子

0

TA的资源

一粒金砂(中级)

楼主有确认过ADC内码与实际波形是否吻合吗,

可以是先试着自己按照理论正弦函数生成64个点,

再去验证算法。

点评

嗯,我先用excel表格弄2组64点数据,带到程序里试试。关于你说的ADC内码与实际波形,这个没有注意,ADC内码就是采样值,这个实际波形怎么抓到,这个采样就是一个周波一个周波这么采,不是从过0点开始采的,不知道是  详情 回复 发表于 7 天前

回复

4127

帖子

12

TA的资源

版主

位数差错吧
8bit 无符号位 0~255
有符号就127了

回复

4127

帖子

12

TA的资源

版主

采用的数据读取格式时候是不是有问题

点评

倒是参考着网上的来做的。我再检查检查。  详情 回复 发表于 7 天前

回复

376

帖子

1

TA的资源

一粒金砂(中级)

大小家伙好 发表于 2024-6-11 14:34 楼主有确认过ADC内码与实际波形是否吻合吗, 可以是先试着自己按照理论正弦函数生成64个点, 再去验 ...

嗯,我先用excel表格弄2组64点数据,带到程序里试试。关于你说的ADC内码与实际波形,这个没有注意,ADC内码就是采样值,这个实际波形怎么抓到,这个采样就是一个周波一个周波这么采,不是从过0点开始采的,不知道是哪个起始位置。

 

 


回复

376

帖子

1

TA的资源

一粒金砂(中级)

吾妻思萌 发表于 2024-6-12 08:54 采用的数据读取格式时候是不是有问题

倒是参考着网上的来做的。我再检查检查。

点评

奥对再说一点,会不会是小端在前,整反了  详情 回复 发表于 6 天前

回复

4127

帖子

12

TA的资源

版主

吾妻思萌 发表于 2024-6-12 08:54
采用的数据读取格式时候是不是有问题

倒是参考着网上的来做的。我再检查检查。

奥对再说一点,会不会是小端在前,整反了

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

猜你喜欢
随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/10 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表