打印

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

[复制链接]
409|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
你说说说说|  楼主 | 2019-11-22 18:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
fft, AN, TE, ST, ARM
#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 = 0;
                   Temp = 0;
                   memcpy((u8 *)&Temp , &(Harmonictemp.InstantaneousData[i*3]) , 3);
                   if(Temp &0x800000)
                   {
                           Temp = (0xffffff - Temp) + 1;
                           piRetValue = -(float)Temp/8388608;
                   }
                   else piRetValue = (float)Temp/8388608;
           }
}

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

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

355

主题

355

帖子

1

粉丝