一种有限冲激响应滤波器的设计方法

文档序号:7534512阅读:224来源:国知局

专利名称::一种有限冲激响应滤波器的设计方法
技术领域
:本发明涉及一种基于FPGA(现场可编程门阵列)和分布式算法的FIR(有限冲激响应)滤波器设计方法,属于FIR滤波器
技术领域
。技术背景FIR滤波器在科学研究和实际生产中有着非常重要的作用,随着电子设计自动化技术的发展,^用FPGA技术进行FIR滤波器的设计已成为可能,由于其集成化高,性能稳定等优点,这种技术越来越多的得到推广和应用。目前基于FPGA的FIR滤波器设计主要采用分布式算法,由于这种算法中引用了查找表技术,因此比传统的乘累加方法具有更快的运算速度,很好的满足/实际高速运算的需要。但同时,这种算法也因査找表的引入而消耗了大量FPGA的内部资源,使得设计成本变高,特别是对于高阶FIR滤波器,这个问题更为突出。为了解决这一问题,一般通常采用分割查找表的方法,通过降低滤波器阶数,化整为零,来减少资源的使用,但实际上解决的效果有限,资源开销仍然较大,设计成本依然较高。
发明内容针对现有FIR滤波器设计屮存在的的资源开销较大的问题,本发明提供一种资源开销小、设计成本低的有限冲激响应(FIR)滤波器的设计方法。本发明的有限冲激响应(FIR)滤波器的设计方法是将FIR滤波器的每个系数以二进制形式表示,展开成一个系数阵列,然后对此阵列进行拆分,生成若干具有特殊规律的新子阵列,每个子阵列都对应着一个子査找表,每个子查找表的输出值,直接由其输入数据的相应位构成,从而不需要查找表单元(lut),最后,将每个子査找表的输出进行累加,即得总査找表的输出值。具体步骤如下将一个m+l阶的FIR滤波器的每个系数以二进制形式表示,展开成一个如下所示的系数阵列cmWcm["-1]…CJl]c[o]c,—,["]cm—J"-1]...Cm—Jl]cm—,[o]1]...c,[o]C。["]Q"-1]...C0[l]c'。[o]每个系数用二进制展开后位宽是n+l,其中阵列屮的每个元素的值只能取o或1,对此系数阵列,做如下处理(1)产生新集合a:对阵列中的(CJ"],C,,卜,M,…C,["],C。["]f列,根据其中所含元素值为1的项的位置的不同,将该列拆分成数个每列中只含一个元素值为1的项的新子列,从而组成一个新的集合,该集合中的新了列的个数应与此列中元素值为1的项的个数相同;b:重复上述操作,应用到每列当中,从而构成n+l个新集合;c:从这n+l个新集合中选取了列数最多的一个,假设其中含w个子列,将其他集合中了-列个数不足w个的用所有元素值均为零的子列补齐,使得每个新集合中子列的个数都是w;(2)产生新子阵列a:从各个新集合中任意选取一个子列,从而组成一个新的子阵列,并将已选取的子列从原各个集合中清除;b:重复上述步骤w次,从时组成W个新的子阵列;(3)输出子阵列査找表对每个新的子阵列,艽查找表的输入taWe—^为m+l位,输出toWe—ow为n+l位,假设k为输出值中0、间的任意一位,则其对应着子阵列中从右向左第k+l列,假设该列中在元素值为1的项下面的元素值为0的项的个数为s,则有即由输入数据相应位的值直接得到输出数据相应位的值,每个子阵列査找表的输入值与原总阵列查找表的输入值相同,不再需要lut(査找表单元),依据此规律,从而直接由输入得到输出数据。(4)输出原总阵列查找表由上述操作,可得到每个子阵列査找表的输出值,共w个,最后将这w个的输出值累加起来,即得原总阵列查找表的输出值。其余操作按照现有的分布式算法进行。本发明可很好的减少査找表单元(lut)的使用(w越小,改进效果越明显),从而可以非常有效的节约FPGA(现场可编程门阵列)内部资源,简化设计过程,降低设计成本,提高设计效率。具体实施方式实施例以一个16阶的FiR滤波器为例,来具体阐述本发明的方法。将其所有系数以二进制的形式展开,构成一"系樂0010101100111010100010000100o丄丄o00010010000000010100o丄oo10000000oo丄o010011000101100010010000100000010000000101000100001000100011000100100000薩0100010001101010100010011000000000100000010101000100110010100010001001100001000110010000010101000010000110101000下面按本发明的设计方法进行处理1产生新集合(1)对左起第一列(0100010000100010f,下四个新子列(0100000000000000)7',按照其中元素值为1的项位置的不同,拆分成以四项,从而构成一个集合(2)同样的方法,作用到其他各列,从而形成相应的集合,从左到右,依次是:第2列第3列{(0000000000000100/,(0000000000000001f};第4列{第5列{第6列第7列第8列第9列第14列{(0100000000000000f,(00001OOOOOOOOOOO)'',(0000000000100000)第15歹!j:{(1000000000000000)7',(0100000000000000)7,(0000000100000000)(3)由以上集合可知,含子列最多的集合其f5,对w小于5的集合进行补"全零子列"(即所有元素值均为零的列)操作,如最左边的一列(0100010000100010f,其集合相应变作(0000000000000000)'},经过上述操作后,每个新集合所含的子列数均是52产生新子阵列(1)从各个集合中任意选取一个子列,从而组成一个新的子阵列,如形成:1010101100111010000000000100010000010000000000010100010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000为保证不重复选取,选到的子列要从原集合中消去。(2)依照这种方法进行下去,最后得到5个新的子阵列:000000000000000000001000000000100000001000000000000000000000000000100100110001011000000100001000000100000001000001000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001000000001000000011000100000000100001000100011000000100010001100000100000011000000000100000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000001000000000000101000001000000000000000000001000100010001001010000000100000000100001001000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000100000011000000001000000000101010000100000101010003子阵列查找表的输出以第一个子阵列为例不妨设此处1^=3,则其对应第四列(从右向左),其元素值为l的项下面的元素值为0的项的个数是15,于是有ta6/e—owf[3]=to6/e—5],依据此规律,可得到第一子阵列查找表的输出值为,a6/e—oW=(fcf6/e—5],fa6/e—/"[12],ta6/e—5],tor6/e—3],to6/e—5],ta6/e_/"[12],to6/e—5],to6/e—5],to6/e—z'"[12],to6/e—/"[14],励/e—5],ta6/e—5],to6/e—5],fa6/e—,4],ta6/e—5],励/e—3]}由输入数据相应位的值直接便得到输出数据的值。4原总阵列查找表的输出依据步骤3中的方法,分别得到了五个子阵列的查找表输出值,分别记作toWe——1,toWe—oirf_2,—owf—3,—oW—4,toWe—ow/1—5,于是,最后原总阵列查找表的输出可得toWe_owf—啤=—owf—1+,aWe_ow/_2+——3+—om/"—4+toWe—_5。其余操作按照现有的分布式算法进行。通过这种方法,从而有效的节约了FPGA内部资源的使用,降低了设计成本。权利要求1.一种有限冲激响应滤波器的设计方法,其特征在于,该方法是将有限冲激响应滤波器的每个系数以二进制形式表示,展开成一个系数阵列,然后对此阵列进行拆分,生成若干具有特殊规律的新子阵列,每个子阵列都对应着一个子查找表,每个子查找表的输出值,直接由其输入数据的相应位构成,最后,将每个子查找表的输出进行累加,即得总查找表的输出值;具体步骤如下将一个m+1阶的FIR滤波器的每个系数以二进制形式表示,展开成一个如下所示的系数阵列Cm[n]Cm[n-1]…Cm[1]CmCm-1[n]Cm-1[n-1]…Cm-1[1]Cm-1C1[n]C1[n-1]…C1[1]C1C0[n]C0[n-1]…C0[1]C0每个系数用二进制展开后位宽是n+1,其中阵列中的每个元素的值只能取0或1,对此系数阵列,做如下处理(1)产生新集合a对阵列中的(Cm[n],Cm-1[n],…C1[n],C0[n])T列,根据其中所含元素值为1的项的位置的不同,将该列拆分成数个每列中只含一个元素值为1的项的新子列,从而组成一个新的集合,该集合中的新子列的个数应与此列中元素值为1的项的个数相同;b重复上述操作,应用到每列当中,从而构成n+1个新集合;c从这n+1个新集合中选取子列数最多的一个,假设其中含w个子列,将其他集合中子列个数不足w个的用所有元素值均为零的子列补齐,使得每个新集合中子列的个数都是w;(2)产生新子阵列a从各个新集合中任意选取一个子列,从而组成一个新的子阵列,并将已选取的子列从原各个集合中清除;b重复上述步骤w次,从而组成w个新的子阵列;(3)输出子阵列查找表对每个新的子阵列,其查找表的输入table_in为m+1位,输出table_out为n+1位,假设k为输出值中0~n间的任意一位,则其对应着子阵列中从右向左第k+1列,假设该列中在元素值为1的项下面的元素值为0的项的个数为s,则有table_out[k]=table_in[s]即由输入数据相应位的值直接得到输出数据相应位的值,每个子阵列查找表的输入值与原总阵列查找表的输入值相同,依据此规律,直接由输入得到输出数据;(4)输出原总阵列查找表由上述操作,得到每个子阵列查找表的输出值,共w个,最后将这w个的输出值累加起来,即得原总阵列查找表的输出值。全文摘要本发明公开了一种有限冲激响应滤波器的设计方法,是将FIR滤波器的系数以二进制形式表示,展成一系数阵列,然后对此阵列进行拆分,生成若干具有特殊规律的新子阵列,每个子阵列都对应着一个子查找表,每个子查找表的输出值,直接由其输入数据的相应位构成,从而不需要查找表单元(lut),最后,将每个子查找表的输出进行累加,即得总查找表的输出值。本发明可很好的减少lut的使用,从而可以非常有效的节约FPGA内部资源,简化设计过程,降低设计成本,提高设计效率。文档编号H03H17/02GK101150306SQ20071011325公开日2008年3月26日申请日期2007年10月24日优先权日2007年10月24日发明者昆王,袁东风申请人:山东大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1