主要内容

优化的定点FIR滤波器

这个例子展示了如何优化定点FIR滤波器。优化可以参考滤波器响应的特性,如阻带衰减或达到特定规格所需的比特数。这种功能对于目标硬件的用户特别有用,这些硬件有许多特定字长的可配置系数,或者通常在asic和fpga上发现的情况下,有很大的设计空间可以探索。硬件设计者通常可以用更少的位来权衡更多的系数,或者相反,以优化不同的asic或fpga。

这个例子说明了基于噪声整形过程的各种技术,产生优化的定点FIR滤波器系数。这个例子展示了如何:

  • 最小化系数字长,

  • 约束系数字,

  • 最大化阻带衰减。

理论背景

噪声整形算法本质上是将量化噪声移出定点FIR滤波器的一个关键频带(通常是阻带),代价是在其他频带增加它。下面的框图说明了噪声整形的过程。本质上,滤波器系数通过一个类似于数字滤波器的系统,但中间有一个量化器。该系统计算每个系数的量化误差,然后将误差通过由b1、b2和b3系数定义的简单IIR高通滤波器。“round”块将输入四舍五入到最接近的量化值。然后,将量化后的值从原始浮点值中减去。每个延迟块的初始状态值可以设置为-LSB和+LSB之间的随机噪声。

系统的输出是新的、量化的和噪声形状的滤波器系数。通过对延迟块中的不同随机初始状态重复此过程多次,可以产生不同的滤波器。

最小化系数字长

首先,我们要确定满足单级或多级设计规范的最小字长定点FIR滤波器。我们以半带滤波器为例,其归一化过渡宽度为.08,阻带衰减为59 dB。Kaiser窗口设计产生91个双精度浮点系数以满足规范要求。

TW=.08;%过渡宽度Astop=59;阻带衰减(dB)f = fdesign.halfband (“TW,Ast”,TW,Astop);Hd=设计(f,“kaiserwin”);

为了建立基线,我们将过滤器的“算术”属性设置为“固定”,并通过迭代系数的字长,直到找到符合规范的最小值,从而对过滤器进行量化。或者,我们可以使用minimizecoeffwl()来加速这个过程。基线定点滤波器包含91个17位系数。

Hqbase=最小净水(Hd,...“MatchRefFilter”符合事实的“NoiseShaping”假的,...“阿斯托尔”, 0);% 91 17位系数,停止= 59.1 dB

17位字长对许多硬件目标不具吸引力。在某些情况下,我们可以通过仅使用16位系数来折衷。但是请注意,由于滤波器的最大阻带衰减仅为58.8 dB,而不是期望的59 dB,因此不再严格满足原始规范。

Hq1=复制(Hqbase);Hq1.coefwordlength=16;%91 16位系数,Astop=58.8 dBm1=测量值(Hq1)% #好吧
m1=采样率:N/A(归一化频率)通带边缘:0.46 3-dB点:0.49074 6-dB点:0.5阻带边缘:0.54通带纹波:0.017157 dB阻带衰减:58.8741 dB过渡宽度:0.08

或者,我们可以设置一个公差来控制可接受的阻带误差。例如,用0.15 dB的阻带容限,我们可以节省3位,得到一个具有91个14位系数的滤波器。

Hq2=最小净水(Hd,...“MatchRefFilter”符合事实的“NoiseShaping”假的,...“阿斯托尔”,酒精含量);% 91 14位系数,停止= 58.8 dB

系数字长的节省是以定点设计不再满足规格为代价的。容忍度因应用程序的不同而不同,但在许多情况下,这种策略的吸引力可能有限。我们可以通过放松“MatchRefFilter”限制来使用另一种自由度。通过设置'MatchRefFilter'属性为false,我们不再尝试匹配Hd的过滤器顺序(最小顺序设计)或过滤器过渡宽度(固定顺序设计)。允许重新设计中间浮点滤波器的结果是固定点滤波器满足93 13位系数的规格。与参考定点设计相比,我们节省了4位,但最终增加了2个(1个非零)系数。

Hq3 = minimizecoeffwl(高清...“MatchRefFilter”假的,“NoiseShaping”、假);% 93 13位系数

更好的解决方案是使用噪波整形来最大化量化滤波器的阻带衰减。噪波整形过程是随机的。您可能希望尝试使用“NTrials”选项和/或初始化RAND以再现以下结果。由于默认情况下“MatchRefFilter”为假,而“NoiseShaping”为真,因此我们可以n省略它们。优化的定点滤波器符合规格,系数为91 13位。这表示在系数数目相同的参考定点设计上,可节省4位。

Hq4 = minimizecoeffwl(高清“Ntrials”10);% 91 13位系数hfvt = fvtool (Hqbase Hq4,“ShowReference”,“关闭”,“颜色”,“白色”);传奇(hfvt“17-bit参考滤波器”,“13位噪声成形滤波器”);

作为在阻带外成形噪声的折衷,噪声成形滤波器的通带纹波略微增加,这通常不是问题。还请注意,在应用噪声整形后,通带纹波与频率之间没有简单的关系。

轴([0 0.5060 -0.0109 0.0109])

约束系数字长

我们之前已经看到,通过将minimizecoeffwl()方法的“MatchRefFilter”参数设置为“false”,我们可以在更小的系数wordlength中权衡更多的系数(或使用固定过滤顺序的设计的较大过渡宽度)。现在,我们以多级(3级)8:1小数为例,展示如何在最小阶设计中进一步控制这种折衷:

调频= fdesign.decimator (8,“低通”,“Fp,置,美联社,Ast”, 0.1, 0.12, 70);嗯=设计(fm,“多级”,“nstages”3);

注意:以下命令是计算密集型的,可能需要几分钟来运行。

我们首先匹配浮点设计的顺序,得到满足规格的噪声型定点滤波器:

  • 第一阶段的7个15位系数,

  • 10第二级的13位系数,

  • 65第三级的17位系数。

Hmref=最小有效值(Hm,“MatchRefFilter”,对);

通过增加过滤顺序,我们可以将系数wordlength减少为:

  • 9第一级的9位系数,

  • 第二阶段的10个12位系数,

  • 第三阶段的65个15位系数。

Hq5 = minimizecoeffwl(嗯,“MatchRefFilter”、假);

为了更好地控制最终的单词长度,我们可以使用constraincoeffwl()方法。对于多阶段设计,每个阶段的字长可以单独限制。例如,我们限制每个阶段分别使用10位、12位和14位。约束设计满足以下规格要求:

  • 第一阶段有8个10位系数,

  • 第二阶段的12位系数,

  • 第三阶段的68个14位系数。

WL=[101214];Hqc=约束系数(Hm,WL);

最大化阻带衰减

当为具有若干特定字长可配置系数的货架过滤引擎(assp)设计时,最好在给定的指令和受限制的字长下使滤波器的阻带衰减最大化。在下一个例子中,我们希望获得69 dB的阻带衰减与70阶半带小数,而使用14位来表示系数。

fh=设计抽取器(2,“halfband”,“N, Ast”、70、69);Hb1 =设计(跳频,“等波纹”);
警告:此设计将生成一个MFILT对象,该对象将在未来的版本中被删除。要生成一个等效的System对象,请将“SystemObject”参数设置为true。Hs = design(D,…,'SystemObject',true)

如果我们简单地量化带有14位系数的滤波器,我们只得到62.7 dB的衰减。

Hb1.算术=“固定”;Hb1。CoeffWordLength = 14;mb1 =测量(Hb1)% #好吧
mb1 =采样率:N/A(归一化频率)通带边缘:0.44518 3-dB点:0.48816 6-dB点:0.5阻带边缘:0.55482通带纹波:0.010552 dB阻带Atten过渡宽度:0.10963

通过对阻带噪声的整形,我们可以将衰减提高近1.5 dB,达到64.18 dB,但仍然不能满足规格要求。

Hbq1=最大化带(Hb1,14);mq1=测量值(Hbq1)% #好吧
mq1 =采样率:N/A(归一化频率)通带边缘:0.44373 3-dB点:0.48811 6-dB点:0.5阻带边缘:0.55529通带纹波:0.01064 dB阻带Atten转换宽度:0.11156

下一步是过度设计衰减为80 dB的浮点滤波器。我们付出的代价是以更大的过渡宽度的形式增加衰减。14位非噪声形状滤波器的衰减从62.7 dB提高到66.2 dB,但仍不符合规范要求。

fh.Astop=80;Hb2=设计(fh,“等波纹”); Hb2.算术=“固定”;Hb2。CoeffWordLength = 14;mb2 =测量(Hb2)% #好吧
警告:此设计将生成一个MFILT对象,该对象将在未来的版本中被删除。要生成一个等效的System对象,请将“SystemObject”参数设置为true。Hs = design(D,…,'SystemObject',true) mb2 = Sample Rate: N/A(归一化频率)通频带边:0.43464 3-dB点:0.48704 6-dB点:0.5 Stopband Edge: 0.56536通频带纹波:0.0076847 dB Stopband Atten过渡宽度:0.13073

噪声整形技术使滤波器的阻带衰减从66.2 dB提高到69.4 dB,提高了3 dB以上,最终达到了要求。

Hbq2 = maximizestopband (Hb2 14);mq2 =测量(Hbq2)% #好吧
mq2 =采样率:N/A(归一化频率)通带边缘:0.43584 3-dB点:0.4871 6-dB点:0.5阻带边缘:0.56287通带纹波:0.0053253 dB阻带Atten过渡宽度:0.12703

与浮点设计相比,定点滤波器的过渡宽度增加了。这是仅用14位系数得到69 dB衰减的代价,因为需要24位系数来匹配浮点设计的过渡宽度和阻带衰减。

关闭(hfvt);hfvt = fvtool (reffilter (Hb1) Hbq2,“ShowReference”,“关闭”,“颜色”,“白色”);传奇(hfvt“浮点过滤器”,“14-bit Noise-Shaped过滤器的);

关闭(hfvt)

总结

我们已经了解了如何使用噪声整形技术来最小化单级或多级FIR定点滤波器的系数字长,或者如何使用噪声整形技术来最大化阻带衰减。我们还了解了在最小阶设计或更大过渡宽度的情况下,如何用比特交换更多系数对于具有固定顺序的设计。

参考文献

Jens Jorgen Nielsen,使用误差谱整形技术设计量化系数的线性相位直接形式FIR数字滤波器,IEEE声学学报,语音和信号处理,Vol. 37, No. 7, 1989年7月,pp. 1020- 1026。

Alan V.Oppenheim和Ronald W.Schafer,《离散时间信号处理》,第二版,Prentice Hall,1999年,ISBN 0-13-754920-2。