主要内容

优化的定点FIR滤波器

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

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

  • 最小化系数WordLength,

  • 约束系数WordLength,

  • 最大化停滞衰减。

理论背景

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

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

最小化系数WordLength.

首先,我们希望确定满足单级或多级设计规范的最小字度固定点FIR滤波器。我们采用半带滤波器的示例,具有归一化的转换宽度为0.08和59dB的停止衰减。Kaiser窗口设计产生91个双精度浮点系数,以满足规格。

tw = .08;%过渡宽度astop = 59;阻带衰减(dB)f = fdesign.halfBand('tw,ist',tw,astop);高清=设计(f,'kaiserwin');

要建立基线,我们可以通过将其“算术”属性设置为“固定”来量化过滤器,并通过迭代系数“WordLength,直到找到满足规范的最小值。或者,我们可以使用MinimizeCoeffwl()来加速该过程。基线定点滤波器包含91个17位系数。

hqbase = minimizecoeffwl(HD,......“MatchRefFilter”,真的,“NoiseShaping”假的,......'astoptol', 0);%91 17位系数,astop = 59.1 dB

对于许多硬件目标,17位WordLength无法解除。在某些情况下,我们可以通过仅使用16位系数来妥协。但是,由于过滤器的最大停止带衰减仅为58.8dB而不是所需的59dB,因此不再严格满足原始规范。

HQ1 = COPY(HQBASE);hq1.coeffwordlength = 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

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

HQ2 = Minimizecoeffwl(HD,......“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'是假的,默认情况下,“诺斯哨”是真的,我们可以省略它们。优化的固定点滤波器符合具有91个13位系数的规格。这表示具有相同数量的系数的参考固定点设计中的4位。

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

作为噪声的折射率掉出的噪声,噪声形过滤器的通带纹波略微增加,这通常不是问题。另请注意,在应用噪声整形后,不存在通带纹波的简单关系。

轴([0 0.5060 -0.0109 0.0109])

约束系数WordLength.

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

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

注意:以下命令是计算密集的,可以花几分钟运行。

我们首先匹配浮点设计的顺序,并获得符合规格的噪声形定点滤波器:

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

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

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

hmref = minimizecoeffwl(hm,“MatchRefFilter”,真的);

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

  • 9个9位系数为第一阶段,

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

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

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

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

  • 对于第一阶段的8个10位系数,

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

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

WL = [10 12 14];HQC = ConstrainCoefwwl(HM,WL);

最大化阻带衰减

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

fh = fdesign.decimator(2,“halfband”'n,ist',70,69);HB1 =设计(FH,'平静');
警告:此设计将生成一个MFILT对象,该对象将在未来的版本中被删除。要生成一个等效的System对象,请将“SystemObject”参数设置为true。Hs = design(D,…,'SystemObject',true)

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

hb1.arithmetic =.'固定的';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,但仍未符合规格。

fh.astop = 80;HB2 =设计(FH,'平静');hb2.arcometic =.'固定的';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,离散时间信号处理,第2版,Prentice Hall,1999,ISBN 0-13-754920-2。