基于LABVIEW的多功能滤波器设计.docx
- 文档编号:5966927
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:16
- 大小:321.51KB
基于LABVIEW的多功能滤波器设计.docx
《基于LABVIEW的多功能滤波器设计.docx》由会员分享,可在线阅读,更多相关《基于LABVIEW的多功能滤波器设计.docx(16页珍藏版)》请在冰豆网上搜索。
基于LABVIEW的多功能滤波器设计
目录
摘要1
绪论2
滤波器的总体设计方案2
滤波器的各个模块的设计3
信号发生模块3
滤波去噪模块5
频域分析模块12
多功能滤波器的仿真17
参考文献22
心得体会22
摘要
目前,在电子测量和自动化控制领域,虚拟仪器技术取得了巨大的发展。
虚拟仪器是一种功能意义上的测量和控制仪器,是具有仪器功能的软件、硬件的组合,从而实现各种传统仪器的功能。
本文叙述了虚拟仪器开发平台LabVIEW的特点,并给出了软件设计方案。
开发了基于LabVIEW的多功能滤波器,重点讲述了各个功能模块的软件设计,并利用该滤波器对模拟信号进行了滤波和频谱分析,结果较为满意。
在开发虚拟仪器的同时,掌握了LabVIEW编程语言,对虚拟仪器的构成、实现手段和开发方法有了一定的认识。
该系统操作简单,界面友好,功能多,并有很好的滤波、分析精度等优点。
关键字:
虚拟仪器;LabVIEW;滤波器;频率
1绪论
LabVIEW是一种基于“图形”方式的集成化程序开发环境,是目前国际上唯一的编译型图形化编程语言,LabVIEW开发环境具有一系列优点,从流程图式的编程,不需要预先编译就存在语法检测和调试过程使用的数据指针,到其丰富的函数、数值、信号处理和设备驱动等功能,应用LabVIEW进行滤波器设计,效率高,操作简单,并能对误差精度进行实时调整,把传统仪器利用LabVIEW用软件的方法来实现,开发周期短,易于维护和升级,可以设计出传统仪器所不能比拟的虚拟仪器,“软件就是仪器”——这就是虚拟仪器技术的精髓。
虚拟仪器已经为越来越多的人所使用和接受,因为虚拟仪器系统更快速简捷和方便,也可以节省硬件资源。
通过虚拟滤波器设计,可对虚拟仪器有更深的理解和领悟,也为以后进行更进一步的研究提供了基础。
我的设计题目是基于LabVIEW的多功能滤波器设计。
我们平时所要设计的数字滤波器,阶数和类型并不一定是完全给定的,很多时候都是要根据设计要求和滤波效果不断的调整,以达到设计的最优化。
在这种情况下,滤波器的设计就要进行大量复杂的运算,单纯的靠公式计算很难在短时间内完成设计。
这次利用LabVIEW设计的滤波器则不需要再靠公式计算,只要通过在前面板通过下拉菜单进行调解就可以设计出最优化的滤波器了。
了解LabVIEW编程所需的基础知识,学习LabVIEW的基本使用方法,复习数字信号处理的所学知识,运用LabVIEW设计一个虚拟的数字滤波器,使其能产生基本的带有噪声的模拟信号,或是能通过数据采集卡采集信号输入到微机里,并能使用户通过在前面板调节按钮,变换参数产生想要的滤波器,来对所产生的信号或从外界输入的信号进行滤波,并能对信号进行频域分析。
然后通过显示面板来显示滤波前后的信号及频域分析的信号。
滤波器的总体设计方案
我设计的题目是基于LabVIEW的多功能滤波器设计。
如图9为总体设计方案的示意图。
图9总体设计示意图
通过软件LabVIEW设计一个虚拟的数字滤波器,使其能产生基本的带有噪声的模拟信号,或是能通过数据采集卡采集信号输入到微机里,并能使用户通过在前面板调节按钮,变换参数产生想要的滤波器,来对所产生的信号或从外界输入的信号进行数字滤波,这里的滤波器可以根据用户的需要进行选择,可以找出最适合的滤波器。
我设计的滤波器包括FIR滤波器,IIR滤波器以及小波去噪。
其中这三大类滤波器分别有一些参数可调,例如IIR滤波器滤波的窗函数。
进行完滤波后还能对信号进行各种频谱分析。
然后通过显示面板来显示滤波前后的信号及频谱分析的信号。
滤波器的各个模块的设计
我设计的滤波器的模块有信号发生模块,滤波模块,以及频谱分析模块。
信号发生模块
信号发生模块是信号有两种,一种是通过基本函数发生器产生基本波形,包括正弦波、方波、三角波、锯齿波四种;一种是用户通过编写公式来产生想要的波形。
然后分别叠加噪声信号,以此来模拟现实中的信号。
其中噪声的类型有均匀白噪声、高斯噪声、周期性随机噪声、泊松噪声。
噪声的幅值也可以调节。
如图10是信号发生模块流程图。
图10信号发生模块流程图
其中需要注意的是采样频率的选择,不然的话会出错,系统不能运行。
根据奈圭斯特采样定理,采样频率应大于或至少等于信号截止频率的2倍,以保证数字化后的信号数据不丢失原信号的特性。
但是奈圭斯特采样定理假设有一个理想的低通滤波器来恢复信号,并且被采样的信号的频带范围有限,这些条件在实际使用中是很难实现的,所以它只在理论上成立。
对同一信号以不同的采样率采集得到的结果是不同的,显然采样频率越高,采集信号越接近真实信号,但是高采样频率意味着对存储空间和内存的更高要求,工程上用到的采样频率常常是信号最高频率的5~10倍。
如图11所示为信号发生模块流程图对应的前面板。
图11输入信号参数选板
滤波去噪模块
图12滤波去噪模块流程图
图13滤波参数选板
滤波去噪模块的流程图如图12所示,信号的滤波去噪就是通过这个模块来实现的。
图13为滤波参数选板,第一个布尔控件是来选择是否要进行滤波,当指示灯亮时就进行滤波了。
布尔控件下面的叫做菜单下拉列表,是用来选择滤波器的类型的。
再往下的三个框分别是IIR滤波器规范,FIR滤波器规范,小波去噪规范,通过调节文本下拉列表可以搭配出最好的滤波器。
其中有三点需要说明一下,一是Case结构,二是LabVIEW调用Matlab函数。
三是小波去噪的相关内容。
(1)Case结构是执行条件语句的一种方法。
这类似于常规的文本编程语言中常见的if…Then…Else语句。
从“函数”选项板的“控制过程执行”子选项板中选择Case结构并将其放置在框图上,并使其边框包围所希望的对象;也可以先将Case结构放置在框图上,然后再根据需要调整其大小并将对象拖拽到结构内部[12]。
Case结构可有多个子框图,这些子框图就像一叠卡片,一次只能看到一张。
在Case结构边框的顶部使子框图标识符。
子框图标识符可以是数字,布尔,字符串或枚举型控件。
在枚举型控件就是无符号字节、无符号字或无符号长整型,如图14、图15所示。
可将选择器器端子放在Case结构左边框上的任何地方。
选择器标签自动调整为输入的数据类型。
例如,如果选择器连接的值从枚举型改变到布尔型,那么对应的0和1分支将分别改变成FALSE和TRUE。
需要注意的一点是如果选择器也值与连接到选择器端子对象的类型不同,那么选择器值以红色显示,并且置VI于中断状态。
隧道是结构上的数据出入口。
可将Case结构外的端子连接到结构内的端子。
连接后,结构的边框上将出现矩形框——表示隧道,见图12。
也可通过将外部端子连接到结构边框来创建隧道,然后再进一步将端子连接到内部端子。
隧道也可在其他结构中找到,例如顺序结构,While循环和For循环。
所有分支都能使用输入隧道的所有数据。
图14布尔型Case结构
图15多帧数字Case结构
如图12所示,在滤波去噪模块中,用到了三个Case结构。
最外围的是一个布尔型的,通过它来选择是否进行滤波;中间的那个Case结构是一个枚举型的,通过它来选择滤波器的类型;最里面的那个Case结构也是枚举型的,当滤波器是小波滤波器时,通过这个Case可以选择不同的小波基来进行滤波。
(2)LabVIEW调用Matlab函数,会用到Matlabtoolbox或采用Matlabscript这时需要安装Matlab,不可以脱离Matlab环境。
Matlab是科学和工程可视化计算领域广泛流行的交互式编程环境。
如果涉及到比较复杂的数学运算,则可以调用Matlab的脚本文件来实现。
Labview调用Matlab的功能是通过Matlab节点来实现的。
可以从“函数”选项板的“数学”→“脚本与公式”→“脚本节点”来访问Matlab脚本节点。
如图16所示为Matlab节点流程图。
图16Matlab节点流程图
向Matlab节点输入Matlab文件的方法有两种:
一种是直接在框图内写入文件代码,另一种是在Matlab节点的边框上单击鼠标右键,在弹出的快捷菜单中选择“导入”命令选项,在弹出的对话框中输入Matlab脚本文件即可。
Matlab脚本节点把流程图内涉及的变量分为两大类:
输入变量和输出变量。
顾名思义,输入变量是指需要用户定义的变量;输出变量包括公式节点传递给其他节点的变量。
创建变量的方法很简单,在公式节点的流程图上单击鼠标右键,选择“添加输入”命令或者“添加输出”命令即可。
输入变量的边沿是细线,输出变量的边沿是粗线,它们的分布位置可以是公式节点边框上的任意位置,如图16所示。
在Matlab中,用户一般不用指定数据类型,所有输入变量会有缺省的类型,而在LabVIEW里面,Matlab节点并不能够判断数据类型,因此用户必须要为每个数据变量指定一个类型。
给Matlab节点变量定义类型的方法是:
在变量上面单击鼠标右键,在弹出的快捷菜单中选择“选择数据类型”命令选项,就会出现Matlab中的各种数据类型名称,然后按照事先在Matlab中定义的类型给每个变量选择合适的数据类型,则系统就会把变量变成相应的LabVIEW内的类型[12]。
如图12所示,当在第二层的Case结构中选择小波去噪时,此时就用到了Matlab脚本节点,这里采用了第一种向Matlab节点输入Matlab文件的方法,即直接在框图内写入文件代码。
这里调用了小波分析工具箱函数wden,它的功能是用小波进行一维信号的自动消噪。
这里的小波基我列举了6种供选择,所以使用了6个Matlab脚本节点,在图12中只能看到一个,在Case结构的每一帧中有一个。
在公式节点的流程图上单击鼠标右键添加输入s和n,同理添加输出xd,下表为它们的控件类型、数据类型和功能。
最需要注意的就是数据类型,如果数据类型不对,会出现错误,“运行”的箭头是断开的,双击断开的箭头会弹出错误提示,可以按错误提示来改正,才能运行。
表1Matlab脚本节点的输入,输出
名称
控件类型
数据类型
功能
输入波形(s)
1-DArrayofReal
输入波形
输出波形(xd)
WaveformGraph
1-DArrayofReal
输出波形
分解层数(n)
DigitalControl
Real
显示小波去噪的分解层数
基小波选择
MenuRing
显示小波消噪使用的基小波
(3)小波去噪的相关知识。
小波分析属于时频分析的一种。
传统的信号分析时建立在傅立叶变换的基础之上的,由于傅立叶分析使用的是一种全局的变换,要么完全在时域,要么完全在频域,因此无法表述信号的时频局域性质,而这种性质恰恰是非平稳信号最根本和最关键的性质。
与标准傅立叶变换相比,小波分析中所用到的小波函数具有不唯一性,即小波函数具有多样性[19]。
但小波分析在工程应用中,一个十分重要的问题是最优小波基的选择问题,这是因为用不同的小波基分析同一个问题会产生不同的结果。
常用的小波函数介绍:
Daubechies(dbN)函数的小波函数
和尺度函数
的有效长度为2N-1,小波函数
消失矩阶数为N。
dbN大多数不具有对称性;对于有些小波函数,不对称性是非常明显的。
正则性随着序号N的增加而增加。
该函数具有正交性。
Daubechies系中的小波基记为dbN,N为序号,且1,2…,10。
coiflet(coifN)函数也是由Daubechies构造的一个小波函数,它具有coifN(1,2,3,4,5)这一系列。
Coiflet具有比dbN更好的对称性。
从支撑长度的角度看,coifN具有和db3N及sym3N相同的长度;从消失矩的数目来看,coifN具有和db2N及sym2N相同的消失矩数目。
Symlets(symN)小波系是由Daubechies提出的近似对称的小波函数,它是对db函数的一种改进。
Symlets函数系常常表示为symN(N=2,3,…8)的形式。
小波分析的应用很多,本设计中是用于信号消噪处理。
运用小波分析进行一维信号消噪处理是小波分析的一个重要应用之一,下面将其消噪的基本原理作一个简要的说明。
一个含噪声的一维信号的模型可以表示成如下的形式:
其中,f(i)为真实信号,e(i)为噪声,s(i)为含噪声的信号。
s(i)=f(i)+
·e(i),i=0,…,n-1(12)
在这里,我们以一个最简单的噪声模型加以说明,即认为e(i)为高斯白噪声,噪声级为1。
在实际的工程中,有用信号通常表现为低频信号或是一些比较平稳的信号,而噪声信号则通常表现为高频信号。
所以消噪过程可以按如下方法进行处理:
首先对信号进行小波分解(如进行三层分解,分解过程如图17所示),则噪声部分通常包含在cD1,cD2,cD3中,因而,可以以门限阈值等形式对小波系数进行处理,然后对信号进行重构即可以大道消噪的目的。
对信号s(i)消噪的目的就是要抑制信号中的噪声部分,从而在s(i)中恢复出真实信号f(i)。
图17小波三层分解图
一般来说,一维信号的消噪过程可以分为三个步骤进行:
(1)一维信号的小波分解。
选择一个小波并确定一个小波分解的层数N,然后对信号s进行N层小波分解。
(2)小波分解高频系数的阈值量化。
对第1到第N层的每一层高频系数,选择一个阈值进行软阈值量化处理。
(3)一维小波的重构。
根据小波分解的第N层的低频系数和经过量化处理后的第1层到第N层的高频系数,进行一维信号的小波重构。
在这三个步骤中,最关键的就是如何选择阈值和如何进行阈值的量化,从某种程度上说,它直接关系到信号消噪的质量。
下面介绍一下函数wden。
功能:
用小波进行一维信号的自动消噪
格式:
(1)[XD,CXD,LXD]=wden(X,TPTR,SORH,SCAL,N,‘wname’)
(2)[XD,CXD,LXD]=wden(C,L,TPTR,SORH,SCAL,N,‘wname’)
说明:
wden是一个利用小波对一维信号进行自动消噪的函数。
其中,X为原始信号,TPTR为阈值选择规则。
TPTR=‘rigrsure’时,采用史坦的无偏似然估计原理。
TPTR=‘heursure’时,是启发式阈值选择。
TPTR=‘sqtwolog’时,是固定阈值。
TPTR=‘minmaxi’时,用于极大极小值原理进行阈值的选择。
SORH是软阈值或硬阈值的选择。
SORH=‘s’时为软阈值。
SORH=‘h’时为硬阈值。
SCAL定义所乘的阈值是否要重新调整:
SCAL=‘one’时,不用重新调整。
SCAL=‘sln’时,根据第一层的系数进行一次噪声层的估计来调整阈值。
SCAL=‘mln’时,在不同层估计噪声层,以此来调整阈值。
N为小波分解的层数。
‘wname’是一个指定的正交小波名,即基小波。
XD为消噪后的信号,[CXD,LXD]为消噪后信号XD的小波分解结构。
本设计中调用的代码如下所示,
xd=wden(s,‘heursure',‘s',‘one',n,‘sym4’);
其中xd为输出,s为输入,采用启发式阈值选择,阈值不重新调整。
可供选的基小波的类型有:
sym1,sym4,sym8,coif5,db1,db4这六种。
频域分析模块
在频域,每个数字信号都有典型的特征。
比如正弦波仅含有单一频率,而白噪声包含所有频率分量。
信号的平稳变化源于它的低频分量,陡峭边缘和急剧变化则源于它的高频分量。
信号的频谱详细描述了信号所包含的频率分量。
信号的频谱有两部分,即幅度频谱和相位频谱。
幅度频谱与每一频率分量的大小或幅度有关,相位频谱反映了不同频率分量之间的相位关系。
信号的频域描述是以频率为横坐标变量来描述幅值,相位的变化规律的。
信号的频域分析或者说是频率分析,是研究信号的频率结构,即求取分量的幅值,相位按频率的分布规律,并建立以频率为横轴的各种谱。
信号的频域分析在信号处理领域中占有相当重要的地位。
将信号变换到频域中以后,许多包含其中的有用信息就会凸显出来,知道信号的频率成分和幅度有时比仅知道某个时间采样的幅度更有意义。
图18频域分析模块流程图
图19频域分析模块前面板
如图18所示,为信号的频域分析模块流程图,这里的是输出信号的频域分析,输入的和输出的频域分析模块是一样的,这里不再列出。
这里的分析有三种,分别是:
信号的功率谱分析,信号的自功率谱分析,快速傅立叶变换频谱。
如图19所示为信号的频域分析模块的前面板。
通过菜单下拉列表可以选择以上三种频域分析方法,通过文本下拉列表可以选择加不同的窗函数。
窗函数的主要作用是对截断处的不连续变化信号进行平滑处理,以此来减少频谱泄漏。
窗函数作用于信号的过程可以用下面的式子表示:
Y(t)=X(t)N(t)(13)
其中:
Y(t)为加窗后的信号,X(t)为加窗前的信号,N(t)为窗函数。
在实际测量中,采样长度总是有限的。
采样信号只是所测的连续信号的截断,这将不可避免的引起谱泄漏,造成计算机所得的频谱与实际信号的频谱不一致。
减小谱泄漏的一种方法是无限延长采样周期,这样FFT就能计算出正确的频谱,但在实际中这是无法做到的。
另外一种方法是使用合适的窗函数进行加窗处理。
对采样信号加窗,可以较小截断信号的转折沿,从而减小谱泄漏,在这个意义上,平滑窗相当于窄带低通滤波器。
谱泄漏的能量取决于突变的幅值,突变幅值越大,谱泄漏就越多。
加窗处理过程是对采样信号乘以一个幅值变化很平滑且边缘趋近于零的有限长度的窗函数来减少边缘处的突变,从而抑制频谱上的泄漏。
为了获取较好的频谱分析精度,总是希望窗函数频谱的旁瓣幅值小而主瓣宽度窄。
因为旁瓣小可以减小泄漏误差,而主瓣窄可以提高频率分辨率。
因此泄漏的降低是以分辨率的下降为代价的。
换句话说,频谱分析精度和分辨率两个指标是相互矛盾的,不能要求两个指标同时都好,而需要根据信号分析的不同要求来选择合适的窗。
通常,窗的选择可以考虑如下方式:
对于持续时间较短的信号进行分析时,可以选择矩形窗,并使整个信号都包括在窗内,这时,因两端截断出信号为零,也就没有泄漏发生;对于包含周期信号在内的无限长信号,可以采用汉明窗,海宁窗或余弦-矩形窗平滑,以减少泄漏误差;如果信号分析的目的主要是准确的确定频谱中的尖峰频率,如系统的结构自振频率,此时最重要的指标是频率的分辨率,因而应选用主瓣最窄的矩形窗。
具体选用什么窗,要根据问题的需要和各种窗的特点而定。
本论文中采用实数FFTVI进行频谱分析,并在此之前对信号进行了加窗处理。
下图为实数FFTVI的流程图。
图20实数FFTVI的流程图
信号的功率谱分析反映了信号在频率上的能量分布,突出信号频谱的主频率。
这就是本次设计所涉及到的三个模块的详细介绍。
把它们用线连接起来就是我所设计的多功能滤波器了。
整个程序流程图如下
录2。
多功能滤波器的仿真
本设计是对模拟信号来进行滤波仿真的,主要是为了验证该程序设计的是否正确以及对各种滤波器的去噪效果进行比较。
现在我们输入一个模拟含有均匀白噪声的正弦信号,信号的频率为“5”,幅值为“10”,均匀白噪声的幅值为“2”。
信号的采样频率为“1000”,采样数为“1000”。
如图21为输入信号参数选板。
输入信号波形如图22所示。
图21滤波器参数设定
图22输入信号波形显示
下面我们采用不同的低通滤波器对该信号进行滤波去噪,看一下滤波效果如何。
一是采用FIR滤波器,它的参数设定如图21的FIR滤波器规范所示,拓扑结构是“windowedFIR”,类型是“lowpass”,最低通带是“12”,滤波效果如图23所示。
图23FIR滤波器的滤波效果图
二是采用IIR滤波器,它的参数设定如图21所示,拓扑结构“Butterworth”,类型是“lowpass”,阶数是“7阶”,低截止频率是“8”,通带波纹为“1”,滤波效果如图24所示。
图24IIR滤波器的滤波效果图
三是采用小波去噪,基小波选择“db4”,层数选择“7”滤波效果如图25所示。
图25小波去噪效果图
通过图22、图23、图24、图25进行比较,可以看出:
FIR滤波器,IIR滤波器,小波去噪都可以达到很好的去噪效果。
并且相比较而言,IIR滤波器和小波去噪的滤波相对来说要好一些。
而且证明该设计正确。
下面我们进行频谱分析的仿真,输入信号选择“公式波形”,波形的公式为“cos(4*w*t)+sin(2*pi
(1)*t)+sin(w*t)”,信号的频率为“100”,采样频率为“1000”,采样数为“1000”,噪声为“高斯噪声”,噪声幅值为“1”。
滤波参数面板中选择“IIR滤波器”,拓扑结构为“Chebyshev”,类型为“Highpass”,阶数为“11”,低截止频率为“110”,通带波纹为“1”。
频域分析面板选“快速傅立叶变换频谱”,选择“Hamming”窗。
如图26所示,运行滤波器,观看“输入信号频域分析”和“输出信号频域分析”的显示面板。
其中需要注意的问题是波形公式的写法。
要注意参照所给的公式来写,数字和字母之间,字母和字母之间都要用符号(例如乘号)隔开,“pi
(1)”表示圆周率。
从波形的公式中可以知道,频率成分中含有三个频率分量,分别为“4*w”、“2*pi
(1)”、“w”,且信号的频率即w为“100”,另外还有高斯噪声的频率分量。
可以看出,因截止频率为“110”,所以把“w”、“2*pi
(1)”以及低于“110”
的高斯噪声频率都滤除了。
证明滤波器设计正确,频谱分析正确,仿真成功。
前面板如下图
图26频谱仿真
参考文献
[1]杨乐平,李海涛.LabVIEW程序设计与应用.电子工业出版社,2005.
[2]周求湛,等.虚拟仪器与LabVIEW7Express程序设计.北京航空航天大学出版社,2004.
[3]宋爱国,刘文波,王爱民.测试信号分析与处理.机械工业出版社,2006.
[4]姜建国,曹建中,高玉明.信号与系统分析基础.清华大学出版社,2004.
[5]陈锡辉.LabVIEW8.20程序设计从入门到精通.北京:
清华大学出版社,2007.
[6]王磊,陶梅.精通LabVIEW8.0.北京:
电子工业出版社,2007.
[7](加)deVegteV.数字信号处理基础.侯正信,王安国,等译.北京:
电子工业出版社,2003.
[8]Chi-TsongChen.DigitalSignalProcessing:
SpectralComputationandFilterDesign.电子工业出版社,2002.
[9](英)EmmanuelC.lfeachor,Barriew.Jervis.数字信号处理实践方法.罗鹏飞,杨世海,等译.电子工业出版社,2004.
[10]秦树人.虚拟仪器.中国计量出版社,2004.
[11]胡昌华,张军波,夏军,等.基于MATLAB的系统分析与设计—小波分析.西安:
西安电子科技大学出版社,2000.
[12]张凯,周陬,郭栋.LabVIEW虚拟仪器工程设计与开发.国防工业出版社,2004.
心得体会
在这次设计中,充分运用课堂中学习到的知识,在设计的过程中对LabVIEW软件更加了解与熟练,虽然课堂学的东西远远不能满足实际要求,但至少使自己学到一些知识。
由于知识掌握所限,与传统的示波器相比有些功能无法设计与实现,设计出来的虚拟示波器只可以实现示波器的一部分功能。
通过这次设计,我更加明白理论与实际的差距,我们应该多动手,多思考,提高自己的实践动手能力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 LABVIEW 多功能 滤波器 设计