FFT用于信号的频谱分析,本项目基于K60开发板(渡鸦)。
信号采集
在测试初期的信号采集选择了用K60片上ADC以单端模式对1KHz方波进行采集。采用方波的原因:第一,方波的频谱是sa函数,可以清楚的看到谐波。第二,片上ADC的动态范围为0~3.3V,对负电压采集需要进行处理。
##FFT将ADC采集的时域信号变换到频域
ADC采集的信号以数组的形式存放起来,经过FFT算法将时域转换到频谱。在FFT中信号的值只赋给了实部,并令虚部为零,做实信号的快速傅里叶变换。采样点数64,采样频率20k,频率分辨率为10k/32。也就是说FFT后的第一个点表示直流,第二个点表示10k/32Hz,以此类推,第32个点表示10kHz。
频谱绘制
频谱绘制在ILI9320液晶屏上,以画单个像素点的方式画出频谱幅度。具体一些参数要在调试的时候慢慢试。
注意事项和不足的改进
第一,使用过的指针在不继续使用时一定要释放,将资源留出来。
第二,注意main函数中初始化旋转因子指针和定时器初始化的顺序,因为在定时器中断中操作了旋转因子,但此时旋转因子的初始化肯被打断而造成硬中断。
不足的改进:定时器中断中使用ADC对信号进行采集,当采集的信号点数到了做FFT的点数时,直接进行FFT变换,功率计算等。造成在FFT计算的时间内无法实现对信号的采集,针对这种情况,可以通过任务切换,设置优先级来提升采集的实时性,但是具体还跟单片机的处理能力有关,单片机需要处理的任务多,计算量大。单片机的性能越好处理的越快,以避免有些数据采集不到。