|
本帖最后由 飛饵 于 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)
- {
- uchar stage;
- uint L=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[l+i+L],&WN[i*2*P],&WNx); //复数乘法项 i*2*P = i*2*(N/2/L)
-
- seq_array[l+i+L].real = seq_array[l+i].real - WNx.real;//先进行减法运算。
- seq_array[l+i+L].img = seq_array[l+i].img - WNx.img;
- seq_array[l+i].real = seq_array[l+i].real + WNx.real;//然后再进行加法运算
- seq_array[l+i].img = seq_array[l+i].img + WNx.img;
- }
- }
- P = P >> 1;
- }
- }
复制代码
|
|