主要内容

MATLAB中的定点滤波器设计

此示例显示了如何设计用于固定点输入的过滤器。该示例分析了系数量化对滤波器设计的影响。您必须拥有固定点设计器软件™来运行此示例。

介绍

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

FIR过滤器设计

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

  • 采样率:2000 Hz

  • 中心频率:450 Hz

  • 过渡宽度:100 Hz

  • 平等设计

  • 通带中最大1 dB波纹

  • 阻带中最小80 dB衰减

SamplingFrequency = 2000;中心频率= 450;TransuritionWidth = 100;passbandripple = 1;stopbandattenuation = 80;designspec = fdesign.lowpass('FP,FST,AP,AST'......中心频繁过渡宽/ 2,......中心频率+ TransuritionWidth / 2,......Passbandropple,stopbandattenuation,......采样频率);LPF = Design(DesignSpec,'平静''systemobject',真的)
lpf = dsp.firfilter具有属性:结构:'直接表格'NumeratorSource:'属性'分子:[1x52 Double] InitialConditions:0显示所有属性

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

FVTool(LPF)

图筛选筛选器可视化工具 - 幅度响应(DB)包含UIMEnu类型uitoolbar类型的轴和其他对象。具有标题幅度响应(DB)的轴包含2个类型的线。

全精密定点操作

过滤器的固定点属性包含在定点属性截面在显示对象的显示中。默认情况下,过滤器使用全精度算术来处理定点输入。通过全精密算术,滤波器使用产品,累加器和输出的多个位,以防止任何溢出或舍入。如果您不想使用全精度算术,可以设置FullePrecisionoverWide.财产错误的然后独立设置产品,累加器和输出数据类型。

RNG.默认inputwordlength = 16;fixedpointinput = fi(randn(100,1),true,inputwordlength);floatingpointinput = double(fixedpointinput);floatingpointoutput = lpf(floatingpointinput);释放(LPF)fullprecisionoutput = lpf(fixedpointinput);常规(FloatingPointOutput-Double(FullPrecisionOutput),'inf'
ANS = 6.8994E-05

全精密定点滤波的结果非常接近浮点,但结果并不准确。其原因是系数量化。在固定点过滤器中,系数datatyp.属性具有相同的字长(16),用于系数和输入。滤波器以全精密模式的频率响应更清楚地显示出这一精确性。这措施功能表明,具有量化系数的该滤波器的最小停止带衰减为76.6913 dB,小于浮点滤波器指定的80dB。

lpf.coefficientSdatatyp.
ans ='与输入相同的字长'
FVTool(LPF)

图筛选筛选器可视化工具 - 幅度响应(DB)包含UIMEnu类型uitoolbar类型的轴和其他对象。具有标题幅度响应(DB)的轴包含3个类型的类型。这些对象表示滤波器#1:量化,过滤器#1:参考。

措施(LPF)
ANS =采样率:2 kHz通带边缘:400 Hz 3-DB点:416.2891 Hz 6-DB点:428.1081 Hz Stopband边缘:500 Hz通带纹波:0.96325 DB阻带AGETEN。:76.6913 DB过渡宽度:100 Hz

过滤器最后与定点输入一起使用,仍处于锁定状态。是因为,FVTool.显示固定点频率响应。DASH-DOT响应是参考浮点滤波器的响应,并且实体图是与定点输入一起使用的过滤器的响应。所需的频率响应不能匹配,因为系数字长度已被限制为16位。这占浮点和定点设计之间的差异。增加系数字长度允许的比特数使得量化误差变小,使您能够匹配80 dB的停止衰减。使用24位的系数字长度以达到80.1275 dB的衰减。

lpf24bitcoeff = design(designspec,'平静''systemobject',真的);lpf24bitcoeff.coefficientsdatatype =.'风俗';coeffnumerictype = numerictype(fi(lpf24bitcoeff.numerator,true,24));lpf24bitcoeff.customcoefficientsdatatype = numerictype(true,......coffnumerictype.wordlength,coeffnumerictype.fractionlength);FullPrecisionOutputp22BitCoeff = LPF24BitCoeff(FixedPointInput);规范(FloatingPointOutput-Double(FullPrecisionOutput32BitCoeff),'inf'
ans = 4.1077e-07
FVTool(LPF24BitCoeff)

图筛选筛选器可视化工具 - 幅度响应(DB)包含UIMEnu类型uitoolbar类型的轴和其他对象。具有标题幅度响应(DB)的轴包含3个类型的类型。这些对象表示滤波器#1:量化,过滤器#1:参考。

测量(LPF24BitCoeff)
ANS =采样率:2 kHz通带边缘:400 Hz 3-DB点:416.2901 Hz 6-DB点:428.1091 Hz Stopband边缘:500 Hz通带纹波:0.96329 DB停机带Agenten。:80.1275 DB过渡宽度:100 Hz

设计参数和系数量化

在许多固定点设计应用中,系数字长度不灵活。例如,假设您仅限于14位。在这种情况下,无法达到80 dB的所要求的最小停止衰减。具有14位系数量化的过滤器可以实现仅67.2987 dB的最小衰减。

lpf14bitcoeff = design(designspec,'平静''systemobject',真的);coffnumerictype = numerictype(fi(lpf14bitcoeff.numerator,true,14));lpf14bitcoeff.cofficientsdatatype =.'风俗';lpf14bitcoeff.customcoefficientsdatatype = numerictype(true,......coffnumerictype.wordlength,coeffnumerictype.fractionlength);测量(LPF14BitCoeff,'算术''固定的'
ANS =采样率:2 kHz通带边缘:400 Hz 3-dB点:416.2939 Hz 6-DB点:428.1081 Hz Stopband边缘:500 Hz通带纹波:0.96405 DB停滞耐动力。:67.2987 DB过渡宽度:100 Hz

对于FIR滤波器通常,系数字长度的每个位提供大约5 dB的停止衰减。因此,如果将滤波器的系数始终量化为14位,则可以期望最小的停止衰减仅为大约70 dB。在这种情况下,设计具有小于70 dB的过滤器更实用的过滤器。放松此要求导致设计下降。

designspec.astop = 60;LPF60DBStopBand = Design(DesignSpec,'平静''systemobject',真的);lpf60dbstopband.coefficientsDatatype =.'风俗';coeffnumerictype = numerictype(fi(lpf60dbstopband.numerator,true,14));lpf60dbstopbabrad.customcoefficientsdatatype = numerictype(true,......coffnumerictype.wordlength,coeffnumerictype.fractionlength);测量(LPF60DBStopBand,'算术''固定的'
ANS =采样率:2 kHz通带边缘:400 Hz 3-DB点:419.3391 Hz 6-DB点:432.9718 Hz停滞边缘:500 Hz通带纹波:0.92801 dB停滞耐动力。:59.1829 DB过渡宽度:100 Hz
订单(LPF14BITCOEFF)
ans = 51.
订单(LPF60DBStopBand)
ans = 42.

过滤器顺序从51到42减小,这意味着实现新的FIR滤波器需要更少的抽头。如果您仍然需要高最小的停止衰减而不会影响系数的位数,则必须放宽其他过滤器设计约束:过渡宽度。增加过渡宽度可能使您能够通过相同的系数字长度获得更高的衰减。然而,即使在放松过渡宽度之后,每个系数字长度几乎不可能实现超过5 dB。

designspec.astop = 80;TransuritionWidth = 200;designspec.fpass = Centerfry-TransitionWidth / 2;designspec.fstop = Centerfrequency + TransuritionWidth / 2;LPF300TransitionWidth = Design(DesignSpec,'平静'......'systemobject',真的);lpf300transitionWidth.coefficientsDatatype =.'风俗';coeffnumerictype = numerictype(fi(lpf300transitionWidth.numerator,......真,14));lpf300transitionWidth.CustomCoefficientSdatatype = numerictype(true,......coffnumerictype.wordlength,coeffnumerictype.fractionlength);测量(LPF300TransitionWidth,'算术''固定的'
ANS =采样率:2 kHz通带边缘:350 Hz 3-DB点:385.4095 Hz 6-DB点:408.6465 Hz Stopband边缘:550 Hz通带纹波:0.74045 DB停滞耐动力。:74.439 DB过渡宽度:200 Hz

如您所见,将过渡宽度提高到200Hz允许具有14位系数的74.439 dB,与67.2987 DB设置为100Hz时,相比。增加过渡宽度的增加的好处是过滤器顺序也降低,在这种情况下,在51到27中。

订单(LPF300TransitionWidth)
ans = 27.