一种FIR滤波参数可调的电压采集模块设计

2021-01-13 07:01徐巧玉王军委周新稳
关键词:阶数滤波器滤波

杨 旭,徐巧玉,王军委,周新稳

(1.河南科技大学 机电工程学院,河南 洛阳 471003;2.洛阳银杏科技有限公司,河南 洛阳 471003)

0 引言

在电压信号采集过程中,由于电路设计、工作环境等原因,采集到的信号中通常包含着与信号无关的高频噪声。在多种数字滤波器中,有限长单位冲激响应(finite impulse response,FIR)数字滤波由于性能稳定和线性相位的特点,能够很好地应用于高频噪声的滤除[1-7]。目前,FIR滤波器的设计通常依赖MATLAB软件,首先由MATLAB软件根据滤波参数生成滤波器系数,然后在嵌入式系统中实现滤波运算[8-14]。该方式能够在设计滤波器的同时,对滤波器的性能进行很好地分析和仿真,但对MATLAB软件有着很强的依赖性,一旦采集的信号或者滤波要求发生改变时,需要重新生成滤波器系数,因此降低了现场应用的灵活性。现场可编程门阵列(field programmable gate array,FPGA)具有并行执行、运算速度快的特点,越来越多的FIR滤波器通过FPGA实现[15-20]。FPGA能够在不影响其他模块的情况下对数据进行滤波,大幅提高了滤波效率,但是存在滤波器阶数固定、参数不易更新、灵活性较差的问题。

针对以上问题,本文提出了一种基于FIR滤波参数可调的电压信号采集模块设计方案。该方案采用高级精简指令集微处理器(advanced RISC machine,ARM)+FPGA的硬件架构,由ARM完成消息处理、采样配置、滤波器系数生成、数据管理等工作,FPGA完成模数(analog-digital,A/D)转换控制、FIR数字滤波、数据缓存等工作。为提高FIR低通数字滤波器使用的灵活性和方便性,由ARM根据采样频率、截止频率等滤波参数计算生成滤波器系数并发送给FPGA。FPGA在直接型FIR滤波器的基础上,通过增加数据输出的方式改进滤波器结构,实现滤波器阶数的可调。利用FPGA并行执行的优势,在不影响8个电压输入通道的信号采集速率的情况下,实现了对采集数据参数可调的FIR低通数字滤波。

1 系统总体方案设计

为了实现电压信号采集和参数可调的FIR低通滤波,本文采用ARM+FPGA的架构。电压采集模块系统框图如图1所示。电压采集模块主要包括AD7606单元、FPGA单元、ARM单元、以太网单元和SD卡单元5个硬件单元,ARM和FPGA通过可变静态存储控制器(flexible static memory controller, FSMC)总线进行数据交互。

图1 电压采集模块系统框图

AD7606单元:采用最高采样率为200 kHz的AD7606芯片作为模数转换器,具有8个模拟量输入通道,通过FPGA控制将±10 V/±5 V电压的模拟信号转换为数字信号。

FPGA单元:FPGA模块采用Altera公司的EP4CE15F23C8N芯片,主要实现模数转换控制、FIR低通滤波、数据缓存和采集管理等功能。

ARM单元:ARM模块采用STM32F767IGT6芯片,主要负责通信消息处理、采集参数配置、滤波器系数生成和数据管理等工作。通过FSMC总线与FPGA进行通信,用于控制FPGA程序运行,进而实现对电压信号采集参数配置及数据读取。

以太网单元:实现采集模块与上位机的通信,用于上位机对采集模块的参数设置、数据读取和采样控制。

SD卡单元:将Micro SD卡作为数据存储,将采集的电压信号数据保存为数据文件。

工作流程:本模块由上位机控制,采集模块通过以太网单元接收上位机的命令消息,并从消息中提取采样频率、采样通道、滤波器参数等配置参数。基于ARM的滤波器系数生成单元,根据FIR滤波器参数,计算得到滤波器系数,并发送给FPGA,由其根据滤波器系数及阶数完成FIR数字低通滤波运算。FPGA根据ARM发送的配置参数运行程序,实现对电压信号采集参数配置。ARM读取FPGA中的采集数据,保存到SD卡或者通过以太网上传至上位机。

2 电压信号的模数转换

电压信号的模数转换由FPGA驱动AD7606实现,分为AD7606驱动和数据分离两部分,如图2所示。AD7606驱动部分根据芯片时序要求,控制AD7606进行模数转换并完成数据的读取,数据分离部分从AD7606输出数据中分离出每个模拟通道的数据,便于对每个通道数据进行单独的滤波和缓存。

AD7606模式转换和数据读取时序如图3所示。首先将CONVSTA和CONVSTB信号拉低后再拉高,开启本次模数转换,CONVSTA和CONVSTB拉高后开始监测BUSY信号线的平状态,当监测到BUSY由高电平拉低时,表示本次模数转换完成,开始进行数据的读取。读取数据时,首先拉低CS信号,然后将RD信号先拉低后拉高,在RD信号的上升沿锁存数据线DB[15∶0]上的数据,对RD信号按照以上步骤操作8次,将通道1到通道8的数据依次读出,读取结束后拉高CS信号。

图2 模数转换模块结构图

图3 AD7606模式转换及数据读取时序图

从AD7606读取的数据是以通道为单位的串行数据,为了对每个通道的数据进行单独的数字滤波,需要将数据转换为以通道为单位的并行数据。数据分离部分收到数据后,按照通道1到通道8的顺序,将数据及数据输出时钟信号分配到对应的输出口,便于后续各个通道数据的滤波处理。

3 参数可调FIR滤波器

参数可调FIR低通滤波器的实现由ARM和FPGA两部分协同完成,ARM根据窗函数、滤波器阶数、采样频率、截止频率等滤波器参数计算生成滤波器系数,并通过FSMC总线将滤波器系数和阶数发送给FPGA。FPGA将采集数据与滤波器系数进行对应阶数的滤波运算,实现对电压采集数据参数可调的FIR低通滤波。

3.1 滤波器系数生成

针对窗函数法设计FIR滤波器时的浮点数运算问题,ARM芯片采用STM32F767IGT6,该芯片内部集成的浮点数运算单元对单精度浮点数和双精度浮点数的运算都具有良好的支持性,能够很好地用于滤波器设计时的浮点数运算。FIR滤波器系数计算步骤如下:

(Ⅳ)将滤波器阶数Order代入所选择的窗函数ω(n)中,计算得到窗函数序列。

(Ⅴ)将hd(n)与选择的窗函数ω(n)相乘,得到单位脉冲响应h(n)=ω(n)hd(n)。

由于计算得到的滤波器系数为浮点数,FPGA直接对这些系数运算会耗费大量的逻辑单元,将影响滤波运算的效率,因此需要对系数进行量化。系数量化时,首先对所有滤波器系数乘以(215-1),将处理后的系数取整数,然后将整数滤波器系数转换成二进制补码数据。ARM在完成对滤波器系数的计算和量化后,通过FSMC总线将滤波器系数和阶数发送给FPGA,由FPGA完成FIR低通滤波运算。

3.2 阶数可调的滤波器结构

为了实现FIR滤波器阶数可调,本文在直接型FIR滤波器的基础上,设计了一种多输出口的滤波器结构。FIR直接型滤波器结构系统函数[21]如式(1)所示。

(1)

由式(1)可知:直接型FIR滤波器能够通过数据延迟、乘法、加法运算实现。在FPGA中采用这种结构进行设计,不仅能够实现快速滤波运算,还能够使滤波模块与模数转换模块数据输出保持时钟同步。这种同步能够保证数据在采样、滤波和缓存之间的流水线传输,数字滤波不会影响采集速度和数据缓存,在长时间采样时具有很大的优势。

通过对直接型结构的传递函数进行变换,可以将式(1)所示传递函数分为两部分,得到等价传递函数:

(2)

由式(2)可知:对于直接型结构的FIR滤波器,在低阶滤波器后加入延迟单元、乘法单元和加法单元得到高阶滤波器;低阶滤波器可通过去除掉高阶滤波器的部分延迟单元、乘法单元和加法单元的方式获得。同理,还可以在此基础上继续对滤波器进行拆分,从而在一个高阶滤波器中获得若干个低阶滤波器。根据此原理,本文在直接型FIR滤波器的基础上,通过对滤波器拆分组合的方式,设计了一种多数据输出口的网络结构,如图4所示。

由图4可知:在不同的数据输出点上数据参与的延迟、乘法、加法运算是不同的,在传递函数H(z)上体现为N值不同,因此每个数据输出点对应不同阶数的滤波运算,可通过选择数据输出点的方式选择滤波器阶数,从而实现滤波器阶数的可调。

本文设计的FIR滤波器模块具有6个数据输出口,分别对应15~20共6种阶数的滤波。FIR滤波模块框图如图5所示。在滤波器参数改变时,ARM将滤波器阶数和滤波器系数通过FSMC总线发送给FPGA,FPGA更新滤波器系数寄存器,并进行滤波运算。在FIR滤波运算后,根据滤波器阶数选择对应的数据输出口输出数据。

图4 多数据输出口FIR滤波器结构图

图5 FIR滤波模块框图

4 数据的缓存与读取

电压采集模块共有8个电压信号输入通道,为了能够对每个通道的数据进行缓存,在FPGA内部建立了8个深度为1 024、宽度为32的随机存取存储器(radom access memory,RAM),编号为RAM1~RAM8,分别对应通道1到通道8的数据存储,如图6所示,图6中输入数据为滤波后数据。

图6 数据滤波和缓冲结构图

在电压信号采集过程中,模数转换和FIR滤波模块一直运行,通过控制数据缓存单元数据的写入与读取,控制电压信号采集。采集开始后,数据开始写入缓存区,由于FSMC总线的通信速度远大于AD7606的采集速度,可在不影响数据采集的情况下完成数据的读取。采集结束后,数据停止写入缓存区,ARM停止读取数据。读取数据时,ARM通过FSMC总线对数据进行读取,读取时根据指定的通道,读逻辑控制单元切换RAM数据输出接口,输出对应RAM中的数据。ARM在读取到数据后,根据设置的参数选择将数据以文件的形式保存至SD卡或者直接上传至上位机。

5 实验与分析

为了对本方案进行验证,分别从电压采集精度和FIR滤波效果两个方面进行测试。

5.1 电压采集精度测试实验

电压采集精度测试主要通过采集福禄克5502A校准器输出的电压信号,并将采集值与输出值进行对比,从而获得电压采集模块的采集精度。

采用福禄克5502A校准器,输出0~5 V多种幅值的直流信号,然后对电压信号进行采集,采集数据量为1 000,实验测量结果如表1所示。

由表1可知:采集模块采集的相对误差绝对值最大为0.22%,并且每组1 000点采集数据标准差值很小,采集模块具有很高的电压采集精度。

表1 电压采集精度测量表

5.2 FIR滤波测试实验

FIR滤波测试实验将峰峰值为5 V、频率为250 Hz正弦波信号作为采集对象,并在信号中叠加20 dB信噪比的白色高斯噪声,作为滤波器滤除目标。电压采集模块以100 kHz的频率采集信号,并采用不同参数的滤波器对信号滤波,通过分析滤波后的数据波形判断滤波器的滤波效果。

电压采集模块在未加滤波模式下,采集的原始信号如图7a所示。由图7a可以看出:采集的正弦波数据中存在着大量的噪声信号声。

为了对本文设计的滤波器滤波功能进行验证,以100 kHz采样频率,采用汉明窗作为窗函数,分别采用20阶10 kHz截止频率、20阶2 kHz截止频率和15阶2 kHz截止频率,对叠加了噪声的原始信号进行FIR低通滤波,滤波后的数据波形如图7b~图7d所示。

(a) 原始信号

(b) 20阶10 kHz截止频率滤波效果图

(c) 20阶2 kHz截止频率滤波效果图

由图7b~图7d可知:滤波器的截止频率越低,信号的滤波效果越好,但是对有效信号的衰减也较大,在同一截止频率下,高阶数滤波相对于低阶数具有更好的滤波效果。因此,本电压采集模块的FIR数字低通滤波器根据设置参数对滤波器进行调整,并滤除信号中的高频噪声。

6 结论

本文提出了一种FIR滤波参数可调的电压采集模块,该模块采用ARM+FPGA的硬件架构,能够在实现电压采集的同时,完成参数可以调整的FIR低通滤波运算。本采集模块能够完成电压采集功能,采集相对误差绝对值最大为0.22%,具有较高的电压采集精度。设置滤波参数可以完成FIR低通滤波器系数生成和滤波器结构调整,滤除电压信号中的高频干扰噪声。

猜你喜欢
阶数滤波器滤波
XIO 优化阶数对宫颈癌术后静态调强放射治疗计划的影响
基于HP滤波与ARIMA-GARCH模型的柱塞泵泄漏量预测
浅谈有源滤波器分析及仿真
基于多模谐振器的超宽带滤波器设计
准天顶卫星系统广播星历精度评定和拟合精度分析
确定有限级数解的阶数上界的一种n阶展开方法
一款用于无线通信系统的小型滤波器天线
一种考虑GPS信号中断的导航滤波算法
复变函数中孤立奇点的判别
基于多窗口中值滤波和迭代高斯滤波的去除图像椒盐噪声的方法