飛饵 发表于 2018-7-18 02:11:37

【FFT】提问,关于变换点数和采样频率以及AD采样时间的问题

本帖最后由 飛饵 于 2018-7-22 15:40 编辑

这三个东西关系搞得有点懵。
假如有个信号最高频率是400hz,用1000hz的采样频率采集,然后做512点变换。
FFT的输入数据的数量必须和点数相同吧,那就要512个AD数据。
那是先1s内采完1000个数据,然后取其中的512个来变换。还是说以0.001s的时间间隔采样512次就能进行变换了?


-------------------------------------------------
2018.7.22更新
自己写了个基2FFT。在f103上跑1024点,用48ms左右,这效率怎样??还有,旋转因子表和倒序标号表都在ram里生成,如果这些都放在flash里速度会不会减慢一些??void fft(complex *seq_array,unsigned char M,float *WN)
{
        ucharstage;
        uintL=1;
        uint l;
        uint i;
        uint P=N/2;
        complex WNx;/
       
        for(stage=0;stage<M;stage++)//一共有M级蝶形运算,M=log2(N),所以循环M次
        {
                L = 1 << stage;
                for(l=0;l<N;l=l+2*L)//每级有 N/(2^m) 组蝶形
                {                               
                        for(i=0;i<L;i++)//每组蝶形有 2^(m-1) 个蝶形运算
                        {
                                /* 蝶形运算 */
                                WN_mul(seq_array,&WN,&WNx); //复数乘法项 i*2*P = i*2*(N/2/L)
                               
                                seq_array.real = seq_array.real - WNx.real;//先进行减法运算。
                                seq_array.img = seq_array.img - WNx.img;

                                seq_array.real = seq_array.real + WNx.real;//然后再进行加法运算
                                seq_array.img = seq_array.img + WNx.img;
                        }       
                }
                P = P >> 1;
        }
}

eric2013 发表于 2018-7-18 10:16:46

数据要是此采样率下连续的数据即可。

飛饵 发表于 2018-7-19 11:35:02

eric2013 发表于 2018-7-18 10:16
数据要是此采样率下连续的数据即可。
如果以0.001s间隔采够512次,那不是0.5s左右才能变换一次?不影响实时性了吗

eric2013 发表于 2018-7-19 14:05:39

飛饵 发表于 2018-7-19 11:35
如果以0.001s间隔采够512次,那不是0.5s左右才能变换一次?不影响实时性了吗

这就看你的需求了。

飛饵 发表于 2018-7-22 15:55:10

eric2013 发表于 2018-7-19 14:05
这就看你的需求了。

自己写了个基2FFT,看看运行效率怎样?

eric2013 发表于 2018-7-23 01:12:35

飛饵 发表于 2018-7-22 15:55
自己写了个基2FFT,看看运行效率怎样?
意思是你根据实际项目需求去实现即可。具体情况具体分析。
页: [1]
查看完整版本: 【FFT】提问,关于变换点数和采样频率以及AD采样时间的问题