870920 Menu

Cool Edit Pro操作详解·41

6.8 什么是FFT

Cool Edit Pro和其它音频处理类软件中,不少效果器都采用了FFT算法来进行计算与处理,这类效果器往往称为“FFT XX效果器”,比如,FFT降噪器,FFT滤波器、FFT均衡器,等等。那么,究竟什么是FFT呢?

FFT是英文Fast Fourier Transform的首字母简写,中文翻译为“快速傅里叶变换”,是计算离散傅里叶变换的一种快速算法。快速傅里叶变换于1965年由J.W.库利和T.W.图基提出。采用这种算法能使计算机处理离散傅里叶变换时所需的乘法次数大为减少,被变换的抽样点(采样点)数量越多,FFT节省的计算时间就越显著。

6.8.1 三角函数

谈傅里叶变换,不能不说三角函数。三角函数起源于18世纪,主要是与简谐振动的研究有关。当时的科学家傅里叶对三角函数作了深入研究,并解决了很多热传导方面的问题。该三角函数的展开式为:

f(t) = (1/2a0) + (a1•cos(x)+b1•sin(x)) + (a2•cos(2x)+b2•sin(2x)) + …

其中,系数a和b表示不同频率阶数下的幅度。

成立条件:
•周期性条件,也就是说f(x)描述的波形必须每隔一段时间(周期T)就会重复出现;
•Dirichlet条件,周期T内,有限的最大最小值,有限的不连续点;
•任何区间内绝对可积;

研究目的:把一个基于时间变量t的函数展开成傅里叶级数的目的是分解为不同的频率分量,以便进行各种滤波算法。这些基本的组成部分由正弦函数Sin()和余弦函数Cos()共同构成。

应用领域:
•信号分析,包括滤波、数据压缩、电力系统的监控等;
•研究偏微分方程,比如求解热力学方程时,把f(t)展开为三角级数最为关键。
•概率与统计,量子力学等学科。

6.8.2 傅里叶变换

H(w) = ∫h(t)•e^jwt•dt, (区间:-∽~+∽,w = 2πf)

这里之所以选择复指数的形式而没有用正余弦来表示,是因为欧拉公式的引入使得这条经典的数学公式变得更简单,即:e^jx = cos(x) + jsin(x)

6.8.3 快速傅里叶变换

常规的傅里叶变换算法并不适用于嵌入式控制系统,原因是运算量太大(涉及到复数运算)。比如离散的傅里叶变换等同于用序列Y(n×1列矢量)乘以n×n 矩阵Fn,需要n×n次乘法。若n=1024,则是1048576次乘法运算。

这是一个什么概念呢?如果选用的CPU单周期指令为25ns, 单周期也可以完成一次乘法运算,那么要计算1024点的傅里叶变换则需要262144毫秒(4.4分钟)!这还不包括加法或其它运算,对于大多数实时系统,这个处理时间实在太长。于是寻找一个快速的傅里叶变换算法是人们所期望的。正是在这种背景下,FFT算法应运而生了。

虽然FFT大幅度地降低了常规傅里叶变换的运算量,但对于一般的单片机而言,处理FFT运算还是力不从心。主要原因是FFT计算过程中的蝶形运算是复数运算,要按实部和虚部分别计算,非常繁琐。所以我们衡量一个处理器有没有足够的能力来运行FFT算法,根据以上介绍可以得出以下两点:

1、处理器在一个指令周期内要能完成乘和累加的工作,因为复数运算要多次查表相乘才能实现。另外就是间接寻址,可以实现增/减1个变址量,方便各种查表方法。

2、FFT要对原始序列进行反序排列,处理器要有反序间接寻址的能力。

在数字信号的分析处理等实际应用中,DSP比其它的处理器有绝对的优势,因为DSP完全具备以上条件。这也是单片机(51系列,AVR,PIC等等)或ARM处理器很少用来进行数字信号分析的原因。

专业音频领域,牵扯到此类运算的效果处理,无论软件程序,还是硬件芯片,基本全部采用了FFT快速傅里叶变换的算法。该算法运用的非常广泛,某些专业音频卡,甚至自带了DSP数字处理芯片,这样可以大大节省计算机的资源,加快处理速度。

6.9 什么是FIR和IIR

与FFT算法的使用目的基本一致,Cool Edit Pro的很多效果器采用了FIR与IIR滤波算法,最典型的就是科学滤波器和几乎所有牵扯到滤波处理的效果器。那么,什么是FIR和IIR?各有什么特点?

FIR和IIR 滤波器是数字信号处理(DSP)领域里经常使用的两种基本滤波器。FIR:有限脉冲响应(Finite Impulse Response)。IIR:无限脉冲响应(Infinite Impulse Response)。其中,FIR滤波器的应用更加广泛,相对于IIR滤波器,FIR有以下特点:

•可以很容易地设计线性相位的输入延时信号,却并不扭曲其相位。

•算法简单.。大多数DSP处理器只需对一个指令进行循环即可完成FIR计算。
•适合于多采样率转换,包括析取(降低采样率)、插值(增加采样率)等操作,可以省略一些不必要的运算,从而大幅度提高效率。相反,如果使用IIR滤波器,每个输出都要逐一计算(包括输出时要丢弃的信号),无法省略,导致处理时间长,效率较低。

• 具有理想的数字特性。在实际应用中,所有的DSP滤波器都必需使用有限的采样精度(bit)来实现,而在IIR滤波器中使用有限精度会出现很多无法预知的问题。

•可以用小于1.0的系数来实现计算处理,IIR滤波器则不行。当使用定点DSP处理的时候,这也是一个需要重点考虑的因素。

和FIR有关的参数与概念主要有:
•脉冲响应(FIR的系数)
•乘累加(MAC)
•转换频段(Transition Band,带通和带阻的交界频段)
•延时线(一组存储器单元,实现在FIR计算中的Z^-1延时)
•环形缓存(一个首尾相连的特殊缓存,通常由DSP处理器来实现)

大多数FIR属于线性相位滤波器(滤波器的相位响应是频率的+/-180度线性函数),滤波器延时处理后,所有频率的相位均不变,不会产生相位的延迟扭曲现象。这是FIR滤波器相对于IIR和其它各种类型的模拟滤波器更有优势的一个重要特性。

FIR滤波器的频率响应公式为:
H(jw)=h(0)e-j0w + h(1)e-j1w + h(2)e-j2w + … h(N-1)e-j(N-1)w

使用欧拉公式,e-ja=cos(a) – jsin(a),则可以这样表示:
H(jw)=h(0)[cos(0w) – jsin(0w)] + h(1)[cos(1w) – jsin(1w)] + … h(N-1)[cos((N-1)w) – jsin((N-1)w)]

H(z)中的变量z为连续的复数变量,可以描述为 z=r•ejw,这里r是幅度,w是z的角度。如果令r=1,H(z)就变成了滤波器频率响应H(jw)。这也就意味着替代z为ejw,得到了滤波器的频率响应H(w)。

下面再来看一下IIR滤波器的重要特点:

1.IIR滤波算法(IIR数字滤波器)采用递归型结构,即结构上带有反馈环路。IIR滤波器运算结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联型四种结构形式,都具有反馈回路。由于运算中的舍入处理,使误差不断累积,有时会产生微弱的寄生振荡。

2. IIR数字滤波器的系统函数可以写成封闭函数的形式。

3.IIR数字滤波器在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图表可查,其设计工作量比较小,对计算工具的要求不高。在设计一个IIR数字滤波器时,我们根据指标先写出模拟滤波器的公式,然后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。

4.IIR数字滤波器的相位特性不好控制,对相位要求较高时,需加相位校准网络。

在MATLAB下设计IIR滤波器可使用Butterworth函数设计出巴特沃斯滤波器,使用Cheby1函数设计出契比雪夫I型滤波器,使用Cheby2设计出契比雪夫II型滤波器,使用Ellipord函数设计出椭圆滤波器。

与FIR滤波器的设计不同,IIR滤波器设计时的阶数不是由设计者指定,而是根据设计者输入的各个滤波器参数(截止频率、带通滤纹、带阻衰减等),由软件设计出满足这些参数的最低滤波器阶数。IIR单位响应为无限脉冲序列,而FIR单位响应为有限的。IIR幅频特性精度很高,但不是线性相位的,可以将其应用于对相位信息不敏感的信号。

相比之下,FIR虽然幅频特性精度较低,但是线性相位,不同频率的信号经过FIR滤波器后,其时间差不变,有限的单位响应也有利于对数字信号的处理,便于编程,用于计算的延时也小。这些特点对于实时信号处理来说很重要,也是必需要考虑的因素之一。