基于的快速傅里叶变换的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、概述
FFT(Fast Fourier Transformation),即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。DFT对于X(K)的每个K值,需要进行4N次实数相乘和(4N-2)次相加,对于N个k值,共需N*N乘和N(4N-2)次实数相加。改进DFT算法,减小它的运算量,利用DFT中的周期性和对称性,使整个DFT的计算变成一系列迭代运算,可大幅度提高运算过程和运算量,这就是FFT的基本思想。虽然它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。
虽然FFT大幅度地降低了常规傅立叶变换的运算量,但对于一般的单片机而言,处理FFT运算还是力不从心。主要原冈是FFT计算过程中的蝶形运算是复数运算,要分开实部和虚部分别计算。在这里利用LabVIEW来实现快速傅立叶变化。LabVIEW是一种程序开发环境,类似于BASIC开发环境;但LabVIEW与其它计算机语言相比,有一个特别重要的不同点:其它计算机语言都是采用基于文本的语言产生代码行;而LabVIEW使用图形化编程语言G编写程序,产生.的程序是框图的形式。像C或BASIC一样,LabVIEW也是通用的编程系统,有一个可完成任何编程任务的庞大的函数库。LabVIEW的函数库包括数据采集、GPIB、串口控制、数据分析、数据显示及数据存储等。LabVIEW也有传统的程序调试工具,如设置断点、以动画方式显示数据及其通过程序(子V1)的结果、单步执行等,便于程序的调试。
二、方案论证
1:单一频率正弦信号的FFT
采用Labview的信号产生模板提供的常用的信号发生器,从中找到正弦信号发生器,使其产生一个正弦信号。将此正弦信号输入到实数中的X端进行快速傅里叶变换处理,使时域信号转换为频域信号。然后经过复数至极坐标转换后将其显示出来。其结构如图1所示。
图1 单一频率正弦信号的FFT结构图
2:叠加了高频噪声的正弦信号的FFT
在Labview的信号产生模板提供的常用的信号发生器中找到均匀白噪声发生器,使其产生一个均匀白噪声,再将均匀白噪声输入到一个巴特沃斯高通滤波器,使其产生一个高频噪声,将此高频噪声与一正弦信号合并从而产生一个混合信号。再将混合信号输入到一个低通滤波器进行低通滤波,滤掉高频噪声。将滤波后的信号输入到实数中的X端进行快速傅里叶变换处理,使时域信号转换为频域信号。然后经过复数至极坐标转换后将其显示出来。其结构如图2所示。
图2 混合信号的FFT结构图
三、FFT的实现
1.Labview平台
LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种用图标代替文本行创建应用程序的图形化编程语言。Labview程序又称为虚拟仪器(Virtual Instrument,简称VI)。LabVIEW是一种程序开发环境,类似于C和BASIC开发环境,但LabVIEW与其它计算机语言的显着区别是:其它计算机语言都是采用基于文本的语言产生代码行,而LabVIEW使用图形化编程语言G语言编写程序,产生的程序是框图的形式。像C或BASIC一样, LabVIEW也是通用的编程系统,有一个可完成任何编程任务的庞大的函数库。 LabVIEW的函数库包括数据采集、GPIB、串口控制、数据分析、数据显示及数据存储等等。 LabVIEW也有传统的程序调试工具,如设置断点、以动画形式显示数据及其通过程序(子VI)的结果、单步执行等等,便于程序的调试。
虚拟仪器,简称VI,包括三部分:前面板、框图程序和图标/连接器。程序前面板,用于设置输入量和观察输出量。它模拟真实仪器的前面板。其中,输入量被称为Controls(控件),用户可以通过控件向VI中设置输入参数等;输出量被称为Indicators(指示器),VI通过指示器向用户提示状态或输出数据等。用户还可以使用各种图标,如旋钮、开关、按钮、
图表及图形等,使前面板易看易懂。每一个程序前面板都有相应的框图程序与之对应。框图程序,用图形编程语言编写,可以把它理解成传统程序的源代码。框图中的部件可以看成程序节点,如循环控制、事件控制和算术功能等。这些部件都用连线连接,以定义框图内的数据流动方向。图标/接口器件可以让用户把VI程序变成一个对象(VI子程序),然后在其他程序中像子程序一样地调用它。图标表示在其他程序中被调用的子程序,而接线端口则表示图标的输入/输出口,就像子程序的参数端口对应着VI程序前面板控件和指示器的数值。
虚拟仪器和传统仪器的差异很大,具有很强的优势。独立的传统仪器,例如示波器和波形发生器,性能强大,但是价格昂贵,且被厂家限定了功能,只能完成一件或几件具体的工作,因此,用户通常都不能够对其加以扩展或自定义其功能。仪器的旋钮和开关、内置电路及用户所能使用的功能对这台仪器来说都是固定的。另外,开发这些仪器还必须要用专门的技术和高成本的元部件,从而使它们身价颇高且很不容易更新。基于PC机的虚拟仪器系统,诞生以来就充分利用了现成即用的PC机所带来的最新科技。这些科技和性能上的优势迅速缩短了独立的传统仪器和PC机之间的距离,包括功能强大的处理器(如Pentium4)、操作系统及微软Windows XP、NET 技术和Apple Mac OSx。除了融合诸多功能强大的特性,这些平台还为用户提供了简单的联网工具。此外,传统仪器往往不便随身携带,而虚拟仪器可以在笔记本电脑上运行,充分体现了其便携特性。需要经常变换应用项目和系统要求的工程师和科学家们需要有非常灵活的开发平台以便创建适合自己的解决方案。可以使用虚拟仪器以满足特定的需要,因为有安装在PC机上的应用软件和一系列可选的插入式硬件,无需更换整套设备,即能完成新系统的开发。
2.正弦信号的产生
在模拟电路范围,信号频率以Hz或周期(Cycle)来测量,但在数字系统中使用数字频率,它是模拟频率与采样频率之比,即
数字频率=模拟频率/采样频率,其单位为周期数/采样数。
要产生一个正弦信号需要一个Sub VI: Sine Pattern .vi(在信号处理->信号生成子模板)。Sine Pattern .vi有4个输入我们只用采样和周期输入,如图3示。Sine 生成的是正弦信号的数组。数组的长度(1个完整周期)只与采样参数有关,是固定长度的。换句话说,我们可以任意确定正弦信号的一个完整周期内取多少个采样点。对于上面的默认参数是是一个完整正弦信号周期内取128