|
发表于 2009-9-2 16:59:06
|
显示全部楼层
以下为个人见解:
想搞FFT,首先要搞清楚DFT.FFT是由DFT演化而来.
对于DFT,举个例子:
利用单片机的ADC隔一定时间采一次样,假设一秒采了8次,并依次放入数组adc[8]中.
先要做一个正弦表和一个余弦表:把360度进行8等分,计算正弦值和余弦值,分别放入sintable[8],costable[8];
假设数据的实部放进sb[8],虚部放进xb[8].由于ADC得到的是实数,那么:
sb[n]=(adc[0]*costable[(0*n)%8])+(adc[1]*costable[(1*n)%8])+...+(adc[7]*costable[(1*n)%8]);
xb[n]=(adc[0]*sintable[(0*n)%8])+(adc[1]*sintable[(1*n)%8])+...+(adc[7]*sintable[(1*n)%8]);
总结一下,sb[n],xb[n],在查表的时候就是每n个位置查一次.
也就是说,把8个点与一个周期(即1HZ)的正\余弦信号相乘,得到sb[1],xb[1].
................与两个周期(即2HZ)的正\余弦信号相乘,得到sb[2],xb[2].
之后,把sb[],xb[]的平方根算出来就得到对应的模值mz[n]=sqrt(sb[n]*sb[n]+xb[n]*xb[n]),这个数组mz[n]好像就叫功率谱,反应了信号中各个频率的功率. |
|