主要内容

dsp。FIRDecimator

多相冷杉杀害多人者

描述

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

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

FIR抽取器包含一个抗混叠FIR滤波器,后面跟着一个下采样器。

注意,实际的对象算法实现了直接形式的FIR多相结构,与图中描述的组合系统等效有效。有关更多细节,请参见算法

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

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

  2. 调用带有参数的对象,就像调用函数一样。

要了解更多关于System对象如何工作的信息,请参见什么是系统对象?

在特定条件下,这个System对象还支持SIMD代码生成。万博1manbetx有关详细信息,请参见代码生成

创建

描述

例子

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

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

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

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

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

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
复数的支持:万博1manbetx是的

指定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滤波器,全国矿工工会,对输入信号进行decimate。该配置仅在“NumeratorSource”属性设置为输入端口的

输入参数

全部展开

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

该对象支持可变大小的输入万博1manbetx,不支持复杂的无符号定点输入。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|fi
复数的支持:万博1manbetx是的

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

依赖关系

仅当“NumeratorSource”属性设置为输入端口的

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|fi
复数的支持:万博1manbetx是的

输出参数

全部展开

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

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|fi
复数的支持:万博1manbetx是的

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放名为obj,使用以下语法:

发行版(obj)

全部展开

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

例子

全部折叠

将正弦波的和分别取2和4的倍数。

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

从一个角频率为的余弦波开始 π 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)包含一个轴对象和其他类型为uitoolbar、uimenu的对象。标题为幅度响应(dB)的axis对象包含两个类型为line的对象。

毁掉了2

将余弦信号取2倍。

y = firdecim (x);

画出原始信号和decimated信号。为了将两个信号绘制在同一个图上,需要得到时间仿射变换参数。使用这些参数来计算输出样本时间。的 n th 输出采样时间等于 规模 × n + 延迟

规模= 1 / firdecim.DecimationFactor;延迟=长度(firdecim.Numerator) / (2 * firdecim.DecimationFactor);nx =(0:长度(x) 1);泰=((0:长度(y) 1)延迟)/规模;

经过短暂的转换后,输出收敛到频率的余弦 π 2 正如所料,它是输入信号频率的两倍 π 4 .由于抽取因子为2,输出样本与其他输入样本重合。

茎(泰,y,“填充”, MarkerSize = 4);持有;茎(nx x);持有;Xlim ([-10,22]) ylim([-2.5 2.5]) legend(“Decimated by 2 (y)”“输入信号(x)”);

图中包含一个axes对象。坐标轴对象包含两个stem类型的对象。这些对象表示Decimated 2 (y),输入信号(x)。

在输入和抽取中添加一个高频组件

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

Xhigh = x + 0.2*sin(2*pi/3*(0:95)');Release (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]) legend(“被2个(yhigh)杀死”...'输入信号加高音(xhigh)'...'Decimated by 2 - low tone only (y)');

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

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

现在把它取4倍。为了根据新的抽取因子自动更新滤波器设计,请设置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)包含一个轴对象和其他类型为uitoolbar、uimenu的对象。标题为幅度响应(dB)的axis对象包含两个类型为line的对象。

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

yAuto = firdecim (xhigh);

画出输入信号,加上高频分量,低频分量乘以1/2,再减去信号。重新计算时间仿射变换参数,因为抽取因子已经改变。

规模= 1 / firdecim.DecimationFactor;延迟=长度(firdecim.Numerator) / (2 * firdecim.DecimationFactor);tyAuto =((0:长度(yAuto) 1)延迟)/规模;茎(tyAuto yAuto,“填充”, MarkerSize = 4);持有;茎(nx xhigh);茎(nx、x / 2”男:“, MarkerSize = 7);持有;Xlim ([-20,36]) ylim([-2.5 2.5]) legend(“Decimated by 4 (yAuto)”...“添加了高频分量的输入信号(xhigh)”...'低音调输入缩放1/2');

图中包含一个axes对象。axis对象包含3个stem类型的对象。这些对象表示Decimated 4 (yAuto),输入信号与高频组件添加(xhigh),低音调输入缩放1/2。

将音频信号的采样率降低2倍,并使用audioDeviceWriter对象。

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

注意:audioDeviceWriter中不支持系统对象™万博1manbetxMATLAB在线

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

误判率= 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属性: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(zFIR滤波器的多相元件是什么H(z)。

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

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

这是多费率的贵族身份。

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

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

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

扩展功能

定点转换
使用定点设计器设计和模拟定点系统。

介绍了R2012a