一种适应流水线架构的中值滤波方法、装置及滤波器转让专利

申请号 : CN202010597238.2

文献号 : CN111953318B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 徐峰王利明李自明邵猛

申请人 : 上海定九康科技股份有限公司

摘要 :

本发明公开了一种适应流水线架构的中值滤波方法、装置及滤波器,包括S101:接收数值序列;S102:按照滤波窗口,形成第一数值子序列,找到其中的数值中值;S103:按照数值序列排列,滑动滤波窗口,使其移入一数值和移出一数值后,第一序列窗口内的第一数值子序列变为第二数值子序列;S104:将移入数值、移出数值与第一数值子序列中的数值中值进行比较,根据比较结果进行逻辑运算,获取第二数值子序列中的数值中值;S105:滑动滤波窗口,循环步骤S103~S104,直至数值序列滤波结束;S106:将数值中值依次保存,输出数值中值序列。本申请中的滤波算法,逻辑结构简单,避免维护复杂的数据结构,循环体内数据依赖性低,便于流水线化以及并行化,以实现提高快速计算的效果。

权利要求 :

1.一种适应流水线架构的中值滤波方法,其特征在于,包括:S101:接收待滤波的一组数值序列;

S102:按照预设尺寸为n的滤波窗口,从所述数值序列中获取对应个数的数值,形成第一数值子序列x0,x1,...,xn‑1,并从所述第一数值子序列中,找到这些数值中的数值中值m0;

S103:按照所述数值序列的排列,滑动所述滤波窗口,使其移入一数值xn和移出一数值x0后,所述滤波窗口内的第一数值子序列x0,x1,...,xn‑1变为第二数值子序列x1,x2,…,xn;

S104:将移入数值xn、移出数值x0与所述第一数值子序列中的数值中值m0进行比较,根据比较结果进行逻辑运算,获取所述第二数值子序列中的数值中值m1;根据比较结果进行逻辑运算的方法包括:

当xn==m0||(xn<m0&&x0<m0)||(xn>m0&&x0>m0)时,得出所述第二数值子序列中的数值中值m1=m0;

当xn>m0&&x0≤m0时,遍历x1到xn,搜索x1到xn中比m0大的最小的数,记为mt,并同时搜索x1到xn中比m0大的数的数量,记为cn;当cn<(n‑1)/2时,得出所述第二数值子序列中的数值中值为m1=m0,否则得出的数值中值为m1=mt;

当xn<m0&&x0≥m0时,遍历x1到xn,搜索x1到xn中比m0小的最大的数,记为mt,并同时搜索x1到xn中比m0小的数的数量,记为cn;当cn<(n‑1)/2时,得出所述第二数值子序列中的数值中值为m1=m0,否则得出数值中值为m1=mt;

S105:滑动所述滤波窗口,将所述第二数值子序列作为下一轮待处理数值子序列的第一数值子序列,下一轮待处理数值子序列作为所述第二数值子序列,循环步骤S103~S104,直至所述数值序列滤波结束;

S106:将所述滤波窗口每次输出的数值中值依次保存,输出数值中值序列。

2.一种适应流水线架构的中值滤波装置,采用如权利要求1所述的适应流水线架构的中值滤波方法,其特征在于,所述装置包括:接收模块、初始化模块、获取模块、处理模块、循环模块、输出模块;

所述接收模块被配置为接收待滤波的一组数值序列;

所述初始化模块被配置为按照预设尺寸为n的滤波窗口,从所述数值序列中获取对应个数的数值,形成第一数值子序列x0,x1,...,xn‑1,并从所述第一数值子序列中,找到这些数值中的数值中值m0;

所述获取模块被配置为按照所述数值序列的排列,滑动所述滤波窗口,使其移入一数值xn和移出一数值x0后,所述滤波窗口内的第一数值子序列x0,x1,...,xn‑1变为第二数值子序列x1,x2,...,xn;

所述处理模块被配置为将移入数值xn、移出数值x0与所述第一数值子序列中的数值中值m0进行比较,根据比较结果进行逻辑运算,获取所述第二数值子序列中的数值中值m1;根据比较结果进行逻辑运算的方法包括:当xn==m0||(xn<m0&&x0<m0)||(xn>m0&&x0>m0)时,得出所述第二数值子序列中的数值中值m1=m0;

当xn>m0&&x0≤m0时,遍历x1到xn,搜索x1到xn中比m0大的最小的数,记为mt,并同时搜索x1到xn中比m0大的数的数量,记为cn;当cn<(n‑1)/2时,得出所述第二数值子序列中的数值中值为m1=m0,否则得出的数值中值为m1=mt;

当xn<m0&&x0≥m0时,遍历x1到xn,搜索x1到xn中比m0小的最大的数,记为mt,并同时搜索x1到xn中比m0小的数的数量,记为cn;当cn<(n‑1)/2时,得出所述第二数值子序列中的数值中值为m1=m0,否则得出数值中值为m1=mt;

所述循环模块被配置为滑动所述滤波窗口,将所述第二数值子序列作为下一轮待处理数值子序列的第一数值子序列,下一轮待处理数值子序列作为所述第二数值子序列,循环使用所述获取模块和所述处理模块,直至所述数值序列滤波结束;

所述输出模块被配置为将所述滤波窗口每次输出的数值中值依次保存,输出数值中值序列。

3.一种滤波器,其特征在于,包括如权利要求2所述的适应流水线架构的中值滤波装置。

4.一种计算机电子产品,其特征在于,包括存储器和处理器;所述存储器用于存储程序代码;所述处理器用于调用所述程序代码,以执行如权利要求1所述的适应流水线架构的中值滤波方法。

5.一种计算机可读存储介质,其特征在于,包括程序代码,所述程序代码用于执行如权利要求1所述的适应流水线架构的中值滤波方法。

说明书 :

一种适应流水线架构的中值滤波方法、装置及滤波器

技术领域

[0001] 本发明涉及数据滤波处理技术领域,尤其涉及一种适应流水线架构的中值滤波方法、装置及滤波器。

背景技术

[0002] 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数值序列(一维)或数字图像(二维)中一点的值用该点的一个邻域
中各点值的中值代替。
[0003] 中值滤波算法广泛应用于信号处理、图像处理、自动控制等领域,用于信号基线的提取或者消除孤立的噪声点。例如,在心电信号处理中,经常会使用中值滤波算法提取基
线,然后将原始信号与基线相减,这一处理称为“除基线”。相比于其他滤波算法,中值滤波
由于其“按序挑选”的特点,通常对噪声、突变有更好的抗干扰性,因而得以广泛应用。
[0004] 然而,也正是由于“按序挑选”的特点,与一般的线性滤波算法相比,中值滤波算法具有较大的计算量,尤其当滤波窗口长度较大时。如果每次对长度为n的滑动窗口中的数据
都整个进行重新排序,排序算法采用堆排序或归并排序算法,则算法复杂度为O(nlog2
(n))。
[0005] 大多算法是利用前一次运算的中值结果和窗口内的数值,以及本次移入、移出的数值来减少重复的排序运算,从而获得更快的运算速度。其中最为常用的方法,是MoveSort
方法,该方法维护一个排好序的数组,每次移出一个旧数据移进一个新数据,通过二叉搜索
找到新数据的位置,插入新数据后,再对所有受影响的数据进行搬移以维护排序,最后再维
护一个数据索引的数组。尽管二叉搜索的算法复杂度是O(log2(n)),但之后的数据搬移以
及数据索引维护的算法复杂度都为O(n),因而MoveSort的算法复杂度为O(n)。其中,二叉搜
索由于存在数据依赖,运算难以流水线化,三个步骤总体加起来运算量比较大。还有一些算
法,例如HeapSort等方法,通过建立和维护更为复杂的数据结构(例如排序树)来实现快速
查找,获得了理论上小于O(n)的算法复杂度。但因为单次计算量比较大,只有当窗口长度较
大时,例如,n>300才能展现算法的优势。然而在许多算法应用中的窗口长度n<300已足够
用。

发明内容

[0006] 本申请实施例通过提供一种适应流水线架构的中值滤波方法、装置及滤波器,解决了现有技术中由于排序等方法前后操作存在较强的数据依赖,导致计算效率低下的问
题。利用简单的算法逻辑,避免维护复杂的数据结构,降低循环体内的数据依赖性,从而使
得算法实现能够被充分地流水线化以及并行化,充分利用流水线架构中各模块的并行性,
发挥流水线架构的优势,从而达到快速计算的效果。
[0007] 本申请第一方面提供了一种适应流水线架构的中值滤波方法,包括:
[0008] S101:接收待滤波的一组数值序列;
[0009] S102:按照预设尺寸为n的滤波窗口,从所述数值序列中获取对应个数的数值,形成第一数值子序列x0,x1,…,xn‑1,并从所述第一数值子序列中,找到这些数值中的数值中值
m0;
[0010] S103:按照所述数值序列的排列,滑动所述滤波窗口,使其移入一数值xn和移出一数值x0后,所述滤波窗口内的第一数值子序列x0,x1,…,xn‑1变为第二数值子序列x1,x2,…,
xn;
[0011] S104:将移入数值xn、移出数值x0与所述第一数值子序列中的数值中值m0进行比较,根据比较结果进行逻辑运算,获取所述第二数值子序列中的数值中值m1;根据比较结果
进行逻辑运算的方法包括:
[0012] 当xn==m0||(xnm0&&x0>m0)时,得出所述第二数值子序列中的数值中值m1=m0;
[0013] 当xn>m0&&x0≤m0时,遍历x1到xn,搜索x1到xn中比m0大的最小的数,记为mt,并同时搜索x1到xn中比m0大的数的数量,记为cn;当cn<(n‑1)/2时,得出所述第二数值子序列中的
数值中值为m1=m0,否则得出的数值中值为m1=mt;
[0014] 当xn数值中值为m1=m0,否则得出数值中值为m1=mt;
[0015] S105:滑动所述滤波窗口,将所述第二数值子序列作为下一轮待处理数值子序列的第一数值子序列,下一轮待处理数值子序列作为所述第二数值子序列,循环步骤S103~
S104,直至所述数值序列滤波结束;
[0016] S106:将所述滤波窗口每次输出的数值中值依次保存,输出数值中值序列。
[0017] 本申请第二方面提供了一种适应流水线架构的中值滤波装置,采用如第一方面所述的适应流水线架构的中值滤波方法,所述装置包括:接收模块、初始化模块、获取模块、处
理模块、循环模块、输出模块;
[0018] 所述接收模块被配置为接收待滤波的一组数值序列;
[0019] 所述初始化模块被配置为按照预设尺寸为n的滤波窗口,从所述数值序列中获取对应个数的数值,形成第一数值子序列x0,x1,…,xn‑1,并从所述第一数值子序列中,找到这
些数值中的数值中值m0;
[0020] 所述获取模块被配置为按照所述数值序列的排列,滑动所述滤波窗口,使其移入一数值xn和移出一数值x0后,所述滤波窗口内的第一数值子序列x0,x1,…,xn‑1变为第二数
值子序列x1,x2,…,xn。
[0021] 所述处理模块被配置为将移入数值xn、移出数值x0与所述第一数值子序列中的数值中值m0进行比较,根据比较结果进行逻辑运算,获取所述第二数值子序列中的数值中值
m1;根据比较结果进行逻辑运算的方法包括:
[0022] 当xn==m0||(xnm0&&x0>m0)时,得出所述第二数值子序列中的数值中值m1=m0;
[0023] 当xn>m0&&x0≤m0时,遍历x1到xn,搜索x1到xn中比m0大的最小的数,记为mt,并同时搜索x1到xn中比m0大的数的数量,记为cn;当cn<(n‑1)/2时,得出所述第二数值子序列中的
数值中值为m1=m0,否则得出的数值中值为m1=mt;
[0024] 当xn数值中值为m1=m0,否则得出数值中值为m1=mt;
[0025] 所述循环模块被配置为滑动所述滤波窗口,将所述第二数值子序列作为下一轮待处理数值子序列的第一数值子序列,下一轮待处理数值子序列作为所述第二数值子序列,
循环使用所述获取模块和所述处理模块,直至所述数值序列滤波结束;
[0026] 所述输出模块被配置为将所述滤波窗口每次输出的数值中值依次保存,输出数值中值序列。
[0027] 本申请第三方面提供了一种滤波器,包括如上述所述的适应流水线架构的中值滤波装置。
[0028] 本申请第四方面提供了一种计算机电子产品,包括存储器和处理器;所述存储器用于存储程序代码;所述处理器用于调用所述程序代码,以执行如第一方面中所述的适应
流水线架构的中值滤波方法。
[0029] 本申请第五方面提供了一种计算机可读存储介质,包括程序代码,所述程序代码用于执行如第一方面中所述的适应流水线架构的中值滤波方法。
[0030] 本申请实施例中提供的适应流水线架构的中值滤波方法、装置及滤波器,至少具有如下技术效果:
[0031] 1、本申请中实现的滤波算法逻辑简单,避免了维护复杂的数据结构;滤波算法循环体内的数据依赖性低,因而算法实现后能够被充分地流水线化和并行化,充分发挥流水
线架构的优势,便于充分利用流水线架构处理器中各模块单元的并行性,从而实现快速计
算的效果。
[0032] 2、本申请中实现的滤波算法根据数据分三种情况进行处理,其中,情况一无需计算,直接得出结果,发生概率为50%;情况二、情况三的算法复杂度为O(n),发生概率均为
25%。由于情况一无需计算,因而大大减少了计算量。
[0033] 3、本申请中实现的滤波算法在进行数值滤波时,对于情况二和情况三,只需要对数值子序列,按顺序进行一次比较操作,避免了很多基于搜索树算法中的强数据依赖性,因
而能够被高度的流水线化。
[0034] 4、本申请中实现的滤波算法循环体S103~S104中,并没有做排序,因而不需要维护排序数组以及索引数组类似的数据结构,因而降低了计算量;本算法也没有维护搜索树
以及索引数组类似的数据结构。
[0035] 5、本申请中实现的滤波算法可以满足大多数信号处理场景中对于滤波器的需求,因而非常具有实用性,且非常适应于流水线架构处理器。

附图说明

[0036] 图1为本申请实施例一中适应流水线架构的中值滤波方法的流程图;
[0037] 图2为本申请实施例一中中值滤波方法数值序列示意图;
[0038] 图3为本申请实施例一中中值在排序序列中的位置示意图;
[0039] 图4为本申请实施例一中k位值在排序序列中的位置的示意图;
[0040] 图5为本申请实施例二中一种适应流水线架构的中值滤波装置结构框图。

具体实施方式

[0041] 为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是
本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员
在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0042] 本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措
辞“包括”是指存在所述特征、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或
多个其他特征、步骤、操作、元件、组件和/或它们的组。
[0043] 下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。
[0044] 实施例一
[0045] 参考图1所示,本实施例提供了一种适应流水线架构的中值滤波方法,其包括如下步骤。
[0046] S101:接收待滤波的一组数值序列。
[0047] 在一种实施例中,进行信号处理时,接收传输层中待处理的模拟信号,后将模拟信号转换为数字信号后,形成一组数值序列。另一种实施例中,直接接受一组数字信号。本实
施例中,进行滤波处理时,直接接收一组待处理的数值序列。
[0048] S102:照预设尺寸为n的滤波窗口,从数值序列中获取对应个数的数值,形成第一数值子序列x0,x1,…,xn‑1,并从第一数值子序列中,找到这些数值中的数值中值m0。
[0049] 本步骤S102是本算法的滤波初始化操作。
[0050] 在一种实施例中,将第一数值子序列中的数值由小到大依次排序,从而将第一数值子序列中的中间位数值作为数值中值。可将第一数值子序列中的数值x0,x1,…,xn‑1,按照
由小到大进行排序,数值m0在排好序的数列中位于中间位置,其左侧有(n‑1)/2个数,其右
侧也有(n‑1)/2个数。在本实施例中,n为奇数。
[0051] 另一种实施例中,在初始时,将滤波窗口中的所有数值初始化为0,此时,滤波窗口中的数值中值为0,然后使用后续说明的S103~S104的步骤进行n次循环处理,每次循环移
入一个数值进行滤波,当n次移动结束后,此时输出的结果即为x0,x1,…,xn‑1的中值,即完成
了中值滤波的初始化操作。
[0052] S103:按照数值序列的排列,滑动滤波窗口,使其移入一数值xn和移出一数值x0后,滤波窗口内的第一数值子序列x0,x1,…,xn‑1变为第二数值子序列x1,x2,…,xn。
[0053] 在一种实施例中,将滤波窗口滑动于数值序列上,即通过指定子序列的起始位置来滑动窗口。参考图2所示,在处理完第一数值子序列x0,x1,…,xn‑1之后,窗口向右滑动一
位,x1作为子序列的起始位置,x0从左侧移出了窗口,而xn从右侧移入了窗口。
[0054] 在另一种实施例中,滤波窗口固定,通过依次将第二数值子序列中的数值填入该窗口中来更新子序列。
[0055] S104:将移入数值xn、移出数值x0与第一数值子序列中的数值中值m0进行比较,根据比较结果进行逻辑运算,获取第二数值子序列中的数值中值m1。
[0056] 将移入数值xn、移出数值x0与第一数值子序列中的数值中值m0进行比较,可以理解为,本实施例中的滤波运算是在滤波窗口进行有效滤波处理的基础上,根据前一次有效的
滤波运算基础上实现的,以此提高运算速率以及简化运算逻辑。
[0057] 根据比较结果进行逻辑运算方法包括如下情况。
[0058] 情况(1)当xn==m0||(xnm0&&x0>m0)时,得出第二数值子序列中的数值中值m1=m0。
[0059] 可以理解为,移入数值等于第一数值子序列的数值中值,或者移入数值小于第一数值子序列的数值中值且移出数值小于第一数值子序列的数值中值,或者移入数值大于第
一数值子序列的数值中值且移出数值大于第一数值子序列的数值中值时,第二数值子序列
中的数值中值等于第一数值子序列中的数值中值。
[0060] 如果xnm0且
x0>m0,即移出的数值在m0的右侧,移进的数值也在m0的右侧,并不影响m0在第二数值子序列
的数值比较位置,m0仍为数值中值,即m1=m0。如果xn==m0,即移进的数值与m0相等,也同样
不影响m0在第二数值子序列的数值比较位置,m0仍为数值中值,即m1=m0。
[0061] 在此种情况下,无需进一步计算,直接得到结果。根据具体的应用场景。输入序列可能有统计规律或者没有统计规律,就普遍的统计意义上来说,情况(1)的发生概率为
50%。
[0062] 情况(2)当xn>m0&&x0≤m0时,遍历x1到xn,搜索x1到xn中比m0大的最小的数,记为mt,并同时搜索x1到xn中比m0大的数的数量,记为cn;当cn<(n‑1)/2时,得出第二数值子序列中
的数值中值为m1=m0,否则得出的数值中值为m1=mt。
[0063] 可以理解为,移入数值大于第一数值子序列的数值中值且移出数值小于等于第一数值子序列的数值中值时,根据本实施例中的逻辑算法,获取第二数值子序列中的数值中
值。
[0064] 进一步地,如果xn>m0且x0≤m0,即移出一个小于等于第一数值子序列中的数值中值m0的数,移进一个大于第一数值子序列中的数值中值m0的数。如果不考虑数值相等的情
况,那么新的中值m1一定是x1到xn中比m0大的最小的数,记为mt,则有m1=mt。然而考虑到可
能存在有数值相等的情况,所以记录x1到xn中比m0大的数的数量为cn。如果cn<(n‑1)/2,则
说明图3中m0的右侧一定还有等于m0的数,因而中值不变,即m1=m0。
[0065] 就普遍的统计意义上来说,情况(2)的发生概率为25%,对x1到xn这n个数进行一遍搜索,对每个数执行2次比较和1次累加操作。
[0066] 情况(3)当xn数值中值为m1=m0,否则得出数值中值为m1=mt。
[0067] 可以理解为,移入数值小于第一数值子序列的数值中值且移出数值大于等于第一数值子序列的数值中值时,根据本实施例中的逻辑算法,获取第二数值子序列中的数值中
值。
[0068] 进一步地,如果xn况,那么新的中值m1一定是x1到xn中比m0小的最大的数,记为mt,则有m1=mt。然而考虑到可
能存在有数值相等的情况,所以记录x1到xn中比m0小的数的数量为cn。如果cn<(n‑1)/2,则
说明图3中m0的左侧一定还有等于m0的数,因而中值不变,即m1=m0。
[0069] 就普遍的统计意义上来说,情况(3)的发生概率为25%。本实施例中,对x1到xn这n个数进行一遍搜索,对每个数执行2次比较和1次累加操作。
[0070] 由于情况(1)、(2)、(3)发生的概率分别是50%、25%、25%,因此平均来说,本实施例中的算法,单次滤波只需执行n/2次循环,算法复杂度为O(n),本实施例中,每次循环包含
2次比较和1次累加操作。
[0071] 由于算法只进行一次确定性的顺序搜索,避免了很多基于搜索树算法中的强数据依赖性,因而本算法能够被高度的流水线化。
[0072] S105:滑动滤波窗口,将第二数值子序列作为下一轮待处理数值子序列的第一数值子序列,下一轮待处理数值子序列作为第二数值子序列,循环步骤S103~S104,直至数值
序列滤波结束。
[0073] S106:将滤波窗口每次输出的数值中值依次保存,输出数值中值序列。
[0074] 中值是数值子序列排序后中间位置的值。由本实施例衍生出一种提取任意指定位置的滤波方法,如图4所示,如果是取从小到大排序第k个位置的数,称为k位值滤波,那么中
值滤波即为当k=(n‑1)/2时的一个特例。该方法包括如下步骤。
[0075] S201:接收待滤波的一组数值序列。
[0076] S202:按照预设尺寸为n的滤波窗口,从数值序列中获取对应个数的数值,形成第一数值子序列x0,x1,…,xn‑1;并从第一数值子序列中,找到这些数值中的从小到大排序为第
k位置的数m0。
[0077] 例如,对第一数值子序列x0,x1,…,xn‑1中的数值进行排序,找到这些排序后的数值中第k位置的数m00。
[0078] S203:按照数值序列的排列,滑动滤波窗口,使其移入一数值xn和移出一数值x0后,滤波窗口内的第一数值子序列x0,x1,…,xn‑1变为第二数值子序列x1,x2,…,xn。
[0079] S204:将移入数值xn、移出数值x0与第一数值子序列中的k位值m0进行比较,根据比较结果进行逻辑运算,获取第二数值子序列中的k位值m1。
[0080] 根据比较结果进行逻辑运算的方法包括:
[0081] 情况1:当xn==m0||(xnm0&&x0>m0)时,得出第二数值子序列中的k位值m1=m0。
[0082] 情况2:当xn>m0&&x0≤m0,遍历x1到xn,搜索x1到xn中,比m0大的最小的数mt,并同时搜索x1到xn,比m0大的数的数量cn;当cn<(n‑k)时,得出第二数值子序列中的数值k位值为m1
=m0,否则得出的k位值为m1=mt。
[0083] 情况3:当xn=m0,否则得出的k位值为m1=mt。
[0084] S205:滑动滤波窗口,将第二数值子序列作为下一轮待处理数值子序列的第一数值子序列,下一轮待处理数值子序列作为第二数值子序列,并循环步骤S203~S204,直至数
值序列滤波结束。
[0085] S206:将上述滑动滤波窗口每次输出的k位值依次保存,输出k位值序列。
[0086] 由本实施例还可以衍生出另一种滤波方法,比如将n为偶数情况下的中值滤波定义为取从小到大排列的第n/2个数或定义为第n/2+1个数,按照上述k位值滤波的方法,自然
也就扩展到了n为偶数的情况。
[0087] 此外,在一些应用场景中,可以不考虑输入序列中数值相等的情况,或者可以接受近似中值滤波的结果,那么可以将本算法中cn的计数及判断去除,从而进一步提高运算速
度。
[0088] 实施例二
[0089] 参考图6所示,本实施例提供了一种适应流水线架构的中值滤波装置,采用如实施例一的适应流水线架构的中值滤波方法,该装置包括:接收模块101、初始化模块102、获取
模块103、处理模块104、循环模块105、输出模块105。
[0090] 接收模块101被配置为接收待滤波的一组数值序列。
[0091] 初始化模块102被配置为按照预设尺寸为n的滤波窗口,从数值序列中获取对应个数的数值,形成第一数值子序列x0,x1,…,xn‑1,并从第一数值子序列中,找到这些数值中的
数值中值m0。
[0092] 获取模块103被配置为按照数值序列的排列,滑动所述滤波窗口,使其移入一数值xn和移出一数值x0后,所述滤波窗口内的第一数值子序列x0,x1,…,xn‑1变为第二数值子序
列x1,x2,…,xn。
[0093] 处理模块104被配置为将移入数值xn、移出数值x0与所述第一数值子序列中的数值中值m0进行比较,根据比较结果进行逻辑运算,获取所述第二数值子序列中的数值中值m1;
根据比较结果进行逻辑运算的方法包括如下:
[0094] 当xn==m0||(xnm0&&x0>m0)时,得出第二数值子序列中的数值中值m1=m0;
[0095] 当xn>m0&&x0≤m0,遍历x1到xn,搜索x1到xn中,比m0大的最小的数mt,并同时搜索x1到xn中,比m0大的数的数量cn;当cn<(n‑1)/2时,得出第二数值子序列中的数值中值为m1=
m0,否则得出的数值中值为m1=mt;
[0096] 当xnm0,否则得出数值中值为m1=mt。
[0097] 循环模块105被配置为滑动所述滤波窗口,将第二数值子序列作为下一轮待处理数值子序列的第一数值子序列,下一轮待处理数值子序列作为第二数值子序列,循环使用
获取模块和处理模块,直至数值序列滤波结束;
[0098] 输出模块106被配置为将滤波窗口每次输出的数值中值依次保存,输出数值中值序列。
[0099] 实施例三
[0100] 本实施例提供了一种滤波器,包括如实施例2的适应流水线架构的中值滤波装置。
[0101] 在一种应用实施例中,滤波器采用TI公司的TMS320C67XX系列DSP芯片上实现本实施例中的算法,用于处理浮点(float)型精度数据的中值滤波。该DSP芯片是一款单核处理
器,至少包括获取单元、比较单元、计算单元,其中,获取单元获取数值,比较单元进行浮点
数的比较操作,计算单元进行加减算术操作。
[0102] 本实施例中通过在芯片上实现,并经过代码优化,能够达到平均每次循环只需要1个clk的性能,平均单次滤波执行n/2次循环。经多次试验,对于n=152长度的滤波器,本实
施例运行一次滤波平均只需要118个clk。而现有利用HeapSort算法在同款芯片上实现并经
过充分的代码优化,对于滤波器的长度n=152时,利用HeapSort算法一次滤波需要192个
clk。而同样算法复杂度为O(n)的MoveSort算法在同款芯片上实现并经过充分的代码优化
后,对于滤波器的长度n=152时,利用MoveSort算法一次滤波需要445个clk。
[0103] 不同于MoveSort算法,本算法在运算过程中并没有做排序,因而不需要维护排序数组以及索引数组这样的数据结构,因而本算法远优于MoveSort的计算量。不同于
HeapSort算法,本算法也没有维护搜索树以及索引数组这样的数据结构。本算法仅仅做了
比较和计数操作,执行确定性的从x1到xn一次搜索。尽管HeapSort算法的算法复杂度更优,
但是同样在TMS320C67XX型DSP芯片上实现和代码优化的运行结果来看,本算法在n<300的
范围内都优于HeapSort算法的速度。而n<300已经可以满足大多数信号处理场景中对于中
值滤波器的需求。因而本发明的算法非常具有实用性,且非常适应于流水线架构处理器。
[0104] 实施例四
[0105] 本实施例提供了一种计算机电子产品,包括存储器和处理器;存储器用于存储程序代码;处理器用于调用程序代码,以执行如实施例1的适应流水线架构的中值滤波方法。
[0106] 本实施例还提供了一种计算机可读存储介质,包括程序代码,程序代码用于执行如实施例1中的适应流水线架构的中值滤波方法。
[0107] 本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于计算机可读存储介质中,存储介
质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random Access 
Memory)、磁盘或光盘等。
[0108] 另外,本发明的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个功能或步骤的电路。如本说明书实施例所示实施例揭示的方法可以应用于处理器
中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过
程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完
成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、
网络处理器(Net work Processor,NP)等;还可以是数字信号处理器(Digital 
SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,
ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑
器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书实施例中的
公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何
常规的处理器等。结合本说明书实施例所公开的方法的步骤可以直接体现为硬件译码处理
器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随
机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本
领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件
完成上述方法的步骤。
[0109] 实施例三中的应用例提供的芯片为一种计算机可读存储介质,计算机可读存储介质存储一个或多个程序,一个或多个程序当被包括多个应用程序的电子系统执行时,使得
电子系统执行实施例一的方法。在此不再赘述。
[0110] 计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。
计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动
态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除
可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD‑ROM)、
数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备
或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算
机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0111] 上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可
以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放
器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何
设备的组合。
[0112] 另外,本发明的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本发明的方法和/或技术方案。
而调用本发明的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过
广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据程序指令运行的计算
机设备的工作存储器中。在此,根据本发明的一个实施例包括一个装置,该装置包括用于存
储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被
该处理器执行时,触发该装置运行基于前述根据本发明的多个实施例的方法和/或技术方
案。
[0113] 本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流
程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序
指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产
生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实
现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0114] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指
令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或
多个方框中指定的功能。
[0115] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或
其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一
个方框或多个方框中指定的功能的步骤。
[0116] 尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优
选实施例以及落入本发明范围的所有变更和修改。
[0117] 显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围
之内,则本发明也意图包含这些改动和变型在内。