野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12647|回复: 1

FFT采样数据修正部分的问题

[复制链接]
发表于 2015-9-24 15:18:42 | 显示全部楼层 |阅读模式
#define NUM_FFT 128 // Length of FFT to process
#define PI 3.1415926
typedef        unsigned char        u8;
typedef        unsigned short        u16;
typedef        unsigned int        u32;

typedef struct
{
//        s16 iRealArray[NUM_FFT];
//        s16 iMageArray[NUM_FFT];
        float iRealArray[NUM_FFT];
        float iMageArray[NUM_FFT];
        u16        FU[3];        //---基波电压---NNN.N6
        u32        FI[4];        //---基波电流NNNN.NNNN
        u32        HarmonicpercentU[51];
        u32        HarmonicpercentI[51];        //---谐波含有率--NNN.N6
}sDl645FftHarmonicData_TypeDef;

typedef struct
{
    u8  Channel;                                         // 当前采样通道
    u16  ReadAdress;                                 // 读取地址
    u8  StarFlag;                                         // 开始进行谐波数据分析
    u8  ADSPIBusy;                                         // 进行谐波分析瞬时值数据采样
    u16 DataCount;                                         // 当前采样点数
    u16 ReadAddres;                                          // 采样点数据地址
    u16        dwFreq;                                                  // 采样周期当前频率
    u16 TimeOutStamp;                                 // 采样延时退出
    u8 InstantaneousData[384];      //当前采样128点瞬时数据
}sADE_Instantaneous_TypeDef;                //ADE 自动数据输入
sADE_Instantaneous_TypeDef Harmonictemp;
sDl645FftHarmonicData_TypeDef        HarmonicData;

void SampleDataModifyF(float *piRetValue)                //采样数据修正
{
        u8 i;
        u32        Temp;
           for(i=0; i<NUM_FFT; i++)
           {
                   piRetValue[i] = 0;
                   Temp = 0;
                   memcpy((u8 *)&Temp , &(Harmonictemp.InstantaneousData[i*3]) , 3);
                   if(Temp &0x800000)
                   {
                           Temp = (0xffffff - Temp) + 1;
                           piRetValue[i] = -(float)Temp/8388608;
                   }
                   else piRetValue[i] = (float)Temp/8388608;
           }
}

这里的Harmonictemp.InstantaneousData是结构体数组,怎么给他赋值?用另一个数组循环给它赋值??不能直接赋值吗?
还有memcpy((u8 *)&Temp , &(Harmonictemp.InstantaneousData[i*3]) , 3);  这里 i 为什么乘3,数组为什么要 384,我只要 128 就可以了啊??
这里的u8,u16,u32  有定义错吗?   
不好意思,新人好多不懂


回复

使用道具 举报

发表于 2015-9-25 08:39:21 | 显示全部楼层
不懂,见到算法就头疼
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 04:18 , Processed in 0.027029 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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