主要内容

优化的定点FIR滤波器

此示例显示如何优化FIR FIR筛选器。优化可以参考滤波器响应的特性,例如停止衰减或实现特定规范所需的比特数。该功能对于定位具有许多可配置系数的硬件的用户尤其有用,该功能是通常在ASIC和FPGA上的案例中具有大型设计空间来探索的。硬件设计人员通常可以为更少的比特或反之亦然的更多系数,以优化不同的ASIC或FPGA。

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

  • 最小化系数字,

  • 约束系数WordLength,

  • 最大化停滞衰减。

理论背景

噪声整形算法本质上是将量化噪声移出定点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位系数,astop = 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

或者,我们可以设置容忍度来控制可接受的停机误差。例如,具有.15 dB的Stopband公差我们可以节省3位并获得91个14位系数的过滤器。

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

节省系数WordLength符合固定点设计的价格,不再符合规格。公差可能因对另一个应用而异,但这种策略可能在许多情况下具有有限的吸引力。我们可以通过放松“MatchReffilter”约束来使用另一种自由度。通过将“MatchReffilter”属性设置为false,我们不再尝试匹配HD的过滤器订单(用于最小订单设计)或HD的过滤器转换宽度(用于固定订单设计)。允许重新设计中间浮点滤波器导致定点滤波器,该滤波器符合具有93个13位系数的规格。与参考数点设计相比,我们保存了4位,但最终有2个额外(1个非零)系数。

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

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

Hq4 = minimizecoeffwl(高清'ntrial',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小数为例,展示如何在最小阶设计中进一步控制这种折衷:

fm = 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个12位系数,

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

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

最大化阻带衰减

当设计具有多个特定类型的可配置系数的货架滤波引擎(ASSP)时,期望利用给定顺序和约束的WordLength最大化滤波器的停止带衰减。在下一个示例中,我们希望使用第70阶半带DECIMIDATER获得69 dB的停止衰减,同时使用14位来表示系数。

跳频= fdesign.decimator (2“halfband”'n,ist',70,69);HB1 =设计(FH,“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停机带。:62.7048 DB过渡宽度: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停机架。:64.1876 DB过渡宽度: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

噪声整形技术为我们提供了一种过滤器,最终通过提高超过3 dB的阻带​​衰减来满足规范,从66.2 db提高到69.4 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停滞耐动力。:69.4039 DB过渡宽度:0.12703

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

关闭(HFVT);hfvt = fvtool(Reffilter(HB1),HBQ2,“ShowReference”“关闭”“颜色”“白色”);传奇(hfvt“浮点过滤”'14贝格噪声过滤器');

关上(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。