MATLAB中的定点滤波器设计

这个例子展示了如何设计用于定点输入的过滤器。算例分析了系数量化对滤波器设计的影响。要运行此示例,必须使用定点设计器软件™。

介绍

定点滤波器通常用于数字信号处理器,其中数据存储和功耗是关键的限制因素。根据您指定的约束条件,DSP系统工具箱软件允许您设计高效的定点滤波器。本例中的滤波器是低通等波纹FIR滤波器。首先为浮点型设计滤波器-获取基线的点输入。您可以使用此基线与定点过滤器进行比较。

数字滤波器设计

低通FIR滤波器具有以下规格:

  • 采样率:2000赫兹

  • 中心频率:450hz

  • 过渡宽度:100hz

  • 等波纹设计

  • 通带中最大1 dB的纹波

  • 在阻带中衰减最小为80分贝

采样频率=2000;中心频率=450;转换宽度=100;通带纹波=1;StopBandAttentiation=80;设计规范=fdesign.lowpass(‘Fp、Fst、Ap、Ast’...中心频率转换宽度/2,...中心频率+转换宽度/2,...通带波纹、阻带衰减、,...采样频率);LPF=设计(设计规范,“equiripple”“SystemObject”,真正的)
LPF=dsp.FIRFilter,其属性为:结构:'Direct form'分子源:'Property'分子:[1x52 double]初始条件:0显示所有属性

查看基线频率响应。红色虚线显示用于创建过滤器的设计规范。

fvtool (LPF)

软件不能定点操作

属性中包含过滤器的定点属性不动点性质对象显示中的节。默认情况下,过滤器使用全精度算法处理定点输入。使用全精度算法,过滤器根据需要为乘积、累加器和输出使用尽可能多的位,以防止溢出或舍入。如果不想使用全精度算法,可以设置FullPrecisionOverride财产然后分别设置乘积、累加器和输出数据类型。

rng默认的inputWordLength = 16;fixedPointInput = fi (randn(100 1),真的,inputWordLength);floatingPointInput =双(fixedPointInput);floatingPointOutput = LPF (floatingPointInput);释放(LPF) fullPrecisionOutput = LPF(fixedpointtinput);规范(floatingPointOutput-double (fullPrecisionOutput),“inf”
ans = 6.8994 e-05

全精度定点滤波的结果非常接近浮点,但结果不准确。原因是系数量化。在定点过滤器中CoefficientsDataType属性的系数和输入具有相同的字长(16)。滤波器在全精度模式下的频率响应更清楚地表明了这一点。这个测量函数显示,此量化系数滤波器的最小阻带衰减为76.6913 dB,小于为浮点滤波器指定的80 dB。

LPF.CoefficientsDataType
ans = '与input相同的单词长度'
fvtool (LPF)

测量(LPF)
ans=采样率:2 kHz通带边缘:400 Hz 3-dB点:416.2891 Hz 6-dB点:428.1081 Hz阻带边缘:500 Hz通带纹波:0.96325 dB阻带衰减:76.6913 dB过渡宽度:100 Hz

过滤器上次与定点输入一起使用,仍处于锁定状态。因此,,fvtool显示定点频率响应。虚线点响应是参考浮点滤波器的响应,实线图是与定点输入一起使用的滤波器的响应。无法匹配所需的频率响应,因为系数字长已限制为16位。这说明浮点和定点设计之间的ce。增加系数字长允许的位数可减小量化误差,并使您能够匹配80 dB阻带衰减的设计要求。使用24位的系数字长可实现80.1275 dB的衰减。

LPF24bitCoeff =设计(designSpec,“equiripple”“SystemObject”,真正的);LPF24bitCoeff。CoefficientsDataType =“习俗”;coeffNumerictype = numerictype (fi (LPF24bitCoeff.Numerator,真的,24));LPF24bitCoeff。CustomCoefficientsDataType = numerictype(真的,...coeffNumerictype.WordLength,coeffNumerictype.FractionLength);fullPrecisionOutput32bitCoeff=LPF24bitCoeff(固定点输入);norm(浮点输出双精度(全精度输出32位系数),“inf”
ans=4.1077e-07
fvtool (LPF24bitCoeff)

测量(LPF24bitCoeff)
ans=采样率:2 kHz通带边缘:400 Hz 3-dB点:416.2901 Hz 6-dB点:428.1091 Hz阻带边缘:500 Hz通带纹波:0.96329 dB阻带衰减:80.1275 dB过渡宽度:100 Hz

设计参数和系数量化

在许多定点设计应用中,系数字长是不灵活的。例如,假设您被限制使用14位。在这种情况下,无法达到要求的最小阻带衰减80 dB。具有14位系数量化的滤波器可实现仅67.2987 dB的最小衰减。

LPF14bitCoeff =设计(designSpec,“equiripple”“SystemObject”,true);coeffNumerictype=numerictype(fi(LPF14bitCoeff.Numerator,true,14));LPF14bitCoeff.CoefficientsDataType=“习俗”;LPF14bitCoeff。CustomCoefficientsDataType = numerictype(真的,...coeffNumerictype.WordLength coeffNumerictype.FractionLength);测量(LPF14bitCoeff“算术”“固定的”
ans =采样率:2khz通频带边缘:400hz 3-dB点:416.2939 Hz 6-dB点:428.1081 Hz阻频带边缘:500hz通频带纹波:0.96405 dB阻频带Atten: 67.2987 dB过渡宽度:100 Hz

对于一般的FIR滤波器,每个系数字长比特提供大约5 dB的阻带衰减。因此,如果您的滤波器系数总是量化到14位,您可以预期最小阻带衰减仅为70 dB左右。在这种情况下,设计阻带衰减小于70 dB的滤波器更为实用。放宽这一要求会导致较低阶的设计。

设计规范Astop=60;LPF60dBStopband=design(设计规范,“equiripple”“SystemObject”,对);LPF60dBStopband.CoefficientsDataType=“习俗”;coeffNumerictype=numerictype(fi(LPF60dBStopband.Numerator,true,14));LPF60dBStopband.CustomCoefficientsDataType=numerictype(true,...coeffNumerictype.WordLength,coeffNumerictype.FractionLength);测量(LPF60dBStopband,“算术”“固定的”
ans =采样率:2 kHz通频带边缘:400 Hz 3-dB点:419.3391 Hz 6-dB点:432.9718 Hz阻带边缘:500 Hz通频带纹波:0.92801 dB阻带Atten转换宽度:100 Hz
订单(LPF14bitCoeff)
ans = 51
订单(LPF60dBStopband)
ans = 42

滤波器阶数从51降低到42,这意味着实现新的FIR滤波器需要更少的抽头。如果您仍然希望在不影响系数位数的情况下获得较高的最小阻带衰减,则必须放宽其他滤波器设计约束:过渡宽度。增加过渡宽度可能使您能够在相同的系数字长下获得更高的衰减。然而,即使在放松过渡宽度后,每比特系数字长也几乎不可能达到5 dB以上。

designSpec。Astop = 80;transitionWidth = 200;designSpec。成就= centerFrequency-transitionWidth / 2;designSpec。Fstop = centerFrequency + transitionWidth / 2;LPF300TransitionWidth =设计(designSpec,“equiripple”...“SystemObject”,真正的);LPF300TransitionWidth。CoefficientsDataType =“习俗”;coeffNumerictype=numerictype(fi(LPF300 TransitionWidth.Numerator,...是的,14);LPF300 TransitionWidth.CustomCoefficientsDataType=numerictype(真,...coeffNumerictype.WordLength,coeffNumerictype.FractionLength);测量(LPF300过渡宽度,“算术”“固定的”
ans =采样率:2khz通带边缘:350hz 3-dB点:385.4095 Hz 6-dB点:408.6465 Hz阻带边缘:550hz通带纹波:0.74045 dB阻带Atten转换宽度:200 Hz

正如你所看到的,将过渡宽度增加到200hz可以在14位系数下实现74.439 dB的阻带衰减,而当过渡宽度设置为100hz时可以达到67.2987 dB。增加过渡宽度的另一个好处是,过滤器的顺序也减少了,在本例中从51到27。

订单(LPF300TransitionWidth)
ans = 27