主要内容

dsp.hdlchannelizer

多相过滤器银行和快速傅里叶变换 - 针对HDL码生成进行了优化

描述

dsp.hdlchannelizerSystem Object™将宽带输入信号分开到多个窄带输出信号中。它为流数据应用提供硬件速度和区域优化。该物体接受RALAR或VERACT数据的标量或矢量输入,提供硬件友好的控制信号,并具有可选的输出帧控制信号。您可以通过使用向量输入来实现每秒千兆样本(GSP)吞吐量。该对象实现了一个多相滤波器,每个输入矢量元素一个子滤波器。硬件实现交织了子漂白,导致每个过滤器乘数共享(FFT长度/输入的大小)次。该对象实现了相同的流水线基数2 ^ 2 fft算法dsp.HDLFFT系统对象。

要将输入数据通道化,请执行以下操作:

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

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

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

创建

描述

信道发生器= dsp.hdlchannelizer返回一个系统对象,信道发生器,它实现了升余弦滤波器和8点FFT。

例子

信道发生器= dsp.hdlchannelizer(名称,价值使用一个或多个名称-值对设置属性。将每个属性名用单引号括起来。

属性

全部展开

除非另有说明,属性是nontunable,这意味着在调用对象后无法更改其值。当您调用它们时,对象锁定释放函数将解锁它们。

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

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

FFT长度,指定为两个的整数功率。对于HDL代码生成,FFT长度必须在2之间3.和216包含全部费用

多相滤波器系数,指定为数值向量。如果系数的数目不是的倍数NumFrequencyBands,对象用0填充这个向量。默认的滤波器规格是凸余弦FIR滤波器,RCOS设计(0.25,2,4,'sqrt')。您可以指定系数的向量或对返回系数值的过滤器设计函数的呼叫。不支持复数系数。金宝app默认情况下,对象将系数投递到与输入相同的数据类型。

HDL实现复杂乘数,指定为'使用4个乘法器和2个加法器''使用3个乘数和5个加法器'。根据您的合成工具和目标设备,可以更快或更小。

依赖关系

此选项仅适用于使用基数2^2体系结构的情况。

输出数据的大小,指定为:

  • “与频带数目相同”-输出数据是一个1-x-m向量,在哪里m是FFT长度。

  • '与输入大小相同'-输出数据是一个m-by-1向量,其中m输入矢量大小。

输出顺序对于输出大小都有位自然。

FFT输出缩放,指定为:

  • 符合事实的- FFT实现总体1 /N.通过将每个管道阶段的结果缩放到2的缩放因子。该调整将FFT的输出保持在与其输入相同的幅度范围内。

  • 错误的-FFT通过在每个阶段将字长增加一位来避免溢出。

舍入模式用于固定点操作。当输入是任何整数或定点数据类型时,该对象使用用于内部计算的固定点算法。输入时不适用此选项。每个FFT阶段在旋转因子乘以但在蝴蝶之前。在将系数和多相滤波器的输出铸造到您指定的数据类型时,也会发生舍入。

溢出处理用于固定点操作。当输入是任何整数或定点数据类型时,该对象使用用于内部计算的固定点算法。输入时不适用此选项。此选项适用于将多相滤波器的系数和输出强制转换为指定的数据类型。

FFT算法通过缩放每个级的输出来避免溢出(正常化启用),或在每个阶段将字长增加1位(正常化禁用)。

使用您指定的舍入和溢出设置,对象将多相滤波器系数投入到此数据类型。当你选择继承:与输入相同的字长(默认),对象选择二进制点使用fi()最好的精确规则。

多相滤波器输出的数据类型,指定为“与输入的字长相同”'完整精度',或numerictype.对象。对象使用您指定的舍入和溢出设置,将多相滤波器的输出(FFT的输入)转换为该数据类型。当你指定“与输入的字长相同”,该对象通过考虑滤波器系数的值和输入数据类型的范围来选择最佳精度二进制点。

默认情况下,FFT逻辑不会更改数据类型。当你禁用时正常化,FFT算法通过在每个阶段将字长增加1位来避免溢出。

启用重置对对象的输入参数。什么时候重置1(true),对象停止计算并清除所有内部状态。

启用星头对象的输出参数。当启用时,对象返回一个额外的输出信号,即1(true)在每个有效输出帧的第一个周期上。

启用endOut对象的输出参数。当启用时,对象返回一个额外的输出信号,即1(true)在每个有效输出帧的第一个周期上。

用法

描述

例子

[数据输出validOut) =信道器(dataInvidmin过滤并计算快速傅里叶变换,并返回频率通道,数据输出,在输入信号中检测到,dataIn, 什么时候vidmin1(真的)。这vidminvalidOut参数是分别表示输入和输出信号的有效性的逻辑标量。

[数据输出validOut) =信道器(dataInvidmin重置返回频率通道,数据输出,在输入信号中检测到,dataIn, 什么时候vidmin1(正确)及重置0.(错)。什么时候重置1(true),对象停止当前计算并清除所有内部状态。

要使用此语法,请设置ResetInputPort财产符合事实的。例如:

Connorizer = dsp.hdlchannelizer(...,“ResetInputPort”,真正的);...[DataOut,Advant] =通道器(数据,有效,重置)

[数据输出星头endOutvalidOut) =信道器(___返回频率通道,数据输出,从以前的任何语法的输入参数计算。星头1(true)用于输出数据帧的第一个样本。endOut1(true)对于输出数据帧的最后一个样本。

要使用此语法,请设置StartOutputPortEndOutputport.属性符合事实的。例如:

Connorizer = dsp.hdlchannelizer(...,'startoutputport',true,'endoptport',true);...[DataOut,Sportout,Endout,Advant] =通道程序(数据,有效期)

输入参数

全部展开

输入数据,指定为实值或复数值的标量或列向量。向量大小必须是1到64之间的2的幂,且不大于通道数(FFT长度)。

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

对象不接受uint64数据。

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

输入数据的有效性,指定为逻辑标量。什么时候vidmin1(true)时,对象捕获值ondataIn

数据类型:逻辑

重置指定为逻辑标量的内部状态。什么时候重置1(true),对象停止当前计算并清除内部状态。

依赖关系

要启用此参数,请设置ResetInputPort符合事实的

数据类型:逻辑

输出参数

全部展开

频率通道输出数据,作为行向量返回。

  • 如果你设定输出大小“与频带数目相同”(默认),输出数据是一个1-by-m向量,在哪里m是FFT长度。

  • 如果你设定输出大小'与输入大小相同',输出数据是一个m-by-1向量,其中m输入矢量大小。

输出顺序对于任何一种输出大小都是自然的。数据类型是filteroutputdattype.避免溢出所需的FFT比特增长。

作为逻辑标量返回的输出数据的有效性。对象集validOut1(正确)每个有效样本都在数据输出

数据类型:逻辑

输出帧的第一个样本,作为逻辑标量返回。对象集星头1(true)在第一个有效的样本期间数据输出

依赖关系

要启用此参数,请设置StartOutputPort符合事实的

数据类型:逻辑

输出帧的最后一个示例,作为逻辑标量返回endOut1(true)在最后一个有效的样本期间数据输出

依赖关系

要启用此参数,请设置EndOutputport.符合事实的

数据类型:逻辑

对象功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,要发布命名的系统对象的系统资源obj.,使用此语法:

释放(obj)

全部展开

克拉蒂格 FFT或信道化器计算的延迟
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特性
重置 重置内部状态系统对象

例子

全部崩溃

创建一个包含channelizer对象并支持HDL代码生成的函数。金宝app

创建规范和输入信号。信号具有8个频率通道。

n = 8;loopcount = 1024;偏移= [-40 -30 -20 10 15 25 25 35 -15];sinewave = dsp.sinewave('ComplexOutput'符合事实的“频率”...偏移+( -  375:125:500),'samplesperframe',loopcount);Spectrumanalyzer = DSP.SpectRumanalyzer('陈旧'符合事实的...“SampleRate”,sinewave.samplerge / n);

编写一个创建和调用channelizer系统对象的函数™. 您可以从该函数生成HDL。

作用[yOut,validOut]=HDLChannelizer8(yIn,validIn)%hdlchannelizer8.%使用dsp.HDLChannelizer系统对象处理一个数据样本%yIn是一个定点标量或列向量。% validIn是一个逻辑标量值。%您可以从此功能生成HDL代码。执着的渠道化8;外部编码器(“助教”)编码者(dsp。信道器”);如果isempty (channelize8)%使用来自非HDL通道器的滤波器Coeffs,或提供自己的。信道化器=编码器常数(dsp.channelizer(“NumFrequencyBands”, 8));多项式系数= coder.const (tf(信道器));channelize8 = dsp。HDLChannelizer (“NumFrequencyBands”,8,'filtercoffients',coeff);结尾[yOut,validOut]=channelize8(yIn,validIn);结尾

通过为每个数据样本调用对象来对输入数据进行通道化。

y =零(Loopcount / n,n);验证= false(loopcount / n,1);YVALID = Zeros(Loopcount /(n * n),n);为了reps = 1:20 x = fi(sum(sinewave(),2),1,18);为了循环= 1:长度(x) [y(循环,:),validOut(循环)]= HDLChannelizer8 (x(循环),真正的);结尾YVALID = Y(verigout == 1,:);Spectrumanalyzer(YVALID);结尾

延迟时间dsp.hdlchannelizer对象随着FFT长度和矢量尺寸而变化。使用克拉蒂格函数查找特定配置的延迟。延迟被测量为第一个有效输入和第一个有效输出之间的周期数,假设输入是连续的。过滤系数的个数不影响延迟。将输出大小设置为与输入大小相等可以减少延迟,因为不会保存样本并重新排序。

创建一个dsp.hdlchannelizer对象和请求延迟。

疏导= dsp。HDLChannelizer (“NumFrequencyBands”,512);l512 = getLatency(通道化)
L512 = 1118.

请求具有不同数量的频带(FFT长度)的类似对象的假设延迟信息。原始对象的属性不会改变。

L256 = GetLatency(Channelize,256)
L256 = 592.
N =疏导。N.umFrequencyBands
n = 512.

请求接受8个样本向量输入的类似对象的假设延迟信息。

l256v8 = getLatency(通道,256,8)
L256v8=132

在FFT的每个阶段启用缩放。延迟不变。

channelize.Normalize=true;L512n=getLatency(channelize)
L512n=1118

请求与输入数据相同的输出大小和顺序。延迟会减少,因为对象在输出之前不需要存储和重新排序数据。默认输入大小为标量。

ChannelIze.Outputize =.'与输入大小相同';L512r = getLatency(疏导)
L512r = 1084

检查输入和输出大小相同的向量输入实现的延迟。指定FFT长度的当前值和8个样本的向量大小。延迟减少,因为当输入是向量时,对象并行计算结果。

L256rv8=getLatency(channelize,channelize.NumFrequencyBands,8)
L256rv8 = 218

算法

全部展开

此对象实现了描述的算法声明器HDL优化块引用页。

扩展功能

在R2017A介绍