文档

这是机器翻译

翻译的微软
鼠标悬停在文本上查看原文。点击下面的按钮,返回该页面的英文版本。

注:本页由译者翻译MathWorks请按此处
要查看包括本页在内的所有翻译材料,请从本页底部的国家导航器中选择日本。

MATLAB中的定点滤波器设计

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

简介

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

FIR滤波器设计

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

  • 采样率:2000hz

  • 中心频率:450hz

  • 过渡宽度:100hz

  • Equiripple设计

  • 在通带中最大1db纹波

  • 阻带最小衰减80分贝

samplingFrequency = 2000;centerFrequency = 450;transitionWidth = 100;passbandRipple = 1;stopbandAttenuation = 80;designSpec = fdesign.lowpass(“Fp,置,美联社,Ast”...centerFrequency-transitionWidth / 2,...centerFrequency + transitionWidth / 2,...passbandRipple stopbandAttenuation,...samplingFrequency);LPF =设计“equiripple”“SystemObject”,真正的)
LPF = dsp。带有属性的FIRFilter:结构:'直接形式'分子来源:'属性'分子:[1×52 double] InitialConditions: 0使用get显示所有属性

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

fvtool (LPF)

全精密定点运算

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

rng默认的inputWordLength = 16;fixedPointInput = fi(randn(100,1),true,inputWordLength);floatingPointInput = double(fixedPointInput);floatingPointOutput = LPF(floatingPointInput);release(LPF) fullPrecisionOutput = LPF(fixedPointInput);规范(floatingPointOutput-double (fullPrecisionOutput),“正”
Ans = 6.8994e-05

全精度定点滤波的结果与浮点滤波非常接近,但结果并不精确。这样做的原因是系数量化。在定点滤波器中,CoefficientsDataType属性对于系数和输入具有相同的字长(16)。全精度模式下滤波器的频率响应更清楚地显示了这一点。的测量由函数可以看出,该量化系数滤波器的最小阻带衰减为76.6913 dB,小于浮点滤波器规定的80 dB。

通滤波器。系数数据类型fvtool(LPF)测量(LPF)
ans =与输入相同的字长ans =采样率:2 kHz通带边缘:400hz 3-dB点:416.2891 Hz 6-dB点:428.1081 Hz止带边缘:500hz通带纹波:0.96325 dB止带注意。: 76.6913 dB过渡宽度:100hz

该滤波器最后一次使用的是定点输入,目前仍处于锁定状态。出于这个原因,fvtool显示定点频率响应。虚线点响应是参考浮点滤波器的响应,实线图是使用定点输入的滤波器的响应。期望的频率响应不能匹配,因为系数字长被限制为16位。这解释了浮点和定点设计之间的区别。增加系数字长允许的比特数可使量化误差更小,并使您能够满足80 dB阻带衰减的设计要求。使用24位的系数字长来实现80.1275 dB的衰减。

LPF24bitCoeff =设计(设计规格,“equiripple”“SystemObject”,真正的);LPF24bitCoeff。CoefficientsDataType =“自定义”;coeffNumerictype = numerictype(fi(LPF24bitCoeff.Numerator,true,24));LPF24bitCoeff。customcoefficients sdatatype =数字类型(true,...coeffNumerictype.WordLength coeffNumerictype.FractionLength);fullPrecisionOutput32bitCoeff = LPF24bitCoeff(fixedPointInput);规范(floatingPointOutput-double (fullPrecisionOutput32bitCoeff),“正”fvtool(LPF24bitCoeff)
ans = 4.1077e-07 ans =采样率:2 kHz通带边缘:400 Hz 3-dB点:416.2901 Hz 6-dB点:428.1091 Hz止带边缘:500 Hz通带纹波:0.96329 dB止带注意。转换宽度:100hz

设计参数和系数量化

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

LPF14bitCoeff =设计(设计规格,“equiripple”“SystemObject”,真正的);coeffNumerictype = numerictype(fi(LPF14bitCoeff.Numerator,true,14));LPF14bitCoeff。CoefficientsDataType =“自定义”;LPF14bitCoeff。customcoefficients sdatatype =数字类型(true,...coeffNumerictype.WordLength coeffNumerictype.FractionLength);测量(LPF14bitCoeff“算术”“固定”
ans =采样率:2 kHz通带边缘:400 Hz 3-dB点:416.2939 Hz 6-dB点:428.1081 Hz止带边缘:500 Hz通带纹波:0.96405 dB止带注意。: 67.2987 dB过渡宽度:100hz

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

designSpec。stop = 60;LPF60dBStopband = design(设计规格,“equiripple”“SystemObject”,真正的);LPF60dBStopband。CoefficientsDataType =“自定义”;coeffNumerictype = numerictype(fi(LPF60dBStopband.Numerator,true,14));LPF60dBStopband。customcoefficients sdatatype =数字类型(true,...coeffNumerictype.WordLength coeffNumerictype.FractionLength);测量(LPF60dBStopband“算术”“固定”)订单(LPF14bitCoeff)订单(LPF60dBStopband)
ans =采样率:2 kHz通带边缘:400 Hz 3-dB点:419.3391 Hz 6-dB点:432.9718 Hz止带边缘:500 Hz通带纹波:0.92801 dB止带注意。过渡宽度:100 Hz ans = 51 ans = 42

滤波器的顺序从51减少到42,这意味着实现新的FIR滤波器所需的抽头更少。如果你仍然想要一个高的最小阻带衰减而不妥协系数的比特数,你必须放松另一个滤波器设计约束:过渡宽度。增加过渡宽度可以使您在相同的系数字长下获得更高的衰减。然而,即使在放宽过渡宽度之后,也几乎不可能实现每位系数字长超过5 dB。

designSpec。stop = 80;transitionWidth = 200;designSpec。Fpass = centerFrequency-transitionWidth/2;designSpec。Fstop = centerFrequency+transitionWidth/2;LPF300TransitionWidth =设计(设计规格,“equiripple”...“SystemObject”,真正的);LPF300TransitionWidth。CoefficientsDataType =“自定义”;coeffNumerictype = numerictype(fi(LPF300TransitionWidth。分子,...真的,14));LPF300TransitionWidth。customcoefficients sdatatype =数字类型(true,...coeffNumerictype.WordLength coeffNumerictype.FractionLength);测量(LPF300TransitionWidth“算术”“固定”
ans =采样率:2 kHz通带边缘:350 Hz 3-dB点:385.4095 Hz 6-dB点:408.6465 Hz阻带边缘:550 Hz通带纹波:0.74045 dB阻带注意。: 74.439 dB过渡宽度:200hz

如您所见,将过渡宽度增加到200 Hz,可以使用14位系数获得74.439 dB的阻带衰减,而将过渡宽度设置为100 Hz时获得67.2987 dB。增加过渡宽度的另一个好处是,过滤器的顺序也降低了,在这种情况下,从51到27。

订单(LPF300TransitionWidth)
Ans = 27
这个话题有用吗?