数字信号处理的步骤与注意事项,并编写1024个采样点的FFT C语言程序1. 数字信号处理1.1 数字信号处理概述数字信号处理是研究如何用数字或符号序列来表示信号以及如何对这些序列进行处理的一门学科。
随着计算机技术的发展,数字信号处理技术得到了越来越广泛的应用,它已成为现代科学技术必不可少的工具。
数字信号是数据序列,其处理实际上就是进行各种数学运算,如加、减、乘以及各种逻辑运算等等。
因此,数字信号处理既可以是软件处理也可以是硬件处理。
所谓软件处理,就是对所需要的运算编制程序,然后在计算机上实现,其处理灵活、方便。
所谓硬件处理,就是用加法器、乘法器、延时器以及它们的各种组合来构成数字电路,以实现所需要的运算。
硬件处理显然不如软件处理灵活方便,但能对数字信号进行实时处理。
近年来日益广泛采用的各种数字信号处理器(如TI TMS320系列、Philps Trimedia系列等)可以认为是软硬件处理方式的结合,这种处理时用数字信号处理芯片以及存储器来组成硬件电路,所需要的运算靠特定的汇编语言编程来实现。
因此,采用数字信号处理器既方便灵活,又能做到实时处理,所以数字信号处理器(DSP)已经越来越广泛地应用于包括通信在内的各个领域之中。
1.2 数字信号处理的优点(1)精度高数字系统的特性不因环境的变化而变化,计算精度是模拟系统所无法相比的,运算位数由8位提高到16位、32位、64位。
(2)可靠性高模拟系统中各种参数受温度、环境影响较大,因而易出现感应、杂散效应,甚至会出现震荡等等;而数字系统受温度、环境影响较小。
模拟信号受到干扰即产生失真,而数字信号由于只有两种状态,因此,所受的干扰只要在一定范围以内,就不会产生影响,这就是说,数字信号抗干扰能力强。
另外,如果用数字信号进行传输,在中继站还可以再生。
总的说来,信号的数字处理可靠性高。
(3)灵活性强可以通过改变数字信号系统的参数来改变系统的性能。
数字信号的灵活性还表现在可以利用一套计算设备同时处理多路相互独立的信号,即所谓的“时分复用”,这在数字电话系统中是非常有用的技术。
(4)便于大规模集成化数字部件具有高度的规范性,易于实现大规模集成化和大规模生产,数字系统体积小、重量轻。
(5)数字信号便于加密处理由于数字信号实际上为数据序列,因此便于加密运算处理。
(6)对于低频信号尤其优越处理低频信号的模拟元件如电感、电容等一般都体积较大、制作不易、适用不便。
如果转换成数字信号来进行处理,由于频率低,对数字部件的速度要求不高,因而容易实现。
数学处理当然也有不足之处。
目前,数字系统的速度还不能达到处理很高频率信号(例如射频信号)的要求。
但随着大规模集成电路、高速数字计算机的发展尤其是微处理器的发展,数字系统的速度将会越来越高,数字信号处理也会越来越显示出其优越性。
1.3 数字信号处理的步骤数字信号处理系统的框图,如图1所示:图1 数字信号处理系统框图由图1可知,数字信号处理主要有预处理、采样与A/D转换和计算机处理三大步骤。
(1)预处理预处理包括:a.隔离信号中的直流分量(如果所测信号中不应有直流分量)。
b.若信号经过调制,则应先行解调。
c.电压幅值调理,以便适宜于采样。
总是希望电压幅值峰—峰值足够大,以便充分利用A/D转换器的精度。
如12位的A/D转换器,其参考电压为±5V,若信号电平较低,转换后二进制数的高位都为0,仅在低位有值,其转换后的信噪比将很差,若信号电平绝对值超过5V,则转换中又将发生溢出,这是不允许的。
所以进入A/D的信号电平应适当调整。
(2)采样与A/D转换必要的滤波比提高信噪比,并滤去信号中的高频噪声。
采样与A/D转换包括采样、保持和量化。
(3)数字信号处理数字信号处理包括截断、加权、数字滤波和计算机信号分析四部分。
计算机只能处理有限长度的数据,所以首先要把长时间的序列截断,对截取的数字序列有时还要人为地进行加权(乘以窗函数)以成为新的有限长的序列。
对数据中的奇异点(由于强干扰或信号丢失所引起的数据突变)应予以剔除。
对温漂、时漂等系统性干扰所引起的趋势项(周期大于记录长度的频率成分)也应予以分离。
如有必要,还可以设计专门的程序来进行数字滤波。
然后把数据按给定的程序运行运算,完成各种分析。
1.4 数字信号处理的注意事项(1)采样间隔采样间隔的选择是一个重要的问题。
采样间隔太小(采样频率高),则对定长的时间记录来说其数字序列就很长,计算工作量迅速增大;如果数字序列长度较短,则只能处理较短的时间历程,可能产生较大的误差。
若采样间隔过大(采样频率低),则可能丢掉有用的信息,同时采样间隔过大还会引起混叠现象。
因此采样频率通常选为(3~4)f(h f为信号的最高频率)。
h(2)截断、泄露和窗函数截断就是讲信号乘以时域的有限宽矩形窗函数,由于窗函数是一个无限宽带的sinc函数,所以信号在截断后也必然成为无限宽带的信号,这种信号的能量在频率轴分布扩展的现象成为泄露,故信号截断必然导致误差。
为了减小截断的影响,常采用其他的时窗函数来对所截取的时域信号进行加权处理。
所选的窗函数应力求其频谱的主瓣宽度窄些、旁瓣幅度小些。
2.快速傅里叶变换(FFT)2.1 叶变换简介快速傅里有限长序列可以通过离散傅里叶变换(DFT)将其频域也离散化成有限长序列.但其计算量太大,很难实时地处理问题,因此引出了快速傅里叶变换(FFT). 1965 年,Cooley 和Tukey 提出了计算离散傅里叶变换(DFT)的快速算法,将DFT 的运算量减少了几个数量级。
从此,对快速傅里叶变换( FFT)算法的研究便不断深入,数字信号处理这门新兴学科也随FFT 的出现和发展而迅速发展。
根据对序列分解与选取方法的不同而产生了FFT 的多种算法,基本算法是基-2DIT 和基-2DIF。
FFT 在离散傅里叶反变换、线性卷积和线性相关等方面也有重要应用。
快速傅氏变换(FFT),是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。
快速傅立叶变换作为一种数学方法,已经广泛地应用在几乎所有领域的频谱分析中,而且经久不衰,因为信号处理方法没有先进和落后之分,只有经典和现代之别,在实际系统中用得最好的方法就是管用的方法。
换句话说,信号处理方法与应用背景和目的的贴近程度是衡量信号处理方法优劣的唯一标准。
FFT 是快速傅利叶变换(Fast FourierTransform 简称FFT)的英文缩写,它在当今科技世界中的应用相当活跃,无论是在时间序列分析领域中,还是在我国刚刚兴起的生物频谱治疗的研究与应用中,都有着重要的作用。
同时,它又是软件实现数字滤波器的必备组成部分之一。
FFT 算法的基本思想:利用DFT 系数的特性,合并DFT 运算中的某些项,把长序列的DFT —>短序列的DFT ,从而减少其运算量。
FFT 算法分类: 时间抽选法DIT: Decimation-In-Time ; 频率抽选法DIF: Decimation-In-Frequency 。
在此以按时间抽选的基-2FFT 算法为例进行说明。
2.2 算法原理N 为2 的整数幂的FFT 算法称基-2FFT 算法。
设N 点序列()x n ,n =0,1,2,…N-1 按n 的奇偶分成两个长为N/2的序列12()(2)()(21)x r x r x r x r ==+ r =0,1,2,…,2N -1由于2/2N N W W =则()x n 的DFT :111()()()()N N N nk nk nk NNNn n n X k x n Wx n Wx n W---=====+∑∑∑n 为偶数 n 为奇数=11222(21)00(2)(21)N N rk r k N Nr r x r W x r W--+==++∑∑=11221/22/20()()N N rk k rk N N N r r x r W W x r W --==+∑∑=12()()kN X k W X k + k =0,1,2,…,N-1 (1)其中:1()X k =12/20(2)N rk N r x r W -=∑=121/20()N rk N r x r W -=∑ (2)2()X k =12/20(21)N rk N r x r W -=+∑=122/20()N rk N r x r W -=∑ (3)按式(1)计算得到的只是()X k 的前一半项数的结果,即(0≤k ≤2N —1)。
由系数的周期性可推出()X k 的后一半值,即(2N ≤k ≤N —1):.(/2)/2/2r k N r k N NW W += (/2)/2k N k N k N N NNW W W W +=⋅=- (/2N N W =—1)又因为1()X k ,2()X k 是以2N 为周期的,可推出: 1122(/2)11/21/210(/2)()()()N N r k N rk N N r r X k N x r Wx r WX k --+==+===∑∑ (4)同理可得,2(/2)X k N +=2()X k (5) 由此可得N 点对应的DFT ()X k 的计算式子:1212()()()(/2)()()kN k NX k X k W X k X k N X k W X k =++=- k =0,1,2,…,2N -1 (6)上一式计算()X k 的前一半值,下一式计算()X k 的后一半值。
因此只要求出0~2N —1区间内各个整数k 值所对应的1()X k 和2()X k ,便可求出0到N-1点全部的()X k 值。
明显节约了运算量。
式中因子k N W 在复数乘法中起一个旋转的作用,称为旋转因子。
公式(6)的运算可以归结为两个复数a 、b 求得复数k N a bW +和k N a bW -。
用信号流程图的方法可以简单的表示为如图2所示。
这样的运算称为蝶形运算,在FFT 算法中占有核心的地位。
图2 时间抽选蝶形运算流图显然,每个蝶形运算对应于一次复数乘法和两次复数加法运算。
如果用DFT 方法直接计算出1()Xk 和2()Xk ,共需22N 次复数乘法运算,再作N/2次蝶形运算,又需N/2次复数乘法和N 次复数加法。
这样算出N 点DFT 共需要(2N +N )/2次复数乘法和(2N /2)+N 次复数加法。
当N 较大时,同直接计算N 点DFT 所需的2N 次复数乘加次数相比,几乎减少了一半的计算量。
假设N/2还是偶数,则1()Xk 和2()X k 这两个N/2点的DTF 计算,又分别可以通过计算N/4点DFT 和蝶形运算而得到。