主要内容

优化的定点FIR滤波器

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

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

  • 最小化系数字,

  • 约束系数字,

  • 最大化阻带衰减。

理论背景

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

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

最小化系数字

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

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

为了建立基线,我们将过滤器量化,将其“Arithmetic”属性设置为“fixed”,并对系数的字长进行迭代,直到找到满足规格要求的最小值。或者,我们可以使用minimizecoeffwl()来加速这个过程。基线定点滤波器包含91个17位系数。

Hqbase = minimizecoeffwl(高清...“MatchRefFilter”,真的,“NoiseShaping”假的,...“Astoptol”, 0);% 91 17位系数,停止= 59.1 dB

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

Hq1 = (Hqbase)复印件;Hq1。CoeffWordLength = 16;% 91 16位系数,停止= 58.8 dBm1 =测量(Hq1)% #好吧
m1 =采样率:N/A(归一化频率)通带边缘:0.46 3-dB点:0.49074 6-dB点:0.5阻带边缘:0.54通带纹波:0.017157 dB阻带Atten转换宽度:0.08

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

Hq2 = minimizecoeffwl(高清...“MatchRefFilter”,真的,“NoiseShaping”假的,...“Astoptol”,酒精含量);% 91 14位系数,停止= 58.8 dB

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

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

一个更好的解决方案是使用噪声整形来最大化量化滤波器的阻带衰减。噪声整形过程是随机的。您可能想要试验'NTrials'选项和/或初始化RAND,以便重现下面的结果。因为“MatchRefFilter”默认为false,而“NoiseShaping”为true,所以我们可以省略它们。优化后的定点滤波器满足了91个13位系数的要求。这表示在系数相同的情况下,比参考定点设计节省4位。

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

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

轴([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 = minimizecoeffwl(嗯,“MatchRefFilter”,真正的);

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

  • 第一阶段的9位系数,

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

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

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

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

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

  • 第二阶段的12位系数,

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

Wl = [10 12 14];认证机构= constraincoeffwl(嗯,王);

最大化阻带衰减

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

跳频= fdesign.decimator (2“halfband”“N, Ast”、70、69);Hb1 =设计(跳频,“equiripple”);
警告:此设计将生成一个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 = maximizestopband (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,但仍未达到要求。

跳频。Astop = 80;Hb2 =设计(跳频,“equiripple”);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。