主要内容

dsp。FIRDecimator

多相FIR抽取器

描述

dsp。FIRDecimator系统对象™沿着第一个维度重新采样矢量或矩阵输入。FIR抽取器(如图所示)在概念上由一个抗混叠FIR滤波器和一个下采样器组成。

FIR滤波器使用直接形式的FIR滤波器对输入的每个通道中的数据进行过滤。函数可以指定FIR滤波器系数分子属性,也可以由对象使用designMultirateFIR函数。的designMultirateFIR函数设计了一个抗混叠FIR滤波器。FIR滤波器后面的下采样器通过取每一个被过滤数据通道的下采样-th样本并丢弃- 1下面的例子。是指定的抽取因子的值。得到的离散时间信号的采样率为1/乘以原始抽样率。

FIR抽取器包含一个抗混叠FIR滤波器和一个下采样器。

请注意,实际的目标算法实现了直接形式的FIR多相结构,这是图中描述的组合系统的有效等效。详情请参见算法

沿着第一个维度重新采样向量或矩阵输入:

  1. 创建dsp。FIRDecimator对象并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

有关系统对象如何工作的详细信息,请参见什么是系统对象?

在特定条件下,这个System对象还支持SIMD代码生成。金宝app详细信息请参见代码生成

创建

描述

例子

firdecim= dsp。FIRDecimator返回一个抽取因子为2的FIR抽取器对象。设计了FIR滤波器系数designMultirateFIR(1、2)函数。

firdecim= dsp。FIRDecimator (返回一个具有整数值的FIR抽取器DecimationFactor属性设置为.该对象基于抽取因子设计其滤波器系数属性在创建对象时指定的designMultirateFIR(1米)函数。所设计的滤波器对应于在π/处具有截止点的低通以径向频率为单位。

firdecim= dsp。FIRDecimator (“汽车”属性返回一个FIR抽取数NumeratorSource属性设置为“汽车”.在这种模式下,每当抽取因子更新时,对象使用designMultirateFIR(1米)

firdecim= dsp。FIRDecimator (全国矿工工会属性返回一个FIR抽取数DecimationFactor属性设置为分子属性设置为全国矿工工会

firdecim= dsp。FIRDecimator (___名称,值返回一个FIR抽取器对象,其中每个指定属性都设置为指定值。将每个属性名用引号括起来。您可以将此语法用于以前的任何输入参数组合。

firdecim= dsp。FIRDecimator (“遗产”返回一个FIR抽取器,其中滤波器系数设计使用fir1(35岁,0.4).所设计滤波器的截止频率为0.4π弧度/样本。

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放功能解锁它们。

如果属性为可调,您可以随时更改其值。

有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计

大量毁灭的因素,指定为正整数。FIR抽取器通过这个因子降低输入的采样率。输入行数必须是抽取因子的倍数。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

FIR滤波器系数来源,指定为下列之一:

  • “属性”分子系数通过分子财产。

  • 输入端口的分子系数被指定为目标算法的输入。

  • “汽车”分子系数自动设计使用designMultirateFIR(1米)函数。

FIR滤波器的分子系数,指定为以的幂表示的行向量z1.下面的方程定义了长度过滤器的系统函数N+ 1:

H z l 0 N b l z l

向量b= (b0b1、……bN]表示滤波器系数的向量。

为了防止由于下采样导致的混叠,滤波器传递函数应该具有不大于1/的归一化截止频率.要设计有效的抗混叠滤波器,请使用designMultirateFIR函数。有关示例,请参见正弦波的十进制和

依赖关系

此属性仅在设置时可见NumeratorSource“属性”

NumeratorSource设置为“汽车”时,分子系数自动重新设计designMultirateFIR(1米).要在自动设计模式中访问滤波器系数,请键入objName。分子在MATLAB中®命令提示符。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64
复数支持:金宝app是的

指定FIR过滤器的实现直接的形式直接形式转置

定点属性

标记为定点算术使用全精度规则,指定为以下之一:

  • 真正的对象使用全精度规则计算所有内部算术和输出数据类型。这些规则提供了最精确的定点数字。在这种模式下,其他定点属性不适用。对象内部没有量子化。根据需要添加位,以确保不会发生舍入或溢出。

  • 定点数据类型通过个别定点属性设置来控制。

有关更多信息,请参见定点系统对象的全精度而且设置系统对象定点属性

定点运算的舍入方法。详情请参见舍入模式

依赖关系

当满足以下条件时,此属性是不可见的,对数值结果没有影响:

  • FullPrecisionOverride设置为真正的

  • FullPrecisionOverride设置为ProductDataType设置为“充分精确”AccumulatorDataType设置为“充分精确”,OutputDataType设置为'与累加器相同'

在这些条件下,物体在全精度模式下工作。

定点操作的溢出动作,指定为下列之一:

  • “包装”对象包装其定点操作的结果。

  • “饱和”——对象使其定点操作的结果饱和。

有关溢出操作的详细信息,请参见溢出模式用于定点运算。

依赖关系

当满足以下条件时,此属性是不可见的,对数值结果没有影响:

  • FullPrecisionOverride设置为真正的

  • FullPrecisionOverride设置为OutputDataType设置为'与累加器相同'ProductDataType设置为“充分精确”,AccumulatorDataType设置为“充分精确”

在这些条件下,物体在全精度模式下工作。

FIR滤波器系数的数据类型,指定为:

  • 与输入相同的字长——系数的字长与输入的字长相同。分数长度的计算,以提供最好的可能精度。

  • 自定义方法将系数数据类型指定为自定义数字类型CustomCoefficientsDataType财产。

系数数据类型的字和分数长度,指定为自签名numerictype(定点设计师)单词长度为16,分数长度为15。

依赖关系

属性时应用此属性CoefficientsDataType财产自定义

此对象中产品输出的数据类型,指定为以下之一:

  • “充分精确”——产品输出数据类型具有全精度。

  • “与输入相同”——对象指定产品输出数据类型与输入数据类型相同。

  • “自定义”方法将产品输出数据类型指定为自定义数字类型CustomProductDataType财产。

有关产品输出数据类型的详细信息,请参见乘法数据类型

依赖关系

设置时应用此属性FullPrecisionOverride

产品数据类型的单词和分数长度,指定为自签名数字类型,单词长度为32,分数长度为30。

依赖关系

此属性仅在设置时应用FullPrecisionOverride而且ProductDataType“自定义”

此对象中累加操作的数据类型,指定为以下之一:

  • “充分精确”——累加操作具有充分的精度。

  • “与产品相同”——对象指定累加器数据类型与产品输出数据类型相同。

  • “与输入相同”——对象指定累加器数据类型与输入数据类型相同。

  • “自定义”属性将累加器数据类型指定为自定义数字类型CustomAccumulatorDataType财产。

依赖关系

设置时应用此属性FullPrecisionOverride

累加器数据类型的单词和分数长度,指定为自签名数字类型,单词长度为32,分数长度为30。

依赖关系

此属性仅在设置时应用FullPrecisionOverride而且AccumulatorDataType“自定义”

对象输出的数据类型,指定为以下之一:

  • '与累加器相同'——输出数据类型与累加器输出数据类型相同。

  • “与输入相同”—输出数据类型与输入数据类型相同。

  • “与产品相同”—输出数据类型与产品输出数据类型相同。

  • “自定义”方法将输出数据类型指定为自定义数字类型CustomOutputDataType财产。

依赖关系

设置时应用此属性FullPrecisionOverride

输出数据类型的字和分数长度,指定为自签名数字类型,字长度为16,分数长度为15。

依赖关系

此属性仅在设置时应用FullPrecisionOverride而且OutputDataType“自定义”

使用

描述

例子

y= firdecim (x输出过滤后和下采样的值,y,为输入信号,x

y= firdecim (x全国矿工工会使用FIR滤波器,全国矿工工会,以抽取输入信号。仅当“NumeratorSource”属性设置为输入端口的

输入参数

全部展开

数据输入,指定为列向量或大小的矩阵P——- - - - - -.输入行数,P,必须是的倍数DecimationFactor财产。输入列表示独立的通道。

该对象支持可变大小的输入金宝app,不支持复杂的无符号定点输入。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|fi
复数支持:金宝app是的

FIR滤波器系数,指定为行向量。

依赖关系

时才接受此输入“NumeratorSource”属性设置为输入端口的

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|fi
复数支持:金宝app是的

输出参数

全部展开

FIR十进制输出,作为列向量或大小矩阵返回P / M——- - - - - -,在那里是抽取因子。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|fi
复数支持:金宝app是的

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

freqz 离散时间滤波器的频率响应系统对象
fvtool 可视化DSP滤波器的频率响应
信息 关于过滤器的信息系统对象
成本 估计实现过滤器的成本系统对象
多相 多速率滤波器的多相分解
generatehdl 生成量化DSP滤波器的HDL代码(需要滤波器设计HDL编码器
impz 离散时间滤波器的脉冲响应系统对象
多项式系数 返回筛选器系统对象结构中的系数
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

将正弦波的和按2的倍数和4的倍数取小数。

从一个角频率为的余弦波开始 π 4 弧度/样品。

X = cos(/4*(0:95)');

设计默认过滤器

创建一个dsp。FIRDecimator对象。为了防止混叠,对象在降采样前使用了抗混叠低通滤波器。默认情况下,抗混叠低通滤波器是使用designMultirateFIR函数。函数根据指定的抽取因子设计过滤器,并将系数存储在分子财产。抽取因子为2时,对象使用designMultirateFIR(1、2)

firdecim = dsp.FIRDecimator(2)
Firdecim = dsp。FIRDecimatorwith properties: DecimationFactor: 2 NumeratorSource: 'Property' Numerator: [0 -1.0054e-04 0 3.8704e-04 0 -0.0010 0 0.0022 0 ... ] Structure: 'Direct form' Show all properties

可视化使用的过滤器响应fvtool.所设计的滤波器满足用红色标记的理想滤波器约束。截止频率大约是频谱的一半。

fvtool (firdecim)

图幅度响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axis对象包含2个类型为line的对象。

Decimate减去2

将余弦信号抽取2倍。

Y = firdecim(x);

画出原始信号和抽取后的信号。为了在同一个图上绘制两个信号,必须考虑FIR抽取器的输出延迟和滤波器引入的缩放。使用outputDelay函数来计算延迟由十进制数引入的值。按此延迟值移位输出。

可视化输入和重新采样的信号。经过短暂的转换后,输出收敛到频率的余弦 π 2 和预期的一样,是输入信号频率的两倍 π 4 .由于抽取因子为2,输出样本与其他输入样本相吻合。

[delay,FsOut] = outputDelay(firdecim);Nx =(0:长度(x)-1);ty = (0:length(y)-1)/FsOut-delay;茎(泰,y,“填充”, MarkerSize = 4);持有;茎(nx x);持有;Xlim ([-10,22]) ylim([-2.5 2.5])“Decimated by 2 (y)”输入信号(x));

图中包含一个轴对象。axis对象包含2个stem类型的对象。这些对象表示抽取2 (y),输入信号(x)。

添加一个高频组件输入和Decimate

在输入信号中加入另一个频率分量,即角频率为的正弦信号 2 π 3. 弧度/样品。自 ω 2 π 3. 高于FIR低通截止值, π 2 ,频率 2 π 3. 弧度/样本从信号中过滤出来。

Xhigh = x + 0.2*sin(2*pi/3*(0:95)');释放(firdecim) yhigh = firdecim(xhigh);

绘制输入信号、抽取信号和低频分量的输出。抽取信号yhigh高频成分被过滤掉了。yhigh与低频分量的输出几乎相同吗y

茎(ty yhigh,“填充”, MarkerSize = 4);持有;茎(nx xhigh);茎(泰,y,“m”, MarkerSize = 7);持有;Xlim ([-10,22]) ylim([-2.5 2.5])“被2 (yhigh)摧毁”...输入信号加高音(xhigh)...“被2 -低音调(y)”);

图中包含一个轴对象。axis对象包含3个stem类型的对象。这些对象表示被抽取2 (yhigh),输入信号加上高音调(xhigh),被抽取2 -低音调(y)。

在自动滤波器设计模式中抽取4

现在以4倍的倍数进行decimate。为了根据新的抽取因子自动更新滤波器设计,请设置NumeratorSource财产“汽车”.或者,你可以通过“汽车”作为关键字创建对象。对象然后在自动过滤器设计模式下操作。每当抽取因子发生变化时,对象都会更新过滤器设计。

(firdecim) firdecim发布。NumeratorSource =“汽车”;firdecim。DecimationFactor = 4
Firdecim = dsp。FIRDecimatorwith properties: DecimationFactor: 4 NumeratorSource: 'Auto' Structure: 'Direct form' Show all properties

若要在自动模式下访问过滤器系数,请键入firdecim。分子在MATLAB命令提示符中。

所设计的滤波器占用较窄的通带,约为频谱的四分之一。

fvtool (firdecim)

图幅度响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axis对象包含2个类型为line的对象。

将余弦信号抽取4倍。经过短暂的转换后,输出收敛到频率的余弦 π 正如预期的那样,它是输入信号低频分量的四倍 π 4 .这一次,输出的振幅是输入的振幅的一半,因为在的FIR增益 ω π 4 正是 1 2 .高频分量 2 π 3. 减小由低通FIR,其截止频率为 π 4

yAuto = firdecim(xhigh);

将输入信号的高频分量加起来,低频分量按1/2比例缩放,然后抽取信号。重新计算输出延迟和输出采样率,因为抽取因子已经改变。

[delay,FsOut] = outputDelay(firdecim);tyAuto = (0:length(yAuto)-1)/FsOut-delay;茎(tyAuto yAuto,“填充”, MarkerSize = 4);持有;茎(nx xhigh);茎(nx、x / 2”男:“, MarkerSize = 7);持有;Xlim ([-20,36]) ylim([-2.5 2.5])“被4 (yAuto)摧毁”...输入信号加上高频分量(xhigh)...“低音调输入按1/2比例缩放”);

图中包含一个轴对象。axis对象包含3个stem类型的对象。这些对象代表抽取4 (yAuto),输入信号加上高频成分(xhigh),低频输入按1/2比例缩放。

将音频信号的采样率降低到原来的1 / 2,然后使用audioDeviceWriter对象。

请注意:如果您正在使用R2016a或更早的版本,请将对对象的每个调用替换为等效的调用一步语法。例如,obj (x)就变成了步骤(obj, x)

注意:audioDeviceWriter中不支持系统对象™金宝appMATLAB在线

创建一个dsp。AudioFileReader对象。对象读取的默认音频文件的采样率为22050 Hz。

Afr = dsp。AudioFileReader (“OutputDataType”...“单一”);

创建一个dsp。FIRDecimator对象,并将抽取因子指定为2。对象使用来设计过滤器designMultirateFIR(1、2)然后把系数存储在分子对象的属性。

firdecim = dsp.FIRDecimator(2)
Firdecim = dsp。FIRDecimatorwith properties: DecimationFactor: 2 NumeratorSource: 'Property' Numerator: [0 -1.0054e-04 0 3.8704e-04 0 -0.0010 0 0.0022 0 ... ] Structure: 'Direct form' Show all properties

创建一个audioDeviceWriter对象。指定采样率为22050/2。

adw = audioDeviceWriter(22050/2)
adw = audioDeviceWriter with properties: Device: 'Default' SampleRate: 11025显示所有属性

使用文件读取器对象读取音频信号,将信号抽取2倍,然后播放抽取后的信号。

~isDone(afr) frame = afr();Y = firdecim(帧);adw (y);结束释放(误判率);暂停(0.5);释放(adw);

更多关于

全部展开

算法

利用多相结构实现了FIR抽取滤波器。有关多相滤波器的详细信息,请参见多相Subfilters

为了推导多相结构,从FIR滤波器的传递函数开始:

H z b 0 + b 1 z 1 + ... + b N z N

N+1为FIR滤波器的长度。

你可以将这个等式重新排列如下:

H z b 0 + b z + b 2 z 2 + .. + b N + 1 z N + 1 + z 1 b 1 + b + 1 z + b 2 + 1 z 2 + .. + b N + 2 z N + 1 + z 1 b 1 + b 2 1 z + b 3. 1 z 2 + .. + b N z N + 1

是多相组分的数目,其值等于指定的抽取因子。

这个方程可以写成:

H z E 0 z + z 1 E 1 z + ... + z 1 E 1 z

E0(zE1(z、……Em - 1(z是FIR滤波器的多相元件H(z)。

从概念上讲,FIR抽取滤波器包含一个低通FIR滤波器和一个下采样器。

取代H(z)及其多相表示。

这是抽取的多重贵族身份。

应用高贵恒等式抽取将下采样操作移到过滤操作之前。这个动作使您能够以较低的速率过滤信号。

你可以用换向器开关替换输入端的延迟和抽取因子。开关从第一个支路0开始,逆时针方向移动,如图所示。输出端的累加器从多相结构的每个支路接收经过处理的输入样本,并将这些处理过的样本进行累加,直到开关转到0支路。当开关转到0支路时,累加器输出累计值。

当第一个输入样本被传递时,开关将此输入输入到分支0,并由decimator计算第一个输出值。当更多的输入样本进来时,开关沿逆时针方向通过分支运动−1−2,一直到分支0,每次向每个分支递送一个样本。当开关转到0号分支时,decimator输出下一组输出值。随着数据不断进入,这个过程还在继续。每次开关到达分支0时,十进制输出y [m].decimator有效地输出一个样本它接收的样本。因此,FIR抽取滤波器输出端的采样率为fs/

扩展功能

版本历史

在R2012a中引入