基于虚拟仪器的数字滤波器的设计
2017-03-21王钰楠关静刘然
王钰楠+关静+刘然
摘 要: 由于数字滤波器在信号处理过程中应用广泛,所以研究滤波器的设计具有重要的实际意义。文章利用LabWindows/CVI软件设计了滤波处理界面,该界面包括信号的产生、噪声的叠加和滤波器处理;该界面可以选择多种原始信号与噪声信号,并且可以快速、便捷地修改濾波器的参数。经过实验验证,利用LabWindows/CVI软件设计数字滤波器,操作简单、功能强大,可以用于实际。
关键词: 数字滤波器; 虚拟仪器; 滤波; 噪声
中图分类号:TP312 文献标志码:A 文章编号:1006-8228(2017)03-34-03
Abstract: Because of the wide application of digital filter in signal processing, it is of great practical significance to study the design of the filter. With LabWindows/CVI software, a filter processing interface is designed in this paper, which includes signal generation, noise superposition and filter processing; the interface can choose a variety of the original signal and noise signal, and can quickly and conveniently modify the filter parameters. After experimental verification, designing digital filter with LabWindows/CVI software is simple and powerful, and can be widely used in practice.
Key words: digital filter; virtual instrument; filtering process; noise
0 引言
在信号处理过程中,对处理的实时性和快速性的要求越来越高。许多信号与信息处理都要用到滤波器,如对信号的过滤、检测、预测、估计等。其中模拟滤波器一般是由硬件电路实现,使用电容、电阻、电感等元器件实现滤波功能。而利用硬件电路设计滤波器,会使得电路计算、测试、调试过程复杂,且存在电压漂移、温度漂移和噪声等问题;相较而言,数字滤波器具有稳定性好、精度高、设计灵活、实现方便等许多突出的优点,克服了模拟滤波器的缺陷[1]。因而随着数字技术的发展,用数字技术实现滤波器的功能越来越受到人们的注意并得到广泛的应用。
1 LabWindows/CVI简介
LabWindows/CVI是美国国家仪器公司(NI公司)推出的交互式C语言开发平台。LabWindows/CVI将功能强大、使用灵活的C语言平台与用于数据采集分析和显示的测控工具有机地结合起来,利用它的集成化开发环境、交互式编程方法、函数面板和丰富的库函数大大增强了C语言的功能,为熟悉C语言的开发设计人员编写检测系统、自动测试环境、数据采集系统、过程监控系统等应用软件提供了一个理想的软件开发环境[2]。
2 数字滤波器
2.1 数字滤波器的原理
数字滤波器在数字信号处理中占据着非常重要的地位。其实数字滤波可以被看做是一种运算过程,即将一组被输入的数字信号量的序列通过一定的运算转换后,得到另一组输出的数字信号序列。因此它本身就是一台数字式的处理设备[3]。
一个数字滤波器可以用系统函数表示为:
对式⑴进行归一化处理,可以得出对应滤波器输入输出关系的常系数线性差分方程:
数字滤波器主要分为两种有限长数字滤波器(FIR)和无限长数字滤波器(IIR)。IIR滤波器的首要优点是可在相同阶数时取得更好的滤波效果;而FIR滤波器的最主要的特点是没有反馈回路,则不会出现不稳定的问题;同时,FIR滤波器可以同时保证幅度特性随意设置和线性相位精确度,稳定和线性相位特性是FIR滤波器的突出优点[4]。
2.2 数字滤波器设计的一般步骤
⑴ 确定滤波器的性能指标,使其满足具体的任务需求;
⑵ 用因果系统的离散线性时不变系统函数来逼近确立的性能指标;
⑶ 利用有限精度算法去实现这个系统函数。(包括选择适当的运算结构、确定合适的字长和有效数字处理方法等)
⑷ 用适当的软、硬件技术实现。(包括采用通用计算机软件、数字滤波器硬件、或者两者结合)
3 利用LabWindows/CVI设计数字滤波器
在LabWindows/CVI集成开发环境下,先建立一个工程,一个工程最终有.iur(用户界面文件)、.c(源文件)和自动生成的.h(头文件),.c文件中包含一个mian{}或者winMaln{}形式的c语言程序框架及与用户界面资源对应的一些空回调函数,.h文件包含用户界面文件中使用的各种资源的定义[5]。
利用LabWindows/CVI设计滤波处理界面,需要首先新建一个用户界面文件,然后在该用户界面中添加所需的控件,利用该软件生成所需的代码,最后根据自己的需求,利用C语言编辑代码实现所需的功能。
本文设计的滤波器的方法是巴特沃斯,且该滤波器的设计包括三部分,分别为:产生信号、叠加信号和滤波处理。首先产生一个模拟的原始信号和一个噪声,通过信号叠加处理产生一个受噪声干扰的模拟信号,最后经滤波器滤波处理,得到原始信号。用户面板设计如图1所示。
程序设计的主要思路是:先产生原始信号与噪声信号,设计图表控件,装载界面时显示信号波形;然后对原始信号与噪声信号进行叠加处理;最后设计滤波器的滤波方法与滤波方式,将原始波形、噪声波形、叠加噪声波形与滤波后的波形分别显示出来,将原始波形、叠加噪声干扰波形与滤波处理后波形进行比较,分析滤波器的滤波效果。程序流程图如图2所示。
3.1 信号源
虚拟仪器产生的信号主要来自数据采集卡,数据采集卡将输入的连续模拟信号转换成离散数字信号,再对这些数据进行处理。信号的产生类库位于LibraryàAdvanced AnalysisàSignal Generation下。信号的产生类库可以产生多种信号,在本界面中主要设计了5种原始信号与4种噪声信号。
⑴ 原始信号
SinePattern (samplepoint, amp, phase, cycle, wave);
//正弦信号
TriangleWave (samplepoint, amp, (double)cycle/
samplepoint, &phase, wave); //三角波信号
⑵ 噪声信号
GaussNoise (samplepoint, 1.0, 1, wave);
//高斯白噪声信号
Uniform (samplepoint, 1, wave); //均匀白噪声信号
3.2 信号叠加
本设计所用到的信号处理方式是信号叠加。信号的分析类库位于LibraryàAdvanced AnalysisàSignal Processing下。
选择噪声的类型,然后设置噪声的增益、采样频率以及周期等参数,最后在原始信号的基础上叠加噪声。
noisewave=malloc (wavepoint * sizeof (double));
Uniform (wavepoint, 1, noisewave);
//在原信号基础上叠加高斯白噪声信号
noisewave=malloc (wavepoint * sizeof (double));
Uniform (wavepoint, 1, noisewave);
//在原信号基础上叠加均匀白噪声信号
3.3 滤波处理
本文利用巴特沃斯方法设计了滤波器。首先选择滤波方法(一步法、二步法、三步法),然后对滤波阶数、上限截止频率、下限截止频率等滤波参数进行设置,最后选择选择滤波器的类型低通、高通、带通、带阻完成信号的滤波处理。
Bw_CascadeCoef (wavepoint, lowercutoff, highercutoff,
filterinformation); //产生巴特沃斯滤波器系数
IIRCascadeFiltering (noisewave, wavepoint,
filterinformation, noisewave); //信号滤波
FreeIIRFilterPtr (filterinformation); //釋放滤波器结构
4 结论
本文通过设计实例,介绍了利用LabWindows/CVI实现数字滤波器的设计与滤波处理,该设计方法使用简单、操作快捷,大大减轻了开发员的工作量,通过比较原始波形与滤波器滤波处理后的波形,可以看出,滤波器过滤掉了噪声干扰,恢复出了原始波形,实现了滤波器的滤噪功能。在实际的应用中,只需按照需求修改滤波器参数,而不用修改程序,即可以实现不同截止频率的数字滤波器的设计,该方法有很好的应用价值。
参考文献(References):
[1] 万娟.地震数据采集系统中的数字滤波器设计[D].中国科学技术大学,2009.
[2] 王建新,隋美丽.LabWindows/CVI虚拟仪器测试技术及工程应用[M].化学工业出版社,2011.
[3] 刘万松.基于DSP的FIR数字滤波器的设计[D].贵州大学,2008.
[4] 葛远香,胡开明,GEYuan-xiang等.基于MATLAB和DspBuilder的电网信号FIR滤波器设计[J].东华理工大学学报自然科学版,2010.33(2):197-200
[5] 李腾飞,张辉,LiTengfei等.基于LabWindows/CVI和Matlab的滤波器设计[J].电子科技,2007.3:29-31