主要内容

dsp。HDLChannelizer

多相滤波器组和快速傅里叶变换优化的HDL代码生成

描述

dsp。HDLChannelizer系统对象™将宽带输入信号分割成多个窄带输出信号。它为流数据应用程序提供硬件速度和区域优化。该对象接受实数据或复杂数据的标量或矢量输入,提供硬件友好的控制信号,并具有可选的输出帧控制信号。通过使用矢量输入,可以实现GSPS吞吐量。该对象实现了一个多相过滤器,每个输入向量元素有一个子过滤器。硬件实现将子滤波器交叉,从而共享每个滤波器乘数(FFT长度/输入的大小)次。该对象实现了相同的管道基数2^2 FFT算法dsp。HDLFFT系统对象。

将输入数据通道化:

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

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

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

创建

描述

信道器= dsp。HDLChannelizer返回一个System对象,信道器,它实现了一个提高余弦滤波器和8点FFT。

例子

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

属性

全部展开

除非另有说明,属性是nontunable,这意味着您不能在调用对象之后更改它们的值。对象在调用时锁定,而释放函数打开它们。

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

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

FFT长度,指定为2的整数次幂。对于HDL代码生成,FFT长度必须在2之间3.和216、包容。

多相滤波器系数,指定为数值向量。如果系数的数目不是的倍数NumFrequencyBands,对象用0填充这个向量。默认的滤波器规格是凸余弦FIR滤波器,rcosdesign(0.25, 2, 4,“√”).您可以指定一个系数向量或调用返回系数值的筛选器设计函数。不支持复系数。金宝app默认情况下,对象将系数转换为与输入相同的数据类型。

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

依赖关系

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

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

  • “与频带数目相同”-输出数据为1-by向量,为FFT长度。

  • '与输入大小相同'—输出数据为1的向量,为输入向量的大小。

对于两种输出大小,输出顺序都是自然的。

FFT输出缩放,指定为:

  • 真正的FFT实现了一个整体的1/N缩放因子,将每个管道阶段的结果缩放2。这种调整使FFT的输出保持在与输入相同的幅度范围内。

  • - FFT通过在每个阶段增加一个字节来避免溢出。

舍入模式用于定点操作。当输入是任意整数或定点数据类型时,对象使用定点算法进行内部计算。当输入为时,此选项不应用.每个FFT阶段在旋转因子相乘之后但在蝴蝶之前。当将系数和多相过滤器的输出转换为您指定的数据类型时,也可以进行舍入。

溢出处理用于定点操作。当输入是任意整数或定点数据类型时,对象使用定点算法进行内部计算。当输入为时,此选项不应用.此选项适用于将多相过滤器的系数和输出转换为您指定的数据类型。

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

对象使用您指定的舍入和溢出设置将多相过滤器系数转换为此数据类型。当您选择继承:与输入相同的字长(默认),对象使用fi ()best-precision规则。

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

默认情况下,FFT逻辑不改变数据类型。当你关闭正常化, FFT算法通过在每个阶段增加单词长度1位来避免溢出。

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

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

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

使用

描述

例子

dataOutvalidOut) =信道器(dataInvalidIn滤波并计算快速傅里叶变换,然后返回频率通道,dataOut,在输入信号中检测到,dataIn,当validIn1(真正的)。的validInvalidOut参数是逻辑标量,分别指示输入和输出信号的有效性。

dataOutvalidOut) =信道器(dataInvalidIn重置返回频率通道,dataOut,在输入信号中检测到,dataIn,当validIn1(真正的)和重置0(假)。当重置1(true),该对象停止当前计算并清除所有内部状态。

要使用此语法,请设置ResetInputPort财产真正的.例如:

信道器= dsp。HDLChannelizer (...,“ResetInputPort”,真正的);...[dataOut, validOut] =信道器(dataIn validIn,重置)

dataOutstartOutendOutvalidOut) =信道器(___返回频率通道,dataOut,根据前面任何语法的输入参数计算。startOut1(true)用于输出数据帧的第一个样本。endOut1(true)用于一帧输出数据的最后一个样本。

要使用此语法,请设置StartOutputPortEndOutputPort属性真正的.例如:

信道器= dsp。HDLChannelizer (...,“StartOutputPort”,真的,‘EndOutputPort’,真正的);...[dataOut, startOut endOut validOut] =信道器(dataIn validIn)

输入参数

全部展开

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

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

物体不接受uint64数据。

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

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

数据类型:逻辑

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

依赖关系

要启用此参数,请设置ResetInputPort真正的

数据类型:逻辑

输出参数

全部展开

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

  • 如果你设置OutputSize“与频带数目相同”(默认),输出数据为1-by-向量,为FFT长度。

  • 如果你设置OutputSize'与输入大小相同',则输出数据为1的向量,为输入向量的大小。

输出顺序对于任何一种输出大小都是自然的。数据类型是FilterOutputDataType以及避免溢出所必需的FFT位增长。

作为逻辑标量返回的输出数据的有效性。对象集validOut1(正确),并附有有效样本dataOut

数据类型:逻辑

输出帧的第一个样本,作为逻辑标量返回。对象集startOut1(true)在第一个有效样品上dataOut

依赖关系

要启用此参数,请设置StartOutputPort真正的

数据类型:逻辑

输出帧的最后一个样本,作为逻辑标量返回。对象集endOut1(true)在最后一个有效的样品上dataOut

依赖关系

要启用此参数,请设置EndOutputPort真正的

数据类型:逻辑

对象的功能

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

发行版(obj)

全部展开

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

例子

全部折叠

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

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

N = 8;loopCount = 1024;offset = [-40 -30 -20 10 15 25 35 -15];sinewave = dsp。SineWave (“ComplexOutput”,真的,“频率”...补偿+ (375:125:500),“SamplesPerFrame”, loopCount);简介= dsp。简介(“ShowLegend”,真的,...“SampleRate”, sinewave.SampleRate / N);

编写一个函数来创建和调用通道器System对象™。您可以从这个函数生成HDL。

函数[你,validOut] = HDLChannelizer8(阴、validIn)% HDLChannelizer8%使用dsp处理一个数据样本。HDLChannelizer系统对象% yIn是一个定点标量或列向量。% validIn是一个逻辑标量值。你可以从这个函数生成HDL代码。持续的channelize8;coder.extrinsic (“助教”);coder.extrinsic (dsp。信道器”);如果isempty (channelize8)%使用来自非hdl信道器的滤波器,或自备滤波器。信道器= coder.const (dsp.Channelizer (“NumFrequencyBands”, 8));多项式系数= coder.const (tf(信道器));channelize8 = dsp。HDLChannelizer (“NumFrequencyBands”8“FilterCoefficients”、多项式系数);结束[你,validOut] = channelize8(阴,validIn);结束

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

y = 0 (loopCount / N, N);validOut = false (loopCount / N, 1);yValid = 0 (loopCount / (N * N), N);Reps =1:20 x = fi(sum(sinwave (),2),1,18);循环= 1:长度(x) [y(循环,:),validOut(循环)]= HDLChannelizer8 (x(循环),真正的);结束yValid = y(validOut == 1,:);简介(yValid);结束

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

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

疏导= dsp。HDLChannelizer (“NumFrequencyBands”, 512);L512 = getLatency(疏导)
L512 = 1118

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

L256 = getLatency(疏导,256)
L256 = 592
N =疏导。NumFrequencyBands
N = 512

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

256年L256v8 = getLatency(疏导,8)
L256v8 = 132

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

疏导。正常化= true; L512n = getLatency(channelize)
L512n = 1118

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

疏导。OutputSize='与输入大小相同';L512r = getLatency(疏导)
L512r = 1084

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

L256rv8 = getLatency(疏导channelize.NumFrequencyBands 8)
L256rv8 = 218

算法

全部展开

中描述的算法信道器HDL优化块引用页面。

扩展功能

介绍了R2017a