一种适用于带FPU模块CPU的数字滤波方法及滤波器与流程

文档序号:23474024发布日期:2020-12-29 13:25阅读:169来源:国知局
一种适用于带FPU模块CPU的数字滤波方法及滤波器与流程

本发明涉及一种数字滤波器,具体涉及一种适用于带fpu模块cpu的数字滤波方法及滤波器。



背景技术:

在嵌入式应用领域中,通常需要处理器进行一定的浮点数据处理,在数据处理过程中就会引入大量的因有限字长引起的舍入误差。而这些误差可能会影响系统的性能和精度,误差过大还会使系统产生振荡,甚至直接影响控制系统的稳定性。要减小有效字长的影响最直接的方法就是采用更高精度的数据类型进行数据处理,但这会占用更多处理器资源,这对处理器资源有限的应用场景是难以接受的。

当利用只含有单精度浮点处理单元(fpu)的处理器处理双精度数据时,是通过c语言库函数处理的,所以处理一对双精度数据乘运算所需时钟周期远大于处理一对单精度数据乘运算所需时钟周期。

目前针对有限字长引起的系统稳定性问题已有许多研究。有许多研究致力于改善系统对数字化截断误差和溢出误差的快速收敛性,也有研究直接从硬件设计上来解决该问题,设计专用的数据处理单元以应对数据溢出和截断误差效应。

然而从系统稳定性和收敛速率角度去降低数据溢出和截断误差的影响,算法实现上比较复杂,不利于在资源有限的嵌入式系统上实现。即使抑制算法能使系统快速收敛,但仍将会引起系统的波动,对于需要提取滤波器中间变量的过程来讲,是极为不利的。例如从电机编码器的位置信号中提取速率信息,反馈速率的波动必将造成输出的波动,严重时将会引起电机震动。而从硬件设计上优化数据处理又将会带来过大的硬件成本消耗,例如中国专利,专利公开号cn103366058b公开的名为《基于fpga的高维卡尔曼滤波器及其实现方法》,采用利用fpga实现一个时钟周期的双精度浮点型运算,增加了额外的软硬件成本。



技术实现要素:

为了解决背景技术中指出的现有方式处理双精度浮点型数据时,采用单精度浮点处理单元(fpu)的处理器处理双精度数据时,处理效率低的问题,以及采用fpga方式所带来的软硬件成本高,且计算量大的问题,本发明提供了一种适用于带fpu模块cpu的数字滤波方法。

同时,本发明还提供一种基于软件程序架构的适用于带fpu模块cpu的数字滤波器。

本发明的基本实现思路是:

将现有的二阶离散滤波器进行等效变换,通过将关键数据分离为整数和小数部分,并采用整数与小数分开处理的方法,从源头上避免有限字长效应引起的数据溢出和数字化截断误差。整型数据的加减运算能够有效的防止数据溢出,且一般的处理器也能快速的处理整型运算。小数部分采用单精度浮点型数据类型能够很好的保证数据精度,32位的单精度浮点型数据能够表示7位十进制有效数据,小数点后7位有效数字(十进制)的精度基本能满足大部分应用场景。由于在不具备双精度硬件处理模块的处理器中,避免了双精度数据运算,相较于利用c语言库函数处理双精度数据的方式,大大提升了滤波器运算速率。

本发明的具体技术方案是:

本发明提供的一种适用于带fpu模块cpu的数字滤波方法,包括以下步骤:

步骤1:当前采样时刻的待处理原始数据与第一反馈信号经过一次差分运算后,再与第二反馈信号x3i继续进行二次差分运算得到第一信号xdi;

步骤2:第一信号xdi分别与第三反馈信号x3f和第四反馈信号分别进行差分运算后得到第二信号xd1;

步骤3:第二信号xd1经过与常值k1*ts进行一次乘法运算后,再与第五反馈信号进行差分运算得到第三信号xd2;其中,k1为放大系数,ts为采样时刻;

步骤4:第三信号xd2与常值k2*ts进行一次乘法运算后,再与第五反馈信号进行加法运算得到第四信号x2;第四信号x2通过浮点数拆分运算分离出当前采样时刻的第一整数信号x2i和第一小数信号x2f;其中,k2为放大系数;

步骤5:第一整数信号x2i经过两次累加运算后生成第五信号x1i1,同时第一小数信号x2f与第四反馈信号进行加法运算后生成第六信号x1;

步骤6:第六信号x1经过浮点数拆分运算分离成当前采样时刻的第二整数信号x1i和第二小数信号x1f;

步骤7:第二整数信号x1i2和第五信号x1i1进行加法运算后生成当前时刻的第七信号x1i,第七信号x1i与第一小数信号x1f再次进行加法运算后作为最终数据输出;

所述第一反馈信号为上一采样时刻的第七信号x1i;

所述第二反馈信号x3i和第三反馈信号x3f为上一采集时刻的第一整数信号x2i产生,具体产生过程为:

第一整数信号x2i经过一次累加,并与常值1/(k1*ts)进行一次乘法运算后,生成第八信号x3,第八信号x3经过浮点数拆分运算分离成第一反馈信号x1i和第二反馈信号x3f;

所述第四反馈信号为上一采样时刻的第二小数信号x1f;

所述第五反馈信号为上一采样时刻的第一小数信号x2f;

基于上述滤波方法的描述,本发明还提供了一种适用于带fpu模块cpu的数字滤波器,包括运行于cpu中的以下各程序模块,具体包括:

第一差分模块、第二差分模块、第一运算模块、第一乘法模块、第三差分模块、第二乘法模块、第一加法模块、第一浮点数拆分模块、第一累加模块、第二累加模块、第三乘法模块、第二浮点数拆分模块、第二加法模块、第三浮点数拆分模块、第三累加模块、第三加法模块以及第四加法模块;

第一差分模块的一个输入端接收被处理原始数据,另一个输入端与第三加法模块的输出端连接;

第二差分模块的一个输入端与第一差分模块的输出端连接,另一个输出端与第二浮点数拆分模块的小数输出端连接;

第一运算模块具有三个输入端和一个输出端,一个输入端与第二差分模块的输出端连接,一个输入端与第二浮点数拆分模块的小数输出端连接,一个输入端与第三浮点数拆分模块的小数输出端连接;

第一乘法模块的输入端与第一运算模块的输出连接;

第三差分模块的一个输入端与第一乘法模块的输出端,第三差分模块的另一个输入端与第一浮点数拆分模块的小数输出端连接;

第二乘法模块的输入端与第三差分模块的输出端连接;

第一加法模块的一个输入端与第二乘法模块的输出端连接,另一个输入端与第一浮点数拆分模块的小数输出端连接;

第一浮点数拆分模块的输入端与第一加法模块的输出端连接,第一浮点数拆分模块的整数输出端通过第一累加模块、第二累加模块与第三加法模块一个输入端连接,同时通过第一累加模块、第三乘法模块与第二浮点数拆分模块的输入端连接;

第二加法模块的一个输入端与第一浮点数拆分模块的小数输出端连接,第二加法模块的另一个输入端与第三浮点数拆分模块的小数输出端连接;

第三浮点数拆分模块的输入端与第二加法模块的输出端连接,第三浮点数拆分模块的整数输出端通过第三累加模块与第三加法模块的另一个输入端连接;

第四加法模块的一个输入端与第三加法模块的输出端连接,另一个输入端与第三浮点数拆分模块的小数输出端连接,第四加法模块的输出端作为整个滤波器的最终输出端输出滤波后的数据。

本发明的有益效果是:

本发明采用了浮点型数据拆分的方式对积分环节的变量拆分为整部数分和小数部分,从源头上避免有限字长效应引起的数据溢出和数字化截断误差。采用整型数据加减运算能够有效的防止数据溢出,且采用一般的处理器也能快速的进行整型运算。整数部分使滤波器具有更宽的数据处理范围。采用浮点型来进行小数运算,使数据具有较高的精度,并且该滤波方案在只采用浮点型和整形运算的情况下,达到与采用双精度运算情况下相当的数据处理精度和范围,而运算速度又远快于双精度滤波器。

附图说明

图1为现有的二阶离散滤波器的原理图。

图2为浮点数拆分模块的原理图。

图3为本发明的滤波器原理图。

附图标记如下:

1-第一差分模块、2-第二差分模块、3-第一运算模块、4-第一乘法模块、5-第三差分模块、6-第二乘法模块、7-第一加法模块、8-第一浮点数拆分模块、9-第一累加模块、10-第二累加模块、11-第三乘法模块、12-第二浮点数拆分模块、13-第二加法模块、14-第三浮点数拆分模块、15-第三累加模块、16-第三加法模块、17-第四加法模块。

具体实施方式

下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在有没做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本发明的描述中,需要说明的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。

在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,术语、“连接”应做广义理解,例如,可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通,也可以表示数据流的传输。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

经过对现有的如图1形式的二阶离散滤波器进行变换,主要增加了多个浮点数拆分模块,原理结构如图2所示,得出了本实施例所提供的数字滤波器结构,使得在int数据类型能表示的数据范围内有良好的滤波效果,保证滤波器的数据精度,而又不会占用太多的cpu资源。鉴于市面许多嵌入式cpu具有单精度浮点数据处理单元而没有双精度数据处理单元,cpu能够快速处理单精度float类型数据,利用c语言库函数实现double类型数据处理将会大幅度增大计算量。

本实施例提供的适用于带fpu模块cpu的滤波器结构如图3所示,包括包括运行于cpu中的以下各程序模块,具体包括:

第一差分模块1、第二差分模块2、第一运算模块3、第一乘法模块4、第三差分模块5、第二乘法模块6、第一加法模块7、第一浮点数拆分模块8、第一累加模块9、第二累加模块10、第三乘法模块11、第二浮点数拆分模块12、第二加法模块13、第三浮点数拆分模块14、第三累加模块15、第三加法模块16以及第四加法模块17;

第一差分模块1的一个输入端接收被处理原始数据,另一个输入端与第三加法模块16的输出端连接;

第二差分模块2的一个输入端与第一差分模块1的输出端连接,另一个输出端与第二浮点数拆分模块12的小数输出端连接;

第一运算模块3具有三个输入端和一个输出端,一个输入端与第二差分模块2的输出端连接,一个输入端与第二浮点数拆分模块12的小数输出端连接,一个输入端与第三浮点数拆分模块14的小数输出端连接;

第一乘法模块4的输入端与第一运算模块3的输出连接;

第三差分模块5的一个输入端与第一乘法模块4的输出端,第三差分模块5的另一个输入端与第一浮点数拆分模块8的小数输出端连接;

第二乘法模块6的输入端与第三差分模块5的输出端连接;

第一加法模块7的一个输入端与第二乘法模块4的输出端连接,另一个输入端与第一浮点数拆分模块8的小数输出端连接;

第一浮点数拆分模块8的输入端与第一加法模块7的输出端连接,第一浮点数拆分模块8的整数输出端通过第一累加模块9、第二累加模块10与第三加法模块16一个输入端连接,同时通过第一累加模块9、第三乘法模块11与第二浮点数拆分模块12的输入端连接;

第二加法模块13的一个输入端与第一浮点数拆分模块8的小数输出端连接,第二加法模块13的另一个输入端与第三浮点数拆分模块14的小数输出端连接;

第三浮点数拆分模块14的输入端与第二加法模块13的输出端连接,第三浮点数拆分模块14的整数输出端通过第三累加模块15与第三加法模块16的另一个输入端连接;

第四加法模块17的一个输入端与第三加法模块16的输出端连接,另一个输入端与第三浮点数拆分模块14的小数输出端连接,第四加法模块17的输出端作为整个滤波器的最终输出端输出滤波后的数据。

基于上述对滤波器结构的描述,现对该滤波器的滤波方法进行描述:

步骤1:当前采样时刻的待处理原始数据in与第一反馈信号经过第一差分模块进行第一次差分运算后,再与第二反馈信号x3i通过第二差分模块进行第二次差分运算得到第一信号xdi;此时xdi已经比较小,将xdi转化为浮点型时就不会有精度损失。

步骤2:第一信号xdi分别与第三反馈信号x3f和第四反馈信号通过第一运算模块进行运算后得到第二信号xd1;

步骤3:第二信号xd1经过第一乘法模块与常值k1*ts进行一次乘法运算后,再与第五反馈信号在第三差分模块进行差分运算得到第三信号xd2;其中,k1为放大系数,ts为采样时刻;

步骤4:第三信号xd2经过第二乘法模块与常值k2*ts进行一次乘法运算后,再与第五反馈信号在第一加法模块进行加法运算得到第四信号x2;第四信号x2通过第一浮点数拆分模块进行拆分运算后分离出当前采样时刻的第一整数信号x2i和第一小数信号x2f;其中,k2为放大系数;

步骤5:第一整数信号x2i分别通过第一累加模块、第二累加模块进行两次累加运算后生成第五信号x1i1,同时第一小数信号x2f与第四反馈信号在第二加法模块进行加法运算后生成第六信号x1;

步骤6:第六信号x1经过第三浮点数拆分模块进行运算后分离成当前采样时刻的第二整数信号x1i和第二小数信号x1f;

步骤7:第二整数信号x1i2和第五信号x1i1在第三加法模块进行加法运算后生成当前时刻的第七信号x1i,第七信号x1i与第一小数信号x1f再次通过第四加法模块进行加法运算后输出最终的数据;

需要强调的是,以上过程中的各个反馈信号分别为:

第一反馈信号为上一采样时刻的第七信号x1i;

第二反馈信号x3i和第三反馈信号x3f为上一采集时刻的第一整数信号x2i产生,具体产生过程为:

第一整数信号x2i经过第一累计模块进行一次累加,并经过第三乘法模块与常值1/(k1*ts)进行一次乘法运算后,生成第八信号x3,第八信号x3经过第二浮点数拆分模块进行拆分运算后分离成第一反馈信号x1i和第二反馈信号x3f;

第四反馈信号为上一采样时刻的第二小数信号x1f;

第五反馈信号为上一采样时刻的第一小数信号x2f;

本实施例中叙述对象为滤波器,也同样适用于控制器。浮点型可以是其他小数数据类型,比如定点数表示,整形可以是具有其他精度的整数数据类型,具有同样的效果。方案可以直接采用更高精度变量如double型,但对不具备该精度数据处理单元cpu非常占用cpu资源。

在图3滤波器中,输入值首先经过整型运算,经过两次与相同数量级的整数反馈差分后,输入值xdi已很小,且这部分整型差分运算没有舍入误差。差分后的输入值xdi转换为浮点型数据后再与反馈的小数部分进行差分,由于输入值xdi非常小,差分后的结果仍然具有很高的精度。对比图1和图3中滤波器可以发现,图3中滤波器仅有3个乘法运算,图1中需4个乘法运算,图3相对于图1中滤波器增加了部分加减法运算,对于大部分嵌入式cpu而言,加减法运算并不会占用太多的时钟周期。

为验证本方案效果,对系统进行试验。运行平台为stm32f4,内核cotex-m4,工作频率168mhz,fpu功能开启。分别在double(64位)型和float(32位)型数据下对图1滤波器进行实验,在float型数据下对图3滤波器进行实验。从表1可以看出,本方法改进后的滤波器计算速率是原double型滤波器计算速率的8.38倍,而两者滤波精度一样。与采用float型的图1滤波器相比,虽然多占用了一定的cpu资源,但相对于其提升的精度效果,这部分多占用的资源是完全可以接受的。

表1各滤波器耗时比较

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1