主要内容

dsp.HDLIFFT

逆快速傅里叶变换- HDL代码生成进行了优化

描述

高密度脂蛋白传输线系统对象™提供了两种架构优化吞吐量或区域。使用流基数2 ^ 2为高通量应用程序架构。此体系结构支持标量或矢量输入数据。金宝app您可以实现giga-sample-per-second (gsp)吞吐量使用向量输入。使用破裂为最低基数2架构资源实现,尤其是大FFT大小。你的系统必须能够容忍丛发性数据和更高的延迟。这种架构只支持标量输入数据。金宝app对象接受真实的或复杂的数据,提供hardware-friendly控制信号,和可选的输出帧控制信号。

计算逆快速傅里叶变换:

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

  2. 调用对象的参数,就好像它是一个函数。

了解更多关于系统对象是如何工作的,看到的系统对象是什么?

创建

描述

IFFT_N= dsp.HDLIFFT返回一个高密度脂蛋白传输线系统对象,IFFT_N,执行一个快速傅里叶变换。

例子

IFFT_N= dsp.HDLIFFT(名称,值)设置使用一个或多个属性名称-值对。在单引号附上每个属性的名字。

例子:ifft128 = dsp.HDLIFFT (' FFTLength ', 128)

属性

全部展开

属性,除非另有注明nontunable后,这意味着你不能改变它们的值调用对象。对象锁当你叫他们,释放函数打开它们。

如果一个属性可调在任何时候,你可以改变它的值。

改变属性值的更多信息,请参阅系统设计在MATLAB使用系统对象

硬件实现中,指定为:

  • “流基数2 ^ 2”——低延迟架构。金宝app当您使用支持giga-sample-per-second (gsp)吞吐量向量输入。

  • “破灭基数2”—最小资源架构。不支持向量输入当您选择这个架构。金宝app当你使用此体系结构中,输入数据必须符合准备好了反压力信号。波形显示这个协议,看到第三图时间图部分。

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

的输出数据,指定为:

  • 真正的——相对于输入输出通道元素有点颠倒顺序。

  • ——以线性顺序输出通道元素。

传输线算法计算输出的倒序输入。当你请求输出相同的顺序输入,算法执行额外的反转操作。输出的命令的更多信息,请参阅线性和Bit-Reversed输出顺序

预期的输入数据,指定为:

  • 真正的——以bit-reversed顺序输入通道元素。

  • ——以线性顺序输入通道元素。

传输线算法计算输出的倒序输入。当你请求输出相同的顺序输入,算法执行额外的反转操作。输出的命令的更多信息,请参阅线性和Bit-Reversed输出顺序

输出比例,指定为:

  • 真正的——整个1 /对象实现N比例因子每个蝴蝶的输出乘法除以2。这种调整使传输线的输出相同的振幅范围作为输入。

  • ——避免溢出对象通过增加单词长度每只蝴蝶后由一位乘法。的增长都是相同的架构。

使用的数据点数量为一个FFT计算,指定为2间2的整数次幂3和216。对象接受FFT长度在这个范围之外,但他们并不支持HDL代码生成。金宝app

启用重置输入参数的对象。当重置真正的,对象停止计算和清除所有的内部状态。

启用startOut输出参数的对象。启用时,该对象返回一个额外的输出信号真正的在第一个周期的每个有效输出帧。

启用endOut输出参数的对象。启用时,该对象返回一个额外的输出信号真正的在第一个周期的每个有效输出帧。

舍入模式用于定点操作。当输入整数或定点数据类型,传输线算法为内部使用定点算术计算。这个选项不适用,当输入单引号或双类型。舍入适用于捻系数乘法和缩放操作。

使用

描述

例子

(Y,validOut)= IFFT_N (X,validIn)返回逆快速傅里叶变换(传输线),Y的输入,X,当validIn真正的validInvalidOut逻辑标量,显示输入和输出信号的有效性,分别。

(Y,validOut,准备好了)= IFFT_N (X,validIn)返回逆快速傅里叶变换(传输线)当使用破裂基数2体系结构。的准备好了信号表明当对象可用内存接受新的输入样本。你必须申请输入数据有效的信号只有当准备好了1(真正的)。忽略了输入的对象数据有效的信号时准备好了0(假)。

使用这个语法,设置体系结构财产“破灭基数2”。例如:

IFFT_N = dsp.HDLIFFT (___,“架构”,“破灭基数2”);[y, validOut,准备]= IFFT_N (x, validIn)

(Y,startOut,endOut,validOut)= IFFT_N (X,validIn)还返回帧控制信号startOutendOutstartOut真正的在第一个示例输出数据的帧。endOut真正的过去的样本输出数据的帧。

使用这个语法,设置StartOutputPortEndOutputPort属性真正的。例如:

IFFT_N = dsp.HDLIFFT (___,“StartOutputPort”,真的,“EndOutputPort”,真正的);[y, startOut, endOut, validOut] = IFFT_N (x, validIn)

(Y,validOut)= IFFT_N (X,validIn,resetIn)返回传输线,Y,当validIn真正的resetIn。当resetIn真正的,对象停止当前的计算和清除所有的内部状态。

使用这个语法,设置ResetInputPort财产真正的。例如:

IFFT_N = dsp.HDLIFFT (___,“ResetInputPort”,真正的);[y, validOut] = IFFT_N (x, validIn resetIn)

(Y,startOut,endOut,validOut)= IFFT_N (X,validIn,resetIn)返回传输线,Y使用所有可选的控制信号。您可以使用任何语法的组合可选端口。

输入参数

全部展开

输入数据,指定为一个标量或真实的或复杂的值的列向量,在定点或整数格式。支持向量的输入金宝app“流基数2 ^ 2”体系结构。向量的大小必须是2的幂不大于1和64之间FFT长度。

对仿真数据类型支持,但不是为H金宝appDL代码生成。

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

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

数据类型:逻辑

重置内部状态,指定为一个逻辑标量。要启用这个论点,设置ResetInputPort财产真正的

数据类型:逻辑

输出参数

全部展开

输出数据,作为一个标量返回或真实或复杂的值的列向量。输出格式输入数据的格式相匹配。

表明对象的内存用于输入数据,作为一个逻辑标量返回。当您选择返回该输出“破灭基数2”体系结构。当你使用此体系结构中,您必须输入数据有效的信号只有当准备好了1(真正的)。对象忽略任何输入数据有效的信号时准备好了0(假)。波形显示这个协议,看到第三图时间图部分。

数据类型:逻辑

第一个示例的输出帧,作为一个逻辑标量返回。要启用这个论点,设置StartOutputPort财产真正的

数据类型:逻辑

最后的样本输出帧,作为一个逻辑标量返回。要启用这个论点,设置EndOutputPort财产真正的

数据类型:逻辑

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

数据类型:逻辑

对象的功能

使用一个目标函数,指定系统对象作为第一个输入参数。例如,释放系统资源的系统对象命名obj使用这个语法:

发行版(obj)

全部展开

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

例子

全部折叠

创建规范和输入信号。这个示例使用了一个128点FFT。

N = 128;Fs = 40;t = (0: n - 1) / Fs;x =罪(2 *π* 15 * t) + 0.75 * cos(2 *π* 10 * t);y = x + .25 * randn(大小(x));y_fixed = sfi (y, 32岁,16);等待= 0 (1,“喜欢”,y_fixed);

计算信号的FFT作为传输线的输入对象。

注意:这个对象语法只运行在R2016b或更高版本。如果您使用的是较早的版本中,每个对象的调用替换为等价的一步语法。例如,替换myObject (x)步骤(myObject x)

hdlfft = dsp.HDLFFT (“FFTLength”N“BitReversedOutput”、假);Yf = 0 (1, 4 * N);validOut = false (1, 4 * N);循环= 1:1:N (Yf(循环),validOut(循环)]= hdlfft(复杂(y_fixed(循环),真的);结束循环= N + 1:1:4 * N [Yf(循环),validOut(循环)]= hdlfft(复杂的(等待),假);结束Yf = Yf (validOut = = 1);

画出单面振幅谱。

情节(Fs / 2 * linspace (0, 1, N / 2), 2 * abs (Yf (1: N / 2) / N))标题(“单面噪声信号的振幅谱y (t) ')包含(的频率(赫兹))ylabel (FFT (f)的输出)

选择频率持有的大部分能量信号。的cumsum函数不接受定点参数,所以数据转换回

[Ysort,我]=排序(abs(双(转置(Yf (1: N)))), 1,“下”);Ysort_d =双(Ysort);CumEnergy =√cumsum Ysort_d。^ 2)) /规范(Ysort_d);j =找到(CumEnergy > 0.9, 1);disp ([的FFT系数代表90%的,的总能量序列:殷,num2str (j)]) = 0 (N, 1);阴(我(1:j)) = Yf (i (1: j));
的FFT系数的数量占总能量的90%序列:4

编写一个函数,创建和调用传输线系统对象™。你可以从这个函数生成高密度脂蛋白。

函数[你,validOut] = HDLIFFT128(阴、validIn)% HDLIFFT128使用dsp %过程一个样本的数据。HDLIFFT系统对象(TM)%阴是一个定点标量或列向量。% validIn是一个逻辑标量。%从这个函数可以生成HDL代码。持续的ifft128;如果isempty (ifft128) ifft128 = dsp.HDLIFFT (“FFTLength”,128);结束[你,validOut] = ifft128(阴,validIn);结束

通过调用函数计算传输线为每个数据样本。

Xt = 0 (1,3 * N);validOut = false (1, 3 * N);循环= 1:1:N (Xt(循环),validOut(循环)]= HDLIFFT128(复杂(阴(循环),真正的);结束循环= N + 1:1:3 * N [Xt(循环),validOut(循环)]= HDLIFFT128(复杂的(0),假);结束

丢弃无效的输出样本。然后检查输出与输入信号进行比较。原始的输入是绿色的。

Xt = Xt (validOut = = 1);Xt = bitrevorder (Xt);规范(x变换(Xt (1: N)))图茎(真实(Xt))图茎(真正的(x),“——g”)
ans = 0.7863

创建规范和输入信号。这个示例使用了一个128点FFT和计算变换一次16个样本。

N = 128;V = 16;Fs = 40;t = (0: n - 1) / Fs;x =罪(2 *π* 15 * t) + 0.75 * cos(2 *π* 10 * t);y = x + .25 * randn(大小(x));y_fixed = sfi (y, 32岁,24);y_vect =重塑(y_fixed、V、N / V);

计算信号的FFT,作为传输线的输入对象。

注意:这个对象语法只运行在R2016b或更高版本。如果您使用的是较早的版本中,每个对象的调用替换为等价的一步语法。例如,替换myObject (x)步骤(myObject x)

hdlfft = dsp.HDLFFT (“FFTLength”N);loopCount = getLatency (hdlfft N V) + N / V;Yf = 0 (V, loopCount);validOut = false (V, loopCount);循环= 1:1:loopCount如果(mod(循环,N / V) = = 0)我= N / V;其他的我= mod(循环,N / V);结束[Yf:循环),validOut(循环)]= hdlfft(复杂(y_vect(:,我)),(循环< = N / V));结束

画出单面振幅谱。

C = Yf (:, validOut = = 1);Yf_flat = C (:);年= bitrevorder (Yf_flat);情节(Fs / 2 * linspace (0, 1, N / 2), 2 * abs(年(1:N / 2) / N))标题(“单面噪声信号的振幅谱y (t) ')包含(的频率(赫兹))ylabel (FFT (f)的输出)

选择频率持有的大部分能量信号。的cumsum函数不接受定点参数,所以数据转换回

[Ysort,我]=排序(abs(双(年(1:N))), 1,“下”);CumEnergy =√cumsum Ysort。^ 2)) /规范(Ysort);j =找到(CumEnergy > 0.9, 1);disp ([的FFT系数代表90%的,的总能量序列:殷,num2str (j)]) = 0 (N, 1);阴(我(1:j)) =年(i (1: j));YinVect =重塑(阴、V、N / V);
的FFT系数的数量占总能量的90%序列:4

编写一个函数,创建和调用传输线系统对象™。你可以从这个函数生成高密度脂蛋白。

函数[你,validOut] = HDLIFFT128V16(阴、validIn)% HDLFFT128V16% 16-sample向量FFT数据的过程%阴是一个定点列向量。% validIn是一个逻辑标量值。%从这个函数可以生成HDL代码。持续的ifft128v16;如果isempty (ifft128v16) ifft128v16 = dsp.HDLIFFT (“FFTLength”,128)结束[你,validOut] = ifft128v16(阴,validIn);结束

通过调用函数计算传输线为每个数据样本。

Xt = 0 (V, loopCount);validOut = false (V, loopCount);循环= 1:1:loopCount如果(mod(循环,N / V) = = 0)我= N / V;其他的我= mod(循环,N / V);结束(Xt(:,循环),validOut(循环)]= HDLIFFT128V16(复杂(YinVect(:,我)),(循环< = N / V));结束
ifft128v16 = dsp。HDLIFFT属性:FFTLength: 128体系结构:“流基数2 ^ 2”ComplexMultiplication:“使用4乘数和2条”BitReversedOutput:真正的BitReversedInput:假正常化:真正的使用可以显示所有属性

丢弃无效的输出样本。然后检查输出与输入信号进行比较。原始的输入是绿色的。

C = Xt (:, validOut = = 1);Xt = C (:);Xt = bitrevorder (Xt);规范(x-Xt (1: N))图茎(真实(Xt))图茎(真正的(x),“——g”)
ans = 0.7863

对象的延迟随FFT长度和向量的大小。使用getLatency函数来找到一个特定的配置的延迟。之间的延迟是周期的数量第一次有效输入和第一个有效输出,假设输入是连续的。

创建一个新的dsp.HDLIFFT对象和请求的延迟。

hdlifft = dsp.HDLIFFT (“FFTLength”,512);L512 = getLatency (hdlifft)
L512 = 599

请求的延迟信息相似的对象有不同的FFT长度。不改变原始的属性对象。当你不指定一个向量长度,假定标量函数的输入数据。

L256 = getLatency (hdlifft, 256)
L256 = 329
N = hdlifft.FFTLength
N = 512

请求的延迟信息接受eight-sample向量输入类似的对象。

256年L256v8 = getLatency (hdlifft, 8)
L256v8 = 93

使传输线的比例在每个阶段。的延迟不会改变。

hdlifft。N或malize = true; L512n = getLatency(hdlifft)
L512n = 599

请求相同的输出订单作为输入订单。这个设置增加了延迟,因为对象必须收集输出之前重新排序。

hdlifft。BitReversedOutput = false;L512r = getLatency (hdlifft)
L512r = 1078

算法

全部展开

扩展功能

另请参阅

对象

介绍了R2014b