音频FFT入门
关于傅里叶分析的基础知识参考这篇文章: 傅里叶分析之掐死教程(完整版)更新于2014.06.06
频谱
频谱原理: 根据傅立叶分析,任何声音可以分解为数个甚至无限个正弦波,而它们往往又包含有无数多的谐波分量。 它们又往往是时刻在变化着。所以一个声音的构成其实是很复杂的。将声音的频率分量绘制成曲线,就形成了频谱。
当高级组合音响在工作时, 你可以看到其中有一个部件上有一排一、二十个高高低低的推式调纽按频率高低自左而右排列, 显示一种频率分布图或者是还有一、二十个高高低低的光柱在不断地上下跳, 时而中间起一个高峰, 时而并排突起两、三个高峰, 而且与音乐的高低和强度同步, 高音越是强,高峰就偏右边低音越是强, 高峰就偏左边, 这就是均衡器及其联结的频谱显示。
FFT(Fast Fourier Transmit),快速傅里叶变换,可以将时域转化为频域。 FFT是离散傅氏变换(DFT)的快速算法。在数字信号处理中常常需要用到离散傅立叶变换(DFT),以获取信号的频域特征。变换的目的实际上是从频域里来看同一个信号,从而更容易地分析出其信号的特性。
设计思路
音乐频谱器的设计思路如下:首先,我们用ADC去采样一个模拟信号之后,使之变为数字信号。根据采样定理,因音频信号的最高频率约为20kHz,若ADC的采样频率设置为40kHz,即 采样频率大于信号频率的两倍 ,就能基本满足要求。其次,将采样得到的数字信号,送入FFT进行变换处理。通常,若我们取N个采样点, 经过FFT运算之后, 就可以得到N个点的FFT结果。但通常为了方便进行FFT运算,通常N取2的整数次方。设Fs为ADC的采样频率,N为傅立叶变换的点数。则有最小分辨频率f=Fs/N,因此频谱显示的最低频率就是f(Hz),以后每向右移一个点,频率值将增加f。由于 FFT结果的对称性 ,通常只使用前N/2个采样点的结果。
简而言之,使用AD转换器对输入的音频信号进行采样以后,经过FFT变换,然后取某些频率项的幅值,量化显示,驱动LED点阵,点亮相应的LED灯。
编程思路
在主函数中, 单片机 通过AD对音频数据采样 ,然后存放到数据缓存区进行预处理,完成AD滤波处理,自动增益控制信息扫描以及其他信息处理。接着, 将缓存区数据送入FFT处理子函数进行运算 。处理完后,从缓存区取出运算结果, 根据得到的幅值计算出点阵的显示数据 ,并存储到显示缓存区。在中断函数中,根据显示缓冲区的内容对点阵显示屏进行实时刷新点亮。
128点、256点、512点是什么鬼?采样点的个数。
在dsPIC33E系列DSC上的实现
参阅文档后我们可以知道dsPIC33E系列DSC自带FFT功能,可以通过调用DSP库函数的形式执行FFT。我们对dsp.h中的某些段落进行解读。
向量运算接口
矢量是数值的集合,矢量元素,在内存中被分配,第一个元素在内存地址中最小的位置。
使用一个字的内存(两个字节)来存储每个元素的值,这个数量必须被解释为Q.15格式的带小数的值。
推荐台湾同胞的一篇文章:写得很详细—— 演算法筆記 - Audio
参考资料:
1.张孝虎. DIY音乐频谱显示[J]. 电子制作, 2011(11):38-44.
2. 为什么音频信号的采样频率一般取44.1KHZ_百度知道
4.声学基础: 【图文】音频处理技术详解_百度文库