主要内容

dsp。HDLFIRRateConverter

为HDL代码生成而优化的上采样、过滤和下采样

描述

dsp。HDLFIRRateConverter系统对象™对输入信号进行上采样、滤波和下采样。它针对HDL代码生成进行了优化,并且每次对每个通道的一个样本进行操作。该对象实现了高效的多相结构,以避免不必要的算术运算和高中间采样率。

对象以的整数因子向上采样l,应用FIR滤波器,并按整数因子的下采样.对象接受并返回控制信号参数,以调整采样流的节奏。流量控制接口的详细介绍请参见流控制

重新采样和过滤输入数据:

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

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

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

创建

描述

HDLFIRRC= dsp。HDLFIRRateConverter返回一个System对象,HDLFIRRC,它对输入的每个通道重新采样。对象以的整数因子向上采样l,应用FIR滤波器,并按整数因子的下采样.默认的L / M是3/2。

例子

HDLFIRRC= dsp。HDLFIRRateConverter (l全国矿工工会设置InterpolationFactor财产l,DecimationFactor财产,以及分子财产全国矿工工会

HDLFIRRC= dsp。HDLFIRRateConverter (___名称,值使用一个或多个名称-值对设置属性。将每个属性名用单引号括起来。例如:

HDLFIRRC = dsp。Num HDLFIRRateConverter (L, M,“ReadyPort”,真的,“RequestPort”,真正的);

属性

全部展开

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

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

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

Upsampling因素,l,指定为正整数。

将采样因子,,指定为正整数标量。

FIR滤波器系数,指定为的降幂矢量z-1

您可以使用信号处理工具箱™滤波器设计函数来生成滤波器系数,例如fir1.设计一个归一化截止频率不大于的低通滤波器分钟(1 / L, 1 /米).对象将内部筛选器状态初始化为零。

启用准备好了对象的输出参数。当启用时,对象返回一个逻辑标量值,准备好了,当你调用对象时。当准备好了1(true),则该对象在下次调用时已准备好接受新的输入样例。

启用请求对象的输入参数。当请求1(true),则该对象在当前调用该对象时返回一个新的输出示例。

舍入模式用于定点操作。当输入为时,此属性不应用类型。“简单”不支持Mode。金宝app

溢出模式用于定点操作。当输入为时,此属性不应用类型。

FIR滤波器系数的数据类型,指定为anumerictype(年代,西城,fl)对象与signedness字长,部分长度属性。

输出数据样本的数据类型,指定为'与输入相同的字长”、“完整的精度’或anumerictype(年代,西城,fl)对象与signedness字长,部分长度属性。

使用

描述

例子

dataOutvalidOut= hdlfirrc (dataInvalidIn重新取样dataIn根据InterpolationFactorl),DecimationFactor)的属性。要避免在使用此语法时丢弃样本,请应用新的有效输入样本,使用validIn设置为真正的,只是每一个装天花板(L / M)调用对象。对象集validOut真正的dataOut是新的有效样品。

例子

dataOut准备好了validOut= hdlfirrc (dataInvalidIn重新采样输入数据并返回准备好了指示对象是否可以在下一次调用时接受一个新的样本。

属性时应用此语法ReadyPort财产真正的.例如:

HDLFIRRC = dsp。HDLFIRRateConverter (...,“ReadyPort”,真正的);...[dataOut,validOut,ready] = rateConverter(dataIn,validIn);

例子

dataOut准备好了validOut= hdlfirrc (dataInvalidIn请求重新采样输入数据,指示对象是否可以接受新的采样,如果请求真正的,返回下一个可用示例。

属性时应用此语法RequestPort财产真正的.例如:

HDLFIRRC = dsp。HDLFIRRateConverter (...,“RequestPort”,真正的);...[dataOut,validOut] = rateConverter(dataIn,validIn,request);

您可以连接准备好了对象的下游对象的输出请求上游对象的输入。

输入参数

全部展开

数据输入,指定为标量,或指定为行向量,其中每个元素表示一个独立通道。

数据可以是真实的,也可以是复杂的。

而且数据类型支持模拟,但不支持HD金宝appL代码生成。

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

输入数据的有效性,指定为逻辑标量。

validIn1(true),则对象捕获on的值dataIn.您可以每次应用一个有效的数据示例装天花板(L / M)调用对象。你可以使用可选选项准备好了输出信号,表示该对象何时可以接受新的样品。

数据类型:逻辑

请求一个新的输出示例,指定为逻辑标量。

请求1(true),并且有一个新的输出数据样例可用,则对象返回validOut设置为1(真正的)。如果没有可用的样本,则返回对象validOut设置为0(假)。属性时,对象接受此参数RequestPort财产真正的

数据类型:逻辑

输出参数

全部展开

重新采样和过滤的数据样本,作为标量返回,或作为每个元素代表一个独立通道的向量返回。

而且数据类型支持模拟,但不支持HD金宝appL代码生成。

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

作为逻辑标量返回的输出数据的有效性。

validOut1(true),则数据输出有效。当validOut0(false),则数据输出无效。

数据类型:逻辑

指示对象已准备好接受作为逻辑标量返回的新输入示例。

对象返回准备好了1(true)表示对象可以在下次调用时接受新的输入数据样例。属性时,对象返回此额外输出ReadyPort财产真正的

数据类型:逻辑

对象的功能

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

发行版(obj)

全部展开

一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

将信号从48千赫转换为32千赫dsp。HDLFIRRateConverter系统对象™。

定义输入信号的采样率和长度,以及2 kHz余弦波形。集validIn真正的对于每个样本。

Fs = 48e3;Ns = 100;t = (0:Ns-1).'/Fs;dataIn = cos(2*pi*2e3*t);validIn = true(Ns,1);

PreallocatedataOut而且validOut信号更快的模拟。

dataOut = 0 (Ns,1);validOut = false(Ns,1);

创建System对象。将其配置为使用等纹波滤波器执行2/3倍的速率转换。

分子= firpm(70,[0 0.25 0.32 1],[1 1 0 0]);firrc = dsp.HDLFIRRateConverter(2,3,分子);

调用System对象来执行速率转换并获取每个输出示例。

注意:此对象语法仅在R2016b或更高版本中运行。如果您正在使用较早的版本,请将对象的每次调用都替换为等效的调用一步语法。例如,替换myObject (x)步骤(myObject x)

k = 1:Ns [dataOut(k),validOut(k)] = firrc(dataIn(k),validIn(k));结束

因为输入抽样率高于输出抽样率,不是每个成员的dataOut是有效的。使用validOut从中提取有效样品dataOut

y = dataOut(validOut);

使用逻辑分析器查看输入和输出信号。

La = dsp。logicAnalyzer(“NumInputPorts”4“SampleTime”1 / Fs,“时间间隔”Ns / Fs);modifyDisplayChannel(洛杉矶,1,“名字”“dataIn”“格式”“模拟”“高度”, 8) modifyDisplayChannel (2“名字”“validIn”) modifyDisplayChannel (la 3“名字”“dataOut”“格式”“模拟”“高度”, 8) modifyDisplayChannel (4“名字”“validOut”)拉(dataIn validIn、dataOut validOut)

转换信号从40兆赫到100兆赫使用dsp。HDLFIRRateConverter系统对象™。为了避免在信号上采样时超出对象,手动控制输入速率。

定义输入信号的采样率和长度,以及一个定点余弦波形。

Fs = 40e6;Ns = 50;t = (0:Ns-1).'/Fs;X = fi(cos(2* *1.2e6*t),1,16,14);

定义速率转换参数。使用5的插值因子和2的抽取因子。计算对象多久可以接受一个新的输入样本。

L = 5;M = 2;stepsPerInput = ceil(L/M);numSteps = stepsPerInput*Ns;

生成dataIn而且validIn基于对象接受新样本的频率。

dataIn = 0 (numSteps,1,“喜欢”, x);dataIn(1:stepsPerInput:end) = x;validIn = false(numSteps,1);validIn(1:stepsPerInput:end) = true;

创建System对象。配置它使用指定的因子和等纹波FIR滤波器执行速率转换。

分子= firpm(70,[0 0.15 0.25 1],[1 1 0 0]);rateConverter = dsp.HDLFIRRateConverter(L,M,分子);

创建一个Logic Analyzer来捕获和查看输入和输出信号。

La = dsp。logicAnalyzer(“NumInputPorts”4“SampleTime”1 / Fs,“时间间隔”numSteps / Fs);modifyDisplayChannel(洛杉矶,1,“名字”“dataIn”“格式”“模拟”“高度”, 8) modifyDisplayChannel (2“名字”“validIn”) modifyDisplayChannel (la 3“名字”“dataOut”“格式”“模拟”“高度”, 8) modifyDisplayChannel (4“名字”“validOut”

调用System对象来执行速率转换并获取每个输出示例。调用逻辑分析器将每个样本添加到波形显示中。

注意:此对象语法仅在R2016b或更高版本中运行。如果您正在使用较早的版本,请将对象的每次调用都替换为等效的调用一步语法。例如,替换myObject (x)步骤(myObject x)

k = 1:numSteps [dataOut,validOut] = rateConverter(dataIn(k),validIn(k));洛杉矶(dataIn (k), validIn (k), dataOut, validOut)结束

转换信号从40兆赫到100兆赫使用dsp。HDLFIRRateConverter系统对象™。使用可选的准备好了输出信号以避免在数据上采样时溢出对象。的准备好了信号表示对象可以在下次调用该对象时接受新的数据样本。

定义输入信号的采样率和长度,以及一个定点余弦波形。创建一个SignalSource对象按需提供数据示例。

Fs = 40e6;Ns = 50;t = (0:Ns-1).'/Fs;X = fi(cos(2* *1.2e6*t),1,16,14);inputSource = dsp.SignalSource(x);

定义速率转换参数。使用5的插值因子和2的抽取因子。确定需要转换的对象的调用次数Ns样本。

L = 5;M = 2;numSteps = floor(Ns*L/M);

创建HDL FIR速率转换器系统对象。配置它使用指定的因子和等纹波FIR滤波器执行速率转换。启用可选的准备好了输出端口。

分子= firpm(70,[0 0.15 0.25 1],[1 1 0 0]);rateConverter = dsp。HDLFIRRateConverter(l,米,分子,“ReadyPort”,真正的);

创建一个Logic Analyzer来捕获和查看输入和输出信号。

La = dsp。logicAnalyzer(“NumInputPorts”5,“SampleTime”1 / Fs,“时间间隔”numSteps / Fs);modifyDisplayChannel(洛杉矶,1,“名字”“dataIn”“格式”“模拟”“高度”, 8) modifyDisplayChannel (2“名字”“validIn”) modifyDisplayChannel (la 3“名字”“dataOut”“格式”“模拟”“高度”, 8) modifyDisplayChannel (4“名字”“validOut”) modifyDisplayChannel (la 5“名字”“准备好了”

初始化准备好了信号。对象总是在第一次调用时为输入数据做好准备。

Ready = true;

调用System对象来执行速率转换并获取每个输出示例。当对象指示它准备就绪时,应用一个新的输入样例。否则,设置validIn

注意:此对象语法仅在R2016b或更高版本中运行。如果您正在使用较早的版本,请将对象的每次调用都替换为等效的调用一步语法。例如,替换myObject (x)步骤(myObject x)

k = 1:numSteps如果ready dataIn = inputSource();结束validIn =就绪;[dataOut,validOut,ready] = rateConverter(dataIn,validIn);洛杉矶(dataIn validIn、dataOut validOut,准备)结束

转换信号从40兆赫到100兆赫使用dsp。HDLFIRRateConverter系统对象™。使用可选的请求输入信号控制输出数据速率。对象接收请求信号,它返回一个新的输出数据样本。这个示例通过每秒钟调用对象请求一个输出示例来模拟200mhz的时钟速率。

定义输入信号的采样率和长度,以及一个定点余弦波形。创建一个SignalSource对象按需提供数据示例。

Fs = 40e6;Ns = 50;t = (0:Ns-1).'/Fs;X = fi(cos(2* *1.2e6*t),1,16,14);inputSource = dsp.SignalSource(x);

定义速率转换参数。使用5的插值因子和2的抽取因子。确定需要转换的对象的调用次数Ns样本。

L = 5;M = 2;numSteps = floor(2*Ns*L/M);

创建HDL FIR速率转换器系统对象。配置它使用指定的因子和等纹波FIR滤波器执行速率转换。启用可选的准备好了而且请求港口。

分子= firpm(70,[0 0.15 0.25 1],[1 1 0 0]);rateConverter = dsp。HDLFIRRateConverter(l,米,分子,...“ReadyPort”,真的,...“RequestPort”,真正的);

创建一个逻辑分析仪捕获和查看输入和输出信号。

La = dsp。logicAnalyzer(“NumInputPorts”6“SampleTime”1 / Fs,“时间间隔”numSteps / Fs);modifyDisplayChannel(洛杉矶,1,“名字”“dataIn”“格式”“模拟”“高度”, 8) modifyDisplayChannel (2“名字”“validIn”) modifyDisplayChannel (la 3“名字”“请求”) modifyDisplayChannel (la 4“名字”“dataOut”“格式”“模拟”“高度”, 8) modifyDisplayChannel (5“名字”“validOut”) modifyDisplayChannel (la 6“名字”“准备好了”

生成一个信号,每隔一秒调用该对象就请求一个新的输出示例。

请求= false(numSteps,1);Request (1:2:end) = true;

初始化准备好了信号。对象总是在第一次调用时为输入数据做好准备。

Ready = true;

调用System对象来执行速率转换并获取每个输出示例。当对象指示它准备就绪时,应用一个新的输入样例。否则,设置validIn.对象返回有效的输出样本请求设置为真正的

注意:此对象语法仅在R2016b或更高版本中运行。如果您正在使用较早的版本,请将对象的每次调用都替换为等效的调用一步语法。例如,替换myObject (x)步骤(myObject x)

k = 1:numSteps如果ready dataIn = inputSource();结束validIn =就绪;[dataOut,validOut,ready] = rateConverter(dataIn,validIn,request(k));洛杉矶(dataIn validIn,请求(k), dataOut, validOut,准备好了)结束

创建一个针对HDL代码生成的速率转换函数,以及一个测试平台来执行它。该功能将信号从40 MHz转换为100 MHz。为了避免超出对象,试验台手动控制输入速率。

定义输入信号的采样率和长度,以及一个定点余弦波形。

Fs = 40e6;Ns = 50;t = (0:Ns-1).'/Fs;X = fi(cos(2* *1.2e6*t), 1,16,14);

定义速率转换参数。使用5的插值因子和2的抽取因子。计算对象接受新数据样本的频率。

L = 5;M = 2;stepsPerInput = ceil(L/M);numSteps = stepsPerInput*Ns;

生成dataIn而且validIn基于对象接受新样本的频率。

dataIn = 0 (numSteps,1,“喜欢”, x);dataIn(1:stepsPerInput:end) = x;validIn = false(numSteps,1);validIn(1:stepsPerInput:end) = true;

创建一个Logic Analyzer来捕获和查看输入和输出信号。

La = dsp。logicAnalyzer(“NumInputPorts”4“SampleTime”1 / Fs,“时间间隔”numSteps / Fs);modifyDisplayChannel(洛杉矶,1,“名字”“dataIn”“格式”“模拟”“高度”, 8) modifyDisplayChannel (2“名字”“validIn”) modifyDisplayChannel (la 3“名字”“dataOut”“格式”“模拟”“高度”, 8) modifyDisplayChannel (4“名字”“validOut”

编写一个创建并调用System对象的函数。

注意:此对象语法仅在R2016b或更高版本中运行。如果您正在使用较早的版本,请将对象的每次调用都替换为等效的调用一步语法。例如,替换myObject (x)步骤(myObject x)

函数[dataOut,validOut] = HDLFIRRC5_2(dataIn,validIn)% HDLFIRRC5_2%使用dsp处理一个样本数据。HDLFIRRateConverter系统%的对象。dataIn是一个定点标量值。validIn是逻辑标量值。您可以从这个函数生成HDL代码。持续的firrc5_2;如果isempty (firrc5_2)分子= firpm(70年,[0,酒精含量为1],[1 1 0,0]);firrc5_2 = dsp.HDLFIRRateConverter(5,2,分子);结束[dataOut,validOut] = firrc5_2(dataIn,validIn);结束

通过为每个数据样本调用函数来重新采样信号。

k = 1:numSteps [dataOut,validOut] = HDLFIRRC5_2(dataIn(k),validIn(k));洛杉矶(dataIn (k), validIn (k), dataOut, validOut)结束

算法

全部展开

节点实现的算法FIR率转换HDL优化块引用页。

扩展功能

在R2015b中引入