主要内容

dsphdl.FFT

计算快速傅里叶变换(FFT)

描述

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

计算快速傅里叶变换:

  1. 创建dsphdl.FFT对象并设置其属性。

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

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

创建

描述

FFT_N= dsphdl.FFT返回一个高密度脂蛋白FFT系统对象,FFT_N,执行一个快速傅里叶变换。

例子

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

例子:fft128 = dsphdl.FFT (' FFTLength ', 128)

属性

全部展开

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

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

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

硬件实现中,指定为:

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

  • “破灭基数2”—最小资源架构。不支持向量输入当您选择这个架构。金宝app当你使用此体系结构中,输入数据必须符合准备好了反压力信号。

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

的输出数据,指定为:

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

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

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

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

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

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

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

输出比例,指定为:

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

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

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

启用重置输入参数的对象。当重置1(真正的)对象停止当前的计算和清除内部状态。当重置0(假)和输入有效的1(真正的),对象捕捉数据进行处理。

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

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

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

使用

描述

例子

(Y,validOut)= FFT_N (X,validIn)返回FFT,Y的输入,X,当validIn真正的validInvalidOut逻辑标量,显示输入和输出信号的有效性,分别。

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

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

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

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

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

FFT_N = dsphdl.FFT (___,“StartOutputPort”,真的,“EndOutputPort”,真正的);[y, startOut, endOut, validOut] = FFT_N (x, validIn)

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

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

FFT_N = dsphdl.FFT (___,“ResetInputPort”,真正的);[y, validOut] = FFT_N (x, validIn resetIn)

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

输入参数

全部展开

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

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

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

控制信号表明如果输入数据是有效的。当validIn1(真正的),对象捕捉的值dataIn论点。当validIn0(),忽略了值的对象dataIn论点。

数据类型:逻辑

清除内部状态的控制信号。当重置1(真正的),对象停止当前的计算和清除内部状态。当重置0(),输入有效的1(真正的),捕获数据块进行处理。

重新考虑,看到复位信号上节硬件控制信号页面。

依赖关系

要启用这个论点,集ResetInputPort真正的

数据类型:逻辑

输出参数

全部展开

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

控制信号,表明对象是准备新的输入数据样本在下一个周期。当准备好了1(真正的),您可以指定数据有效的输入的下一个时间步。当准备好了0(),对象忽略任何输入数据在下一个时间步。当您选择返回该输出“破灭基数2”体系结构。

数据类型:逻辑

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

数据类型:逻辑

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

数据类型:逻辑

控制信号,表明如果输出数据是有效的。当validOut1(真正的),该对象返回有效的数据dataOut论点。当validOut0(),值dataOut参数是无效的。

数据类型:逻辑

对象的功能

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

发行版(obj)

全部展开

getLatency 延迟的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岁,24);

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

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

通过调用函数计算FFT为每个数据样本。

Yf = 0 (1,3 * N);validOut = false (1, 3 * N);循环= 1:1:3 * N如果(mod(循环,N) = = 0) = N;其他的我= mod(循环,N);结束(Yf(循环),validOut(循环)]= HDLFFT128(复杂(y_fixed(我),(循环< = N));结束

丢弃无效数据样本。然后画出频率通道FFT的结果。

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

创建规范和输入信号。这个示例使用了一个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);

编写一个函数,创建和调用系统对象™。该函数不需要知道矢量的大小。对象保存输入信号的大小你第一次调用它。

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

计算FFT通过16-element向量对象。使用getLatency函数找出当第一个输出数据样本将会准备好。然后,添加帧长度来确定调用对象的次数。因为对象变量是在函数内部,使用第二个对象来调用getLatency。使用循环计数器validInN输入样本。

tempfft = dsphdl.FFT;loopCount = getLatency (tempfft 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(循环)]= HDLFFT128V16(复杂(y_vect(:,我)),(循环< = N / V));结束

丢弃无效的输出样本。

C = Yf (:, validOut = = 1);Yf_flat = C (:);

情节从FFT频率通道数据。FFT输出bit-reversed秩序。在绘图之前重新排序。

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

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

创建一个新的dsphdl.FFT对象和请求的延迟。

hdlfft = dsphdl.FFT (“FFTLength”,512);L512 = getLatency (hdlfft)
L512 = 599

请求的延迟信息相似的对象有不同的FFT长度。不改变原始的属性对象。

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

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

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

实现FFT的比例在每个阶段。的延迟不会改变。

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

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

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

算法

全部展开

扩展功能

版本历史

介绍了R2014b

全部展开